我正在一个AWS IoT项目中,其中MQTT例程,回调lambda和除初始化以外的所有其他事情都在xTaskCreatePinnedToCore()创建的任务内。

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

#1 楼

您不应该需要延迟,或者至少不需要一个会不断唤醒的延迟。

如果您按照您的建议,已经启动了一个由回调触发的线程,则不需要主循环。除非该循环在每次运行时都做有用的事情,否则它只会在每次唤醒并重新输入延迟时都使用CPU时间和电能。

我将设置最大整数值的延迟,永远有效地延迟,或者只是终止该线程。

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