Як довго portMAX_DELAY фактично чекає у FreeRTOS?

Хоча portMAX_DELAY зазначено як значення для очікування на невизначений час, він фактично чекатиме невизначено лише якщо INCLUDE_vTaskSuspend увімкнено у FreeRTOS config.

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 визначено тик кожну мілісекунду.


Дивіться схожі статті за категоріями: Вбудовані системи FreeRTOS