Dingo (29.03.2018 13:40, просмотров: 176) ответил SciFi на Элементарно. Сделать арбитра. Задачи запрашивают доступ к периферии с указанием приоритета. Ну или приоритеты уже вбиты по номеру задачи.
Переосмыслил, упростил, получилось что-то такое : while( taskExist() != false ) {
if ( Task0_Req != 0) {
Task0_Req = 0;
Task0();
continue;
}
if ( Task1_Req != 0) {
Task1_Req = 0;
Task1_();
continue;
}
if ( Task2_Req != 0) {
Task2_Req = 0;
Task2_();
continue;
}
// And so on
// .........
}
taskExist ()
{
return ( Task0_Req | Task1_Req | Task2_Req);
}
Приоритет есть порядок задачи в исходнике. Всё. А запросы можно взводить откуда угодно: из другой задачи, из прерывания. Мой внутренний перфекционист недоволен только портянкой кода, а не обходом в цикле.