Предположим, у нас есть ОС, которая работает на процессоре, который полностью совместим с его требованиями. Эта ОС управляется галочкой. Системное прерывание от тика поступает от внешнего таймера (периодический режим), который для простоты подключен к некоторому выводу IRQn процессора.
Выводы IRQ отсортированы по приоритету прерывания. IRQ0 имеет самый высокий приоритет, а IRQn имеет самый низкий приоритет. Приоритет есть как минимум по двум причинам. Первый, конечно, когда приходят два прерывания вместе, выбирается одно с более высоким приоритетом. Вторая причина заключается в следующем: при возникновении прерывания дальнейшие прерывания отключаются аппаратно. Когда прерывания включены в ISR (возможны вложенные прерывания), возможны только прерывания с более высоким приоритетом. И у меня есть несколько вопросов по этому поводу.
Мой первый вопрос, вероятно, очень прост, и я могу ответить на него сам (возможно), но я хочу прочитать надежный ответ.
- Как выбрать приоритет таймера? Это самый низкий приоритет прерывания в системе?*
Вот второй вопрос.
- Что если прерывание по таймеру происходит точно в то время, когда процессор обслуживает другое (ие) прерывание (я), и дальнейшие прерывания отключены?
А вот и дополнение от меня. Если может случиться описанная выше ситуация (во втором вопросе), есть шанс потерять системный тик. Может ли это вызвать большие проблемы?
* Если приоритет таймера таймера не был наименьшим приоритетом прерывания в системе, может возникнуть ситуация, когда процессор находится в ISR с более низким приоритетом, чем системное прерывание тика, и разрешает дальнейшие прерывания, и пользовательский процесс, который нам необходим для потенциального планирования, где-то сохраняется в стеке, где мы не можем найти его в процедуре системных тиков.
Я знаю, что все это может зависеть от системы, но меня интересуют любые типичные решения, похожие на эту ситуацию.
Извините за мой английский.