Работал все время с ucos - клоном embos.
Решил протестировать freertos.
Сразу возник вопрос , как реализованы критические секции ?
в embos например
#define OS_EnterRegion() {OS_RegionCnt++; }
то есть при входе в участок увеличивается счетчик , и если он не нулевой ,
то не происходит переключение между задачами.
во фриртосе нашел
#define portENTER_CRITICAL() vPortEnterCritical()
void vPortEnterCritical( void )
{
/* Disable interrupts first! */
__disable_interrupt();
/* Now interrupts are disabled ulCriticalNesting can be accessed
directly. Increment ulCriticalNesting to keep a count of how many times
portENTER_CRITICAL() has been called. */
ulCriticalNesting++;
}
я правильно все понял ? прерывания запрещаються вообще? надо вызывать вложенные приложения в ручную ? не будут работать не только другие задачи , но и банальные обработчики таймеров и мастеров типа СПИ ?