Эти приемы используются. В scmRTOS статически задаются количество процессов и размеры их стеков. Исходя из количества процессов автоматически выбирается подходящий тип переменной карты процессов, в порте для ARM выбирается оптимальная реализация функции поиска наиболее приоритетного процесса в карте. Параметром шаблона можно задавать тип переменной-счетчика в очередях. Есть сканер кода, который проверяет совместимость заданных настроек. Так что вопрос чисто риторический, и может быть сформулирован иначе: "А почему вы, Evgeny_CD, не делаете такие ОСи"? :) Ответ вы, скорее всего, знаете- идеальная программа должна быть написана на ассемблере и на ее написание уйдет бесконечное количество времени. К моменту написания она будет уже никому не нужна.
Любое решение обладает преимуществами и недостатками. Даже в embedded-применениях на этапе компиляции может быть неизвестно необходимое количество процессов, размеры очередей, количество необходимых сервисов и прочее... Их приходится создавать динамически, проигрывая в скорости и размере кода по сравнению со статическим распределением ресурсов.
Опять же ваше предложение "обращение по константным адресам" вместо "манипуляций с указателями" на ARM даст обратный ожидаемому вами эффект - за счет развитой косвенной адресации обращение по указателям (с манипуляцией) очень эффективно, а вот абсолютный адрес в команду не влезает, и обращение по абсолютному адресу выливается в два обращения по указателю: сначала косвенно относительно PC в регистр грузится адрес, потом косвенно по этому регистру идет обращение. Даже на обожаемой вами Xмеге косвенное обращение к нескольким рядом расположенным переменным начиная с какого-то количества этих обращений уже будет эффективнее: LD, ST занимают одно слово, LDS, STS - два.
-
- Спасибо за критику! Как водится, все крайности вредны. - Evgeny_CD(16.01.2009 10:51)