工具/软件:TI-RTOS
您好!
目前,我正在使用 Task_sleep()在给定的时间阻止任务。
但是、我想使用某种"延迟直至"块、就像我以前使用 FreeRTOS 一样。
如何使用 TI-RTOS 实现这一目的?
FreeRTOS 提供了一个执行此操作的函数:
void vTaskDelayUntil ( TickType_t *pxPreviousWakeTime,const TickType_t xTimeIncrement );
将任务延迟到指定的时间。 周期任务可以使用此函数来确保恒定的执行频率。
此函 数与 vTaskDelay ()在一个重要方面不同:vTaskDelay ()指定任务相对于 vTaskDelay ()被调用的时间的解除阻断时间,而 vTaskDelayUntil ()指定任务希望解除阻断的绝对时间。
vTaskDelay ()将使任务从调用 vTaskDelay ()开始阻止指定数量的节拍。 因此,很难单独使用 vTaskDelay()来生成固定的执行频率,因为调用 vTaskDelay()后任务解除阻止与下一个调用 vTaskDelay()任务之间的时间可能不是固定的[任务可能会通过调用之间的代码采用不同的路径, 或者每次执行时可能会被中断或抢占不同的次数]。
vTaskDelay ()指定了相对于函数调用时间的唤醒时间,而 vTaskDelayUntil ()指定了它希望解除阻止的绝对(精确)时间。
//每10个节拍执行一次操作。 void vTaskFunction (void * pvParameters) { TickType_t xLastWakeTime; const TickType_t xFrequency = 10; //使用当前时间初始化 xLastWakeTime 变量。 xLastWakeTime = xTaskGetTickCount(); for (;;) { //等待下一个周期。 vTaskDelayUntil (&xLastWakeTime、xFrequency); //在此处执行操作 。} }