1.简介
我似乎无法找到有关FreeRTOS任务中以下函数之间行为差异的信息或详细解释:vTaskDelay_delay_ms2.代码
…
从 https://www.freertos.org/Documentation/FreeRTOS_Reference_Manual_V10.0.0.pdf :
将调用vTaskDelay()的任务置于Blocked状态,以获得固定数量的tick中断。指定零滴答的延迟时间不会导致调用任务进入阻塞状态,但会导致调用任务产生任何共享其优先级的就绪状态任务。调用vTaskDelay(0)等同于调用taskYIELD()。
我认为你已经有了这个想法,但如果你创造了多个任务,那么 vTaskDelay() 将运行任务置于指定数量的节拍中断(不是毫秒!)的“阻塞”状态,并允许具有下一个最高优先级的任务运行,直到它产生控制(或被取代,取决于您的FreeRTOS配置)。
vTaskDelay()
我不认为 _delay_ms() 是FreeRTOS库的一部分。您确定它不是特定于平台的功能吗?我的猜测是,如果优先级最高的任务调用 _delay_ms() ,那将导致忙碌的等待。否则,具有更高优先级的任务可以抢占调用的任务 _delay_ms() 因为它正在推迟(即, _delay_ms() 不会立即产生控制权)。
_delay_ms()
也许是对上述内容的更好总结:在多任务应用程序中, _delay_ms() 不确定。