基于μCOS任务调度算法的嵌入式数据管理

基于μCOS任务调度算法的嵌入式数据管理,第1张

 

  本文提出了一种利用μC/OS任务调度算法实现的数据管理方法,该方法无需嵌入式 *** 作系统的支持,可应用于低端的嵌入式系统中,而且可以有效克服低端嵌入式应用中传统数据管理方法的缺陷。

  1 μC/OS任务调度算法

  μC/OS是一种占先式的多任务嵌入式 *** 作系统,它可以管理多达64个任务。μC/OS中,每个任务的优先级不一样且是唯一的,优先级最高的任务一旦准备就绪,则拥有CPU所有权并开始投入运行。所以,μC/OS的任务调度算法的基本思想就是,查找当前准备就绪的最高优先级的任务,并进行任务切换。实现上述任务调度算法主要包含两个步骤:确定目前哪几个任务处于就绪态,确定目前处于就绪态的任务中哪个优先级最高。为此,μC/OS提供了两个全局变量OSRdyTbl[]和OSRdyGrp。OSRdyTbl[]数组是任务就绪表,包含 8个字节(共64位),相当于把64个任务分为8组,每组8个任务,这64位数据的0、1状态分别代表64个任务是否处于就绪态(0代表空闲,1代表就绪);OSRdyGrp为1个字节数据(8位),每一位的0、1状态分别代表OSRdyTbl[]数组的相应字节是否非零(即该组中是否有任务处于就绪态)。通过这两个全局变量的赋值就可实现任务就绪态与空闲态的切换,这是μC/OS实现任务调度的基础。

  1.1 使任务进入就绪态

  μC/OS通过OSRdyTbl[]和OSRdyGrp某位置“1”,使相应任务进入就绪态,如图1所示。

  

基于μCOS任务调度算法的嵌入式数据管理,任务就绪表,第2张

 

  图1 任务就绪表

  假设优先级为12的任务进入就绪状态,12 = 1100b,则OSRdyTbl[1]的第4位置1,且OSRdyGrp的第1位置1(代表第1组有任务处于就绪态),相应的数学表达式为:

  OSRdyGrp|=0x02;

  OSRdyTbl[1]|=0x10;

  则μC/OS在执行任务调度时,通过OSRdyGrp的值即可判断出第1组任务中有任务处于就绪态,然后再通过OSRdyTbl[]数组的第1个字节即可判断出此时优先级为12的任务处于就绪态,则可做任务切换。

  从上面的计算可以得到:若OSRdyGrp及OSRdyTbl[]的第n位置1,则应该把OSRdyGrp及OSRdyTbl[]的值与2n相或。为了计算方便,μC/OS中把2n的8个值(n=0~7)先计算好,存在数组OSMapTbl[]中,即:

  OSMapTbl[0]=20=0x01(0000 0001)

  OSMapTbl[1]=21=0x02(0000 0010)

  ……

  OSMapTbl[7] = 27=0x80(1000 0000)

  μC/OS中,优先级数分解为高3位和低3位,高3位代表任务组号,低3位代表任务在所在组中的位置。则任意优先级为prio的任务进入就绪态只需执行以下程序:

  OSRdyGrp|=OSMapTbl[prio 》 3];

  OSRdyTbl[prio》3]|=OSMapTbl[prio & 0x07];

  

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2713420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存