Цитата(megajohn @ Jul 26 2012, 09:49)

чой та не понимаю.
Зачем отключать вообще прерывания ? Нужно всего лишь дать знать шедуллеру чтобы покамест не переключал задачи. А блокировать ВСЕ - это уже блокировка и на уровне драйверов, которые входящие данные складывают в циклический буфер.
или мои представления о РТОС ошибочны ?!
Так как переключение контекста происходит в прерывании с наименьшим возможным приоритетом (PendSV с приоритетом 0xFF), то можно не запрещать прерывания, а поднять нижнюю границу обслуживаемых прерываний. Тем самым оставив прерывания включёнными, но запретив переключение контекста. Как это делается для Cortex-M3, увы не скажу.
Будет что-то типа:
Код
int tn_disable_context_switch(void)
{
int state = get_priority_level();
if (state == 0xFF) // all interrupt are accepted
{
set_priority_level(0xFF - 1); // accept all, except PendSV
}
// else - do nothing, since PendSV is not acceptable already
return state;
}
void tn_enable_context_switch(int state)
{
set_priority_level(state);
}
На счёт представлений ничего не скажу

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