ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июня
1591223 Топик полностью
Nikolay_Po (Вчера, 22:03, просмотров: 19) ответил klen на ниче не понял, но вопросы правильные. я когда портил - сильно лоб морщил. у меня сделано 1) не все прерывания выключаются, только те что могуть влиять на планировщик, для этого есть регистр PFIC_ITHRESDR порога пиоритета 2) таски работают в user режиме чтоб не достали до SCR-регистров. 3)чтото еще перепиливал
Правильно ли я понял, что для ОСРВ, прерывания полностью блокируются сбросом бита MIE? И нет возможности разрешать не запрещать более приоритетные прерывания, не влияющие на задачи и переключения контекста ОС? 

Я пробую не сбрасывать MIE, а устанавливать ITHRESDR. Но есть сложность - ITHRESDR - это регистр периферии и его не записать без использования РОН. А значит, нет способа заблокировать прерывания до порчи состояния.

Вижу такой компромиссный вариант: При входе в прерывание ОСРВ, сначала маскирую MIE без порчи регистров и стека. Затем, быстро сохраняю в стек пару РОН, необходимых для установки порога ITHRESDR. Устанавливаю порог приоритета ITHRESDR (на уровень прерываний API RTOS) и разрешаю MIE. Таким образом, обеспечивается максимально короткий промежуток, в течение которого прерывания полностью блокированы.

Прерывания с приоритетом выше прерываний ОСРВ, максимально быстро разблокируются и, так как они не связаны с ОС напрямую и не пользуются её программными стыками, работают без ограничений с минимальной латентностью. После переключения контекста, порог блокировки прерываний сбрасывается, восстанавливаются регистры и происходит выход из перерывания ОС как обычно.