嵌入式操作系统原理及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1 数组

数组可以看成固定长度的连续内存单元,可以用做同一数据类型数据的集合,占用连续内存空间,其中的所有元素名称都相同,但每个元素都有一个编号。数组的名称可以作为指针来使用,通过“数组名+1”操作,可以完成所有数据元素的访问。如图4.1所示,a+1和a[1]起到的作用是相同的。

在嵌入式操作系统中数组常用做记录同类事物的表,方便分类存放。它的检索速度快且恒定。但是其缺点是占用连续内存空间大,当内存分配过程中产生碎片太多时,可能无法安排数组的存放,这个问题在内存资源有限的嵌入式系统编程中体现比较突出。

图4.1数组内存存放和访问方式

在µCOS中任务优先级别表(OSTCBPrioTbl)就是采用数组完成的。如图4.2所示,中间的OSTCBPrioTbl[]是一个指针数组,它以优先级为序号,将OSTCBTbl数组中的元素的指针形成一个数组,连续、等宽。每个元素在数组中的索引就是优先级号,而OSTCBPrioTbl中每个元素指向OSTCBTbl数组中相应的优先级的任务控制块。

图4.2 µCOS-Ⅱ初始化的数据结构

数组的不便就在于它必须预先知道最大的容量。在使用这样的数据结构时,如果有不用的单元,也不能回收,比较浪费;而如果超过最大容量,就会数组越界,可能会造成系统的灾难。嵌入式操作系统的要求就是必须满足各种量的任务在上面运行,因此数组并不是最好的办法。例如,在µCOS中任务优先级别表(OSTCBPrioTbl)采用数组,就使系统最大只能运行64个任务。如果只有1个任务在运行,那么系统的很多资源就被浪费了。