[an error occurred while processing this directive]
Как же без переключения стека?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено kons 05 июля 2002 г. 18:04
В ответ на: Ответ: Не обязательно, для "кооперативной" многозадачности переключение стека не требуется. отправлено bam 05 июля 2002 г. 17:35

Где должны лежать локальные переменные, адреса возврата и т.п. в то время, когда задача неактивна? Реализация корпоративной многозадачности без переключения стека возможна только в усеченном варианте - если допустить вызов функции, сдающей управление ОС, только из функции main_сдающей_управление_задачи(), и к тому же эта функция не должна иметь локальных переменных в стеке (или их сохранение ОС не гарантирует). Тогда из всего контекста остается только адрес возврата и его, действительно, можно сохранить отдельно, а стек не сохранять. Делать так приходилось. Но в серьезной программе использовать такую многозадачность очень неудобно.
Что касается вытесняющей многозадачности - на AVR делается легко, только время переключения задач получается приличным. Специальные аппаратные средства x86 необходимы лишь для защиты задач друг от друга, без чего МК вполне может прожить.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru