如果系统正在执行最高级任务,然后任务不出现阻塞,事件等待等,那么它要怎么切换到低级的任务呢?手动挂起吗?
如果高级任务不出现阻塞,等待,事件,那低级任务永远没有机会执行,这种情况在多任务系统中是不应该存在的,你说的手动挂起就属于阻塞,等待之类的。
如果当前系统正在执行最高优先级任务时,无法阻塞或等待事件,需要在该任务的代码中手动调用函数 taskYIELD()
来让出CPU资源,从而让低优先级任务执行。 taskYIELD()
函数会在当前任务的执行过程中主动让出CPU资源,使得FreeRTOS会重新调度任务,从而让其他等待执行的任务有机会得到执行。如果需要在当前任务中等待特定的事件,可以使用其他与事件相关的API函数,如 xSemaphoreTake()
、xEventGroupWaitBits()
等。此外,需要注意在调度程序挂起时或从关键部分内部调用API函数会导致应用程序崩溃,因此需要避免在这些情况下调用API函数。