如何使用 FreeRTOS 在任务中定期执行功能?

How to execute a function periodicly in a task with FreeRTOS?

我想在 1 毫秒调用的任务中每 10 毫秒执行一个函数。你知道是否有一个功能可以在不阻塞任务的情况下做到这一点吗?

祝你有个愉快的一天!

我会结合使用 xTaskCheckForTimeOut 和 vTaskSetTimeOutState。请参阅 API 文档中的示例 https://freertos.org/xTaskCheckForTimeOut.html

感谢 HS2,它运行良好。 这是我如何在 1 毫秒任务中每 10 毫秒执行一些代码的示例。

xTimeOutType x_timeout; 
portTickType openTimeout;
 
vTaskSetTimeOutState(&x_timeout);
openTimeout = 10; /*ms*/
 
while(1)
{
    //...
    //...

    if(xTaskCheckForTimeOut(&x_timeout, &openTimeout) == pdTRUE)
    {
        // do some stuff here
        openTimeout = 10; /*reload the 10ms*/
    }

    //...
    //...
}