ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 июня
1591737 Топик полностью
Nikolay_Po (Сегодня, 21:10, просмотров: 35) ответил mse homjak на Дык, этта... Контекст задачи должэн переключать планировщик.
Ну так все порты FreeRTOS на RISC-V (да и на прочие схожие по возможностям контроллера прерываний чипы/архитектуры), используют для переключения контекста прерывание. Контекст прерывания (содержимое набора регистров, значение указателя стека) перед возвратом из прерывания, заменяется на контекст задачи ОС (то же самое, плюс некоторые регистры, которые могут не сохранятся при обычном прерывании). И HPE этому препятствует, восстанавливая контекст прерывания 

аппаратно, принудительно при выходе из прерывания.

Планировщик - он запускается как обычный код на Си, который решает, какая задача достойна процессорного времени больше всего. И если переключение требуется, после вызова планировщика, на основе его запроса, вызывается прерывание переключателя контекста.

Переключатель контекста выполняет решение планировщика (переключать или ещё не переключать и если переключать, то на какую задачу) внутри прерывания. Переключение контекста внутри прерывания нужно для вытеснения задач. Смена текущей задачи - адреса следующей исполняемой инструкции и всего набора регистров, выполняется внутри прерывания и в самом конце, возврат из прерывания mret, выполняется уже на инструкцию кода новой задачи.

Так вот, аппаратное сохранение контекста прерывания, точнее, аппаратное восстановление по выходу из прерывания, будет ломать содержимое регистров контекста задачи ОС, которое заботливо подготовил переключатель контекста по заданию планировщика внутри прерывания.