ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
270420 Топик полностью
fk0, легенда (06.09.2011 14:49, просмотров: 580) ответил Vladimir Ljaschko на ОК. Я не претендовал на абсолютную истину для случая независимости. Только вопрос - и что, полсотни действительно автоматов с переменной состояния и switch/case или functions[state]?
switch/case и переменная состояния. Ближе к сотне скорей, точно посчитать сложно. А что поделать, какие альтернативы? Да, притормаживает в цикле, каждый раз дурную работу switch(S) делать. Есть проблемы с приоритетами (для этого, критичное, в большом цикле тупо чаще вызывается, не раз за цикл, а все 10 раз, например). Цикл: int main() { while (1) { module1_fsm(); module2_fsm()...; CLRWDT(); }} Вытесняющие ОС не годятся -- ОЗУ под стек не напасёшься. Кооперативные с раздельными стеками -- по той же причине. Pumpkin OS или OSA -- это ближе к Protothreads, уже лучше, но там другие принципиальные проблемы (в более крупных RTOS для одновременного ожидания более чем одного события есть механизм или "событий", или "флагов" как в ITRON, тут нет). Да и если изначально всё на бумажке проектировать, в виде автоматов, а потом тупо кодировать по технологии приближенной к "автоматному программированию А. Шалтыто" -- на RTOS плохо ложиться. Напрашивается, скорей, что-то вроде механизма сообщений, или сигналов и слотов (по-аналогии с QT). Где бы можно было связать, в рантайме, сигналы и слоты, и таким образом полуать вызов функции, из планировщика, при возникновении сигнала. И чтоб приоритеты и, возможно, вытеснение тут же было. state-machines.com что-то подобное делает... ещё некотроые RTOS из коммерческих, название запамятовал. Но для профессиональных контроллеров оно всё недоступно.
[ZX]