[an error occurred while processing this directive]
|
Где должны лежать локальные переменные, адреса возврата и т.п. в то время, когда задача неактивна? Реализация корпоративной многозадачности без переключения стека возможна только в усеченном варианте - если допустить вызов функции, сдающей управление ОС, только из функции main_сдающей_управление_задачи(), и к тому же эта функция не должна иметь локальных переменных в стеке (или их сохранение ОС не гарантирует). Тогда из всего контекста остается только адрес возврата и его, действительно, можно сохранить отдельно, а стек не сохранять. Делать так приходилось. Но в серьезной программе использовать такую многозадачность очень неудобно.
Что касается вытесняющей многозадачности - на AVR делается легко, только время переключения задач получается приличным. Специальные аппаратные средства x86 необходимы лишь для защиты задач друг от друга, без чего МК вполне может прожить.
E-mail: info@telesys.ru