Как долго portMAX_DELAY фактически ждёт в FreeRTOS?

Хотя portMAX_DELAY указан как значение для ожидания бесконечно, он будет фактически ждать бесконечно только если INCLUDE_vTaskSuspend включён в конфигурации FreeRTOS.

portMAX_DELAY обычно определяется как 0xFFFFFFFF, т.е. 2^32-1:

portmax_delay.cpp
#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

(однако если включены 16-битные тики с помощью configUSE_16_BIT_TICKS, он будет определён как 0xFFFF (2^16-1).

В случае если INCLUDE_vTaskSuspend включён, это рассматривается как специальное значение и будет фактически ждать бесконечно. Если INCLUDE_vTaskSuspend не определён, он будет ждать только 0xFFFFFFFF тиков (при условии 32-битных системных тиков).

Другими словами, это будет ждать только около 7 недель, если FreeRTOS настроен тикать каждую миллисекунду.


Check out similar posts by category: Встраиваемые системы FreeRTOS