基于μC/OS任务调度算法的嵌入式数据管理
引言
一般情况下,在嵌入式系统中实现数据管理我们常采用嵌入式数据库。但是目前常用的嵌入式数据库(如SQLite、Berkeley DB等)均需嵌入式操作系统的支持,且对嵌入式系统的内存、CPU处理速度等有较高要求,只能应用在比较高端的嵌入式系统中。在低端的嵌入式系统中,传统的数据管理方法是对数据存储空间按顺序编号,数据存储与删除均根据编号顺序操作。这种方法在多次删除后会出现很多存储空间碎片,一方面加大了程序查找空闲存储空间的难度,数据管理操作时间长(类似微机系统中硬盘长时间不做磁盘碎片整理会造成程序运行变慢的情况),另一方面可能造成存储空间利用率降低。本文提出了一种利用μ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所示。
假设优先级为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];
1.2 使任务进入空闲态
μC/OS通过任务就绪表OSRdyTbl[prio》3](prio代表任务优先级)中相应位清零使相应任务进入空闲态,当OSRdyTbl[prio》3]中的所有位都为零时,还需将OSRdyGrp的相应位清零,代表全组任务中没有一个任务进入就绪态。(责任编辑:admin)
- “扫一扫”关注融合网微信号
免责声明:我方仅为合法的第三方企业注册用户所发布的内容提供存储空间,融合网不对其发布的内容提供任何形式的保证:不保证内容满足您的要求,不保证融合网的服务不会中断。因网络状况、通讯线路、第三方网站或管理部门的要求等任何原因而导致您不能正常使用融合网,融合网不承担任何法律责任。
第三方企业注册用户在融合网发布的内容(包含但不限于融合网目前各产品功能里的内容)仅表明其第三方企业注册用户的立场和观点,并不代表融合网的立场或观点。相关各方及作者发布此信息的目的在于传播、分享更多信息,并不代表本网站的观点和立场,更与本站立场无关。相关各方及作者在我方平台上发表、发布的所有资料、言论等仅代表其作者个人观点,与本网站立场无关,不对您构成任何投资、交易等方面的建议。用户应基于自己的独立判断,自行决定并承担相应风险。
根据相关协议内容,第三方企业注册用户已知悉自身作为内容的发布者,需自行对所发表内容(如,字体、图片、文章内容等)负责,因所发表内容(如,字体、图片、文章内容等)等所引发的一切纠纷均由该内容的发布者(即,第三方企业注册用户)承担全部法律及连带责任。融合网不承担任何法律及连带责任。
第三方企业注册用户在融合网相关栏目上所发布的涉嫌侵犯他人知识产权或其他合法权益的内容(如,字体、图片、文章内容等),经相关版权方、权利方等提供初步证据,融合网有权先行予以删除,并保留移交司法机关查处的权利。参照相应司法机关的查处结果,融合网对于第三方企业用户所发布内容的处置具有最终决定权。
个人或单位如认为第三方企业注册用户在融合网上发布的内容(如,字体、图片、文章内容等)存在侵犯自身合法权益的,应准备好具有法律效应的证明材料,及时与融合网取得联系,以便融合网及时协调第三方企业注册用户并迅速做出相应处理工作。
融合网联系方式:(一)、电话:(010)57722280;(二)、电子邮箱:2029555353@qq.com dwrh@dwrh.net
对免责声明的解释、修改及更新权均属于融合网所有。