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