1、任务状态切换
任务创建的时候就会处于就绪状态ready,然后他马上就能够运行进入Running状态,运行中可以调用vTaskDelay进入阻塞状态,实际就是延时一小段时间,等待唤醒,当延时时间过去后就回到了就绪状态,下一个freeRtos的systik到了以后就可以再次运行,在阻塞的这段时间内,任务是不占用资源的,也就是不占用cpu
然后就是暂停任务vTaskSuspend,可以自己暂停自己,也可以其他任务暂停自己,这部分会直接导致任务进入暂停状态(suspend),此时任务不占用资源,也就是不占用cpu,这个任务暂停运行了
当其他任务调用vTaskResume会唤醒自己,就会让自己进入ready状态,等待下一次cpu运行自己
2、空闲任务回收结束的任务
任务结束退出的时候会直接进入右面的函数,可以看到这个函数最后会陷入死循环,导致所有的任务都没办法继续切换运行了,就会死机
任务能够调度切换,依赖于tick中断,现在tick中断关闭了,那么所有的任务都没法运行了
所以一个任务想要退出就必须进行自杀,或者由其他任务进行他杀
任务自杀vTaskdelete(NULL)
任务他杀vTaskDelete(任务句柄hadle)
任务结束的时候,一定有其他任务给这个任务进行收尸,这个任务就是空闲任务,空闲任务会将结束的任务的内存等一些资源回收,空闲任务的优先级是最低的,这就会导致其他任务中如果一直保持就绪态和运行态,空闲任务无法运行,所以应该想办法让任务进入阻塞态等,也就是延时使用vTaskDelay
空闲任务是在系统启动调度器的时候就创建了的