You are here

Подробный пример: шаг 7

Перевод может содержать ошибки. Читайте первоисточник: RTOS Context Switch - Step 7

Назад: [Как работает FreeRTOS] Вверх: [Как работает FreeRTOS] Вперёд: [Как работает FreeRTOS]

 

Выход из обработчика тиков ОС

Функция vPortYieldFromTick() возвращает управление обработчику прерывания SIG_OUTPUT_COMPARE1A(), где последней инструкцией является инструкция возврата из прерывания (RETI). Эта инструкция предполагает, что следующим значением в стеке будет адрес возврата, помещённый в стек в момент вызова обработчика прерывания.

Когда запускается прерывание тиков ОС, AVR автоматически помещает адрес возврата задачи TaskA в стек - т.е. адрес следующей инструкции, которая должна быть выполнена в задаче TaskA. Обработчик прерывания тиков ОС изменил указатель стека, и теперь он указывает на стек задачи TaskB. Следовательно адрес возврата, извлекаемый из стека инструкцией RETI, фактически является адресом инструкции задачи TaskB, которая должна была быть выполнена непосредственно перед приостановкой задачи TaskB.

Итого: прерывание тиков ОС прервало задачу TaskA, но вернуло управление в задачу TaskB - следовательно переключение контекста завершено!

Hobby's category: