Программирование ARM: решение проблем, FAQ Какова реальная длительность задержки portMAX_DELAY в FreeRTOS? Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Какова реальная длительность задержки 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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page