官术网_书友最值得收藏!

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個任務在運行,那么系統的很多資源就被浪費了。

主站蜘蛛池模板: 鸡泽县| 濮阳市| 新乐市| 永川市| 贡嘎县| 藁城市| 宜君县| 凌海市| 嘉善县| 会泽县| 大城县| 东源县| 留坝县| 西吉县| 崇信县| 池州市| 西畴县| 永城市| 婺源县| 尼木县| 龙州县| 当阳市| 赣榆县| 大理市| 齐齐哈尔市| 砀山县| 云南省| 沅江市| 道孚县| 大余县| 绵阳市| 南充市| 延吉市| 雷山县| 佛坪县| 湟中县| 苍梧县| 民县| 筠连县| 固阳县| 明星|