FreeRTOS开发五、任务状态切换以及空闲任务回收结束的任务

1、任务状态切换
在这里插入图片描述

在这里插入图片描述任务创建的时候就会处于就绪状态ready,然后他马上就能够运行进入Running状态,运行中可以调用vTaskDelay进入阻塞状态,实际就是延时一小段时间,等待唤醒,当延时时间过去后就回到了就绪状态,下一个freeRtos的systik到了以后就可以再次运行,在阻塞的这段时间内,任务是不占用资源的,也就是不占用cpu
然后就是暂停任务vTaskSuspend,可以自己暂停自己,也可以其他任务暂停自己,这部分会直接导致任务进入暂停状态(suspend),此时任务不占用资源,也就是不占用cpu,这个任务暂停运行了
当其他任务调用vTaskResume会唤醒自己,就会让自己进入ready状态,等待下一次cpu运行自己
2、空闲任务回收结束的任务
在这里插入图片描述
任务结束退出的时候会直接进入右面的函数,可以看到这个函数最后会陷入死循环,导致所有的任务都没办法继续切换运行了,就会死机
任务能够调度切换,依赖于tick中断,现在tick中断关闭了,那么所有的任务都没法运行了
所以一个任务想要退出就必须进行自杀,或者由其他任务进行他杀

任务自杀vTaskdelete(NULL)
任务他杀vTaskDelete(任务句柄hadle)

任务结束的时候,一定有其他任务给这个任务进行收尸,这个任务就是空闲任务,空闲任务会将结束的任务的内存等一些资源回收,空闲任务的优先级是最低的,这就会导致其他任务中如果一直保持就绪态和运行态,空闲任务无法运行,所以应该想办法让任务进入阻塞态等,也就是延时使用vTaskDelay
空闲任务是在系统启动调度器的时候就创建了的
在这里插入图片描述

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值