Какова реальная длительность задержки portMAX_DELAY в FreeRTOS? Печать
Добавил(а) microsin   

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

Константа portMAX_DELAY обычно определена как 0xFFFFFFFF т. е. 232-1:

#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

Примечание: если разрешена опция 16-битных тиков configUSE_16_BIT_TICKS, то portMAX_DELAY будет определена как 0xFFFF (216-1).

В случае, когда In case INCLUDE_vTaskSuspend разрешена, значение portMAX_DELAY обрабатывается как специальное, и тогда задержка действительно бесконечная. Если же опция INCLUDE_vTaskSuspend не определена, то ожидание будет только лишь ждать 0xFFFFFFFF тиков (если подразумевать, что системные тики 32-разрядные). Другими словами задержка составит только около 7 недель, если длительность тика FreeRTOS определена в 1 миллисекунду.

[Ссылки]

1. How long does portMAX_DELAY actually wait in FreeRTOS? site:techoverflow.net.