Цитата(Neyron @ Jan 11 2008, 18:20)

DRIVER(TIMER_HOOK,OUT);
DRIVER(IDLE_HOOK,OUT);
//
DRIVER(ISR_ENTER_PIN,OUT);
DRIVER(ISR_EXIT_PIN,OUT);
У себя все это удалил, работает при scmRTOS_CONTEXT_SWITCH_SCHEME=0. Можно выполнение процесса впихнуть в 4.4 мс. Это нормальная работа системы? Раньше с такой ситуацией не приходилось иметь дело.
Эти строчки для наблюдения осциллографом за поведением - когда переключаются контексты и когда проц спит. Естественно, в боевой системе это не нужно.
Цитата(Neyron @ Jan 11 2008, 18:20)

Если установить 1, то непонятно назначение следующего фрагмента. Нужен ли он?
Там в случае scmRTOS_CONTEXT_SWITCH_SCHEME==1 в качестве прерывания перепланировки используется прерывание компаратора. Для генерации этого прерывания используется дерганье ногой, которая дергает вход компаратора. Этот кусок выбиает - какой из вариантов "возбуждения" ноги используется - если процессор позволяет инвертировать состояние ноги записью в PINx, то выбирается прерывание по любому изменению выхода компаратора и прерывание возбуждается инвертированием ноги. Если не позволяет - то приходится записью в PORTx формировать импульс и, соответственно, компаратор настраивать на один из фронтов.
У меня зреет идея использовать для переключения контекста прерывание SPM (как наиболее бесполезное), но задача под AVR пока в стадии охмурения заказчика, поэтому идея пока только обдумывается. Можете принять участие в реализации.
Аналогичный вариант с переключением от несбрасываемого прерывания у меня реализован в порте на STR71x, прогон на ките позволил сделать вывод, что идея работоспособна.
Цитата(Neyron @ Jan 11 2008, 18:20)

Мега 128. Тик системного таймера ~4.4 мс. Если время выполнения процесса превышает это время, происходит сбой.
Про это рассказывайте подробнее - такого быть не должно. Для начала, что такое "время выполнения процесса"?