ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 июня
1591763 Топик полностью
Nikolay_Po (Вчера, 22:37, просмотров: 38) ответил mse homjak на Ну, ХЗ. Я предполагал, что стек задачи, это не стек машины. Или там нет возможности для такого финта ушами? Ну, типа, mashine/user mode. Там указателя стека, как такового, нет, мож как-то можно разделять стек машины и стек задачи? По крайней мере, команда mret на что-то намекает. Да и, в принцыпе, наработана масса трюков, типа замены вершины стека и возврат из прерывания в процэдуру сохранения/смены контента для переключения задач.
Если задача должна быть вытеснена (а FreeRTOS - вытесняющая ОС), это можно сделать, лишь прервав задачу прерыванием. Внутри прерывания, вместо восстановления контекста прерывания "как было до прерывания", восстанавливается контекст более приоритетной задачи. И вот это нетиповое использование прерывания, с возвратом не в прежний контекст прерывания, а в новый, и, по моему мнению, не совместимо с аппаратным восстановлением контекста. 

Приходится пользоваться специальными средствами управления прерываниями - по необходимости, запрещать аппаратное восстановление контекста прерывания в пользу программного восстановления контекста другой задачи. По крайней мере один такой способ есть. Но мне интересно, как товарищ Клен решил эту задачу - оставил HPE включённым, при этом, восстанавливая контекст не прерывания, а задачи?