在FreeRTOS环境中实现等待时间精度

时间:2018-12-11 12:35:35

标签: freertos

我是在FreeRTOS上设计的软件的一部分,我正在通过串行端口实现特定的应用程序层协议,我需要在其中等待/轮询一定的毫秒数。例如,我向设备发送一条消息,要求确认,系统应严格等待200毫秒,直到从接收方收到确认,否则再次发送该消息。如果我确实有其他任务以相同的优先级运行,是否有一种方法可以准确地(例如在±5%的公差范围内)实现FreeRTOS中的等待时间。由于CPU负载,其他任务执行等因素,不确定vTaskDelay()是否会一直提供可重复的结果。是否有更好的方法来设计这种实现?

1 个答案:

答案 0 :(得分:1)

VTaskDelay应该可以。它将使您在请求的延迟时间和请求的延迟时间之间延迟-1个rtos滴答声。

如果您的系统负载很重并且具有相同或更高优先级的任务运行太长时间,则可能会导致问题。如果某些优先级相同的任务没有以某种方式产生,那么它们将在每个刻度上轮循。

另一种方法是使用硬件定时器和中断,但是通过仔细的设计和优先级分配,可以轻松实现200ms±5%的容差。