利用OS任务调度来实现嵌入式数据管理[3]

互联网技术 责任编辑:niconise 2012-03-19

摘要:2利用μC/OS任务调度算法实现嵌入式数据管理在低端的嵌入式应用中,数据管理的主要功能就是数据存储与数据删除。传统的做法是对数据存储空间按地址顺序编号,数据存储与删除均根据编号操作,每个编号的存储空间还提供了标志位,用于判断该空间是否已被占用。这种方法有一个很大的弊端:多次删除后会出现存储空间碎片,这造成后续操


2  利用μC/OS任务调度算法实现嵌入式

数据管理在低端的嵌入式应用中,数据管理的主要功能就是数据存储与数据删除。传统的做法是对数据存储空间按地址顺序编号,数据存储与删除均根据编号操作,每个编号的存储空间还提供了标志位,用于判断该空间是否已被占用。这种方法有一个很大的弊端:多次删除后会出现存储空间碎片,这造成后续操作中查找空闲空间耗时较长,且存储量越大,这个现象越严重,大大降低了数据管理操作的效率。有些程序员为了解决这个弊端对删除操作只提供删除所有记录的功能,不提供单独删除某个记录的功能,但这显然牺牲了产品的易用性。本文利用μC/OS任务调度算法实现嵌入式数据管理,可有效解决以上问题。

2.1  基本思想

利用μC/OS任务调度算法实现嵌入式数据管理的基本思想是:将μC/OS中的“任务优先级”与数据管理的“记录号”对应,将“任务就绪态”与“存储空间空状态”(注意,不是存储空间满状态)对应,将“任务空闲态”与“存储空间满状态”对应,将“使任务进入就绪态”与“数据删除”对应,将“使任务进入空闲态”与“数据存储”对应,将“查找当前处于就绪态的较高优先级任务”与“查找当前空闲存储空间”对应。即在实际应用中,数据存储前先根据μC/OS中的“查找当前处于就绪态的较高优先级任务”的方法查找目前优先级较高的空闲存储空间,获得相应记录号,然后在数据存储后根据μC/OS中的“使任务进入空闲态”的方法使相应记录的存储空间置为“满”状态;数据删除后根据μC/OS中的“使任务进入就绪态”的方法使相应记录的存储空间置为“空”状态。显然,该方法较传统方法有两大优点:查找空闲存储空间的速度远高于传统方法,且查找时间为常数,即查找时间与记录数无关(传统方法的查找时间随记录数递增);不会出现存储空间碎片,因为本方法按优先级存储数据,删除的存储空间的优先级肯定高于未使用的存储空间,则在后续存储操作中会将其优先用于存储,从而也就避免了存储空间碎片的出现。

2.2  算法的改进

μC/OS的最大任务数为64,这意味着直接采用μC/OS任务调度算法实现的数据管理的最大记录数也仅为64个,这显然不适用于多数应用场合,因此需对算法进行改进。本方法引入“页”的概念,即每64个记录为1页,数据存储前先查找包含空记录的页号,然后在该页中查找空记录。查找包含空记录的页号的方法与查找空记录的方法相同(即都根据μC/OS中的“查找当前处于就绪态的较高优先级任务”的方法查找),因此最大记录数为64记录/页×64页=4096个记录。依此类推,可继续扩大存储记录数。为了理解方便,下文代表记录空闲状态和页内记录号的全局变量定义为OSRdyTbl[64][8]、OSRdyGrp[64]和prio,代表页空闲状态和页号的全局变量定义为OSRdyPage、OSRdyPageTbl[8]和PrioPage,代表记录在整个存储空间的序号定义为RecordNo(则RecordNo = PrioPage×64+prio)。

2.3  嵌入式数据管理主要步骤的实现

2.3.1  数据初始化

在嵌入式系统刚运行时,所有记录应为空状态,因此需将代表记录空闲状态和页空闲状态的全局变量OSRdyTbl[]、OSRdyGrp、OSRdyPageTbl[]和OSRdyPage的所有字节均初始化为0xff(因为“1”代表空闲)。

[1]  [2]  [3]  [4]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

通信工程师备考资料免费领取

去领取

距离2025 通信工程师考试

还有
  • 0
  • 3
  • 7
专注在线职业教育24年

信息系统项目管理师

信息系统项目管理师

!
咨询在线老师!