FreeRTOS 任务应该在每个循环中延迟多长时间?

物联网 aws-iot
2021-06-07 02:28:37

我正在开发一个 AWS IoT 项目,其中 MQTT 例程、回调 lambda 以及除初始化之外的所有其他类型都在由xTaskCreatePinnedToCore().

这个任务只做几件事:连接到 AWS,订阅主题,然后进入一个无限循环,在那里它调用aws_iot_mqtt_yield检查错误等。在每个循环中我也调用:vTaskDelay(10 / portTICK_RATE_MS);它来自一个示例项目,其中延迟为 1 秒,然后我将其减少到 10 毫秒。什么是“健康”延迟?为什么我们甚至需要在这里延迟?谢谢!

1个回答

您不应该需要延迟,或者至少不需要一直醒来的延迟。

如果如您所建议的那样,您启动了一个由回调触发的线程,则不需要主循环。除非该循环每次运行时都在做一些有用的事情,否则每次它从延迟中唤醒和重新进入时它只是使用 CPU 时间和电力。

我要么设置最大整数值的延迟,以永久有效地延迟,要么简单地终止该线程。

如果循环中有一些有用的东西,那么合理的延迟将完全取决于那个东西是什么。