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