低优先级的任务我们一般怎么处理比较合理

老师,高优先级任务由事件驱动,然后vTaskDelay()无限阻塞,我这样理解对吗,低优先级的任务我们一般怎么处理比较合理哈;低优先级的任务就只用vTaskDelay控制时间驱动可以吗

理解不对,比如高优先级的任务可以这样:while (1) { 调用函数读队列(读不到就阻塞); 读到数据后处理; } ,它并不一定使用vTaskDelay。如果它不需要读取数据,那么可以这样写:while (1) { 处理; vTaskDelay(50); },看到了吧,这时不是无限阻塞,而是阻塞一定时间以便低优先级任务可以运行。

对于低优先级的任务,也是建议使用事件驱动的方法,举例:while (1) { 调用函数读队列(读不到就阻塞); 读到数据后处理; } 。如果这个低优先级的任务需要处理很复杂的事情,需要长时间运行,它不是靠事件来驱动。那么就直接写一个死循环就行了:while (1) { 处理; },然后把它的优先级设置为0,跟空闲任务一样的优先级。为什么要跟空闲任务一样?如果有任务自杀的情况,需要空闲任务来回收内存,如果你的这个低优先级任务的优先级高于空闲任务,空闲任务就没办法执行了。