Dmitry Dubrovenko писал(а):вот Вы о чём
Если продолжать на примере ДР8, то там 3 источника прерываний. Таймер опроса индикации - кнопок, таймер темпа, UART MIDI. Так вот, прерывание UART выполняется как критическая секция. Если выполнение обработчика UART долгое (а опрос клавиш работает очень быстро - килогерцы - для снятия дребезга контактов), то при этом, может произойти инверсия приоритетов (и, как следствие, изменение последовательности обработки событий). Поэтому, критическая секция UART минимизирована по времени выполнения.
Также, необходимо было гарантировать максимальную длину времени обработки UART (т.е. при любом раскладе время меньше либо равное этому максимальному значению), в противном случае, стэк обработчика прерываний кнопок-индикации (как наиболее частый, но с наименьшем приоритетом) столкнулся бы с рабочей областью.
Такой метод распределения прерываний называется RATE MONOTONIC.
https://en.wikipedia.org/wiki/Rate-monotonic_schedulingТам много преимуществ, но также есть и ограничения. В основном на использование динамически рапределённой памяти, например. В DR8 стэк занимает меньше 128 байт. Отсутствие сторожевого таймера усложняет ситуацию, т.к. если что-то виснет, то "подхватить" машину уже нельзя.
Вот поэтому столько мучений и писанины про детерминизм