Я работаю над аппаратным обеспечением крошечного геккона Silicon Labs EFM, запуская RTX с использованием цепочки инструментов 4.22 arm. У меня есть следующая конфигурация для RTX: - Группировка NVIC 7.1 - System Tick & Pend Приоритет прерывания системной службы 224. - Оба прерывания включены и никогда не отключаются моим потоком кода. - Регистры PRIMASK и BASEPRI равны 0.
Коду RTX в моем проекте уже несколько лет, и я не уверен, какая это версия.
Я заметил следующую проблему: при использовании isr_evt_set для запуска задачи из прерывания RTC выполнение задачи задерживается. Я обнаружил, что прерывание «Pend System service» не вызывается, когда прерывание RTC заканчивается.
isr_evt_set переводит «Ожидающую системную службу» в состояние ожидания при вызове из прерывания RTC. После завершения прерывания RTC прерывание «Ожидание системного обслуживания» не становится активным. Вместо этого процессор возобновляет режим потока и выполняет задачу с низким приоритетом (управление питанием).
Я установил бит SLEEPONEXIT регистра SCB в 0 в прерывании RTC. Прерывание «Ожидание системного обслуживания» в конечном итоге выполняется примерно через 4-10 циклов RTC.
Я ожидаю, что прерывание «Ожидание системного обслуживания» будет запущено после прерывания RTC. Можете ли вы объяснить, почему кортекс возвращается в режим потока после прерывания RTC?