FreeRTOS学习笔记:FreeRTOS如何入门?任务就绪态、阻塞态、挂起态,傻傻分不清?

由于项目需要,开始学习FreeRTOS
《FreeRTOS实时内核实用指南》,入门佳作,通俗易懂,直接百度下载就好,当然我主页里也上传了,随缘下载。

第一章看完,解答了我很多疑惑:

  1. 最基本的机制是任务调度
  2. 任务总是处于运行态和非运行态
    非运行态分为:就绪态、阻塞态、挂起态
  3. 每一个心跳周期,任务调度器就会执行一次(类似系统中断),来仲裁接下来CPU交给哪个任务来使用,获得CPU使用权的任务处于运行态,其他任务处于非运行态,同一时刻,只有一个任务处于运行态。
  4. 任务调度器判断给谁使用的依据是:
    1.这个任务必须处于就绪态
    2.这个任务是当前处于就绪态任务中最高优先级的那一个
  5. 如果两任务优先级相同,那么就每个任务用一个心跳周期,交替进行。
  6. 高优先级的任务如果不主动退出,会使其他低优先级的任务饿死
  7. 主动退出有两种方法:
    1.进入阻塞态(让自己歇一段时间,到了时间,就会进入就绪态)
    2.进入挂起态(把自己藏起来,除了别人叫(使用Resume函数),否则就一直藏着)
  8. 当所有任务没有就绪的时候,FreeRTOS不能让CPU闲着,有一个空闲任务,即所有任务都没就绪,空闲任务就开始跑,空闲任务优先级最低。

那么下面说人话:

村里有个姑娘叫小花(CPU),村里有很多小伙子都在追求她,小花她妈(任务调度器),每天都要去选小伙子(任务),选中的小伙子会被允许跟小花交往一天(任务占用CPU一个心跳周期),小花她妈选小伙子的标准是:
第一,小伙子要喜欢小花(任务处于就绪态)。
第二,小伙子要是所有小花追求者中条件最好的(就绪态任务中处于最高优先级)。
第三,如果有多个喜欢小花的小伙子条件一样好,就让他们轮流,一人跟小花交往一天(相同优先级的任务,任务调度器会让每个任务执行一个心跳周期,轮流执行)。
小伙子中有一个叫小绿的,特别喜欢小花,人又帅,条件又好,小花他妈一眼就看上了,小绿因为没有敌手,所以每天都能跟小花交往,同村里条件不好的小伙组,见小绿天天霸占着小花,殉情了(低优先级的任务被饿死),小绿见局势不妙,决定先去避一避,等过一段时间再回来(进入阻塞态),他对小花她妈谎称自己不喜欢小花了,由于小花他妈选择小伙子的标准的第一条就是小伙子要喜欢小花(任务必须处于就绪态)。所以小花妈就开始从别的追求小花的小伙子中选条件最好的(在就绪态的任务里选择最高优先级的任务)。过了一段时间,小绿见自己天天被绿,他决定复出(从阻塞态重返就绪态),这天绿小绿的小黄在跟小花逛街,被刚复出的小绿撞见,可小绿此时没办法,只能等小花他妈第二天来评评理(等待下一个心跳周期任务调度器仲裁),因为小花他妈一天只出现一次(每个心跳周期任务调度器运行一次),第二天,小花他妈见小绿回心转意,条件还那么好,就让他继续跟小花交往,这次小绿学聪明了,每隔一段时间就跟小花妈说自己不喜欢小花了,然后出去歇一阵子再回来(循环进入阻塞态),这样大家都还有机会可以跟小花交往,同村的小伙子们不会想殉情(高低优先级的任务都可以使用CPU资源,低优先级任务不会被饿死),直到有一天,头上已经是青青草原的小绿实在受不了了,他决定从此隐居山林(进入挂起态),除非有人去找他(调用resume函数唤醒),否则他再也不见小花了(挂起态的任务对任务调度器来说不可见)。同村的小伙子见小绿都这样了,也就收敛了很多,甚至有时候,小花他妈都找不到小伙子,但小花没有人陪着聊天咋办呢?那只找来门口的二傻(空闲任务)陪小花,二傻子从小就一直喜欢小花(空闲任务除了在运行态就在就绪态),二傻并不傻,他也会像其他小伙子一样做很多事情(空闲任务中也可以写一用户自己的函数(称为空闲任务钩子函数)),但他的条件太差了(优先级最低,为0),只要有小伙子比二傻条件好点,来追求小花,小花他妈就会让二傻走(只要该任务优先级高于0,空闲任务就会被抢占)。有一天又来了一个三傻,跟二傻条件差不多(用户自己的任务也可以跟空闲任务共享优先级:0),又没有其他小伙子来追求小花,小花他妈就让三傻跟跟二傻轮流陪小花聊天。
这里再补充一点,小花妈并不会凭主观判断哪个小伙子的条件好不好,因为村子里从古至今都流传着一个法则,每个小伙子都会有一个数字,这个数字越高,条件越好,这个数字就由掌管世界的神秘人来掌握,神秘人觉得谁条件好就把谁的数字调高,所以神秘人为了让小花和小伙子们相处和睦,必须谨慎分配这个数字,需要洞悉小花什么时候需要什么(根据任务的要紧程度,调整任务优先级),这是一件让人头疼的工作,毕竟洞悉女孩子的想法是很难的事。

猜你喜欢

转载自blog.csdn.net/weixin_44578655/article/details/104547355