[an error occurred while processing this directive]
|
Есть две ветки критичные по времени выполнения, остальное реализуется в основном цикле (пока реализуется, дальше предугадать трудно).
Одна ветка это 4 програмных uart'а (9600), вторая - железный uart на 115200 бит. Програмные uart'ы используют 3 прерывания от таймера, которые происходят через 339 тактов(А), 86(B), 86(C) и так по кругу. Через каждые 128 циклов этих прерываний происходит разбор принятой битовой последовательности. Сейчас сделано так: прерывания от таймера реализованы в функциях обработчиках этих прерываний, но в прерывании C каждый 128 вызов устанавливается прерывание IN0 где и происходит рабор битовой последовательности и где сразу же разрешаются прерывания. В железном uart'е по приходе всего пакета также устанавливается прерывание IN1, где происходит разбор пакета и где так же разрешаются сразу же прерывания. Все в целом бы устроило, но нет механизма определения приоритетности обработчиков IN0, IN1. Т.е. если в момент обработки, например IN0 происходит установка прерывания IN1, то IN0 продолжит свое выполнение только по окончании выполнения IN1, и соотвественно наоборот. Не могу придумать как сделать механизм определения приоритетности с ограниченным временем выполнения его в режиме запрета прерываний тактов в 30. Может есть какие-то скоростные решения. Мне в принципе не нужен полный rtos, мне нужен механизм распределения выполнения функций по приоритетности вызываемых только из прерываний. В целом это в большей степени опасение за будущее, чем сегодняшняя насущная проблема, но спать этот момент спокойно не дает:)
E-mail: info@telesys.ru