《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > μC/OS-Ⅱ實時操作系統內存管理的改進

μC/OS-Ⅱ實時操作系統內存管理的改進

2009-02-17
作者:王保進 王志剛1 劉恒禹2

  摘? 要: 分析了μC/OS-Ⅱ實時操作系統內存管理上存在的不足,提出了改進方法,通過一個具體實例描述了該方法的實現。?

  關鍵詞: 實時操作系統? 內存管理? 微處理器? 鏈接器?

?

  μC/OS-Ⅱ是一種開放源碼的實時操作系統,具有搶先式、多任務的特點,已被應用到眾多的微處理器上。雖然該內核功能較多,但還是有不甚完善的地方。筆者在分析使用中發現,內核在任務管理(包括任務調度、任務間的通信與同步)和中斷管理上是比較完善的,具有可以接受的穩定性和可靠性;但在內存管理上顯得過于簡單,內存分區的建立方式有不合理之處。?

1 內存管理不足之處的分析?

  在分析許多μC/OS-Ⅱ的應用實例中發現,任務??臻g和內存分區的創建采用了定義全局數組的方法,即定義一維或二維的全局數組,在創建任務或內存分區時,將數組名作為內存地址指針傳遞給生成函數。這樣實現起來固然簡單,但是不夠靈活有效。?

  編譯器會將全局數組作為未初始化的全局變量,放到應用程序映像的數據段。數組大小是固定的,生成映像后不可能在使用中動態地改變。對于任務棧空間來說,數組定義大了會造成內存浪費;定義小了任務棧溢出,會造成系統崩潰。對于內存分區,在不知道系統初始化后給用戶留下了多少自由內存空間的情況下,很難定義內存分區所用數組的大小??傊萌謹到M來分配內存空間是很不合理的。?

  另外,現在的μC/OS-Ⅱ只支持固定大小的內存分區,容易造成內存浪費。μC/OS-Ⅱ將來應該被改進以支持可變大小的內存分區。為了實現這一功能,系統初始化后能清楚地掌握自由內存空間的情況是很重要的。?

2 解決問題的方法?

  為了能清楚掌握自由內存空間的情況,避免使用全局數組分配內存空間,關鍵是要知道整個應用程序在編譯、鏈接后代碼段和數據段的大小,在目標板內存中是如何定位的,以及目標板內存大小。對于最后一條,系統編程人員當然是清楚的,第一條編譯器會給出,而如何定位是由編程人員根據具體應用環境在系統初始化確定的。因此,系統初始化時,如果能正確安排代碼段和數據段的位置,就能清楚地知道用戶可以自由使用的內存空間起始地址。用目標板內存最高端地址減去起始地址,就是這一自由空間的大小。?

3 舉例描述該方法的實現?

  下面以在CirrusLogic公司的EP7211微處理器上使用μC/OS-Ⅱ為例,描述該方法的實現過程。假設基于μC/OS-Ⅱ的應用程序比較簡單,以簡化問題的闡述。?

3.1 芯片初始化過程和鏈接器的功能?

  EP7211采用了RISC體系結構的微處理器核ARM7TDMI,該芯片支持內存管理單元MMU。系統加電復位后,從零地址開始執行由匯編語言編寫的初始化代碼。零地址存放著中斷向量表,第一個是復位中斷,通過該中斷向量指向的地址可以跳轉到系統初始化部分,執行微處理器寄存器初始化。如果使用虛擬內存,則啟動MMU,然后是為C代碼執行而進行的C環境初始化。之后創建中斷處理程序使用的??臻g,最后跳轉到C程序的入口執行系統C程序。?

  對于應用程序,ARM軟件開發包提供的ARM鏈接器會產生只讀段(read-only section RO)、讀寫段(read-write section RW)和零初始化段(zero-initialized section ZI)。每種段可以有多個,對較簡單的程序一般各有一個。?

  只讀段就是代碼段,讀寫段是已經初始化的全局變量,而零初始化段中存放未初始化的全局變量。鏈接器同時提供這三種段的起始地址和結束地址,并用已定義的符號表示。描述如下:Image$$RO$$Base表示只讀段的起始地址,Image$$RO$$Limit表示只讀段結束后的首地址;Image$$RW$$Base 表示讀寫段的起始地址,Image$$RW$$Limit表示讀寫段結束后的首地址;Image$$ZI$$Base 表示零初始化段的起始地址,Image$$ZI$$Limit表示零初始化段結束后的首地址。?

  一般嵌入式應用,程序鏈接定位后生成bin文件,即絕對地址空間的代碼,因此上述符號的值表示物理地址。對于簡單程序,可在編譯鏈接時指定RO和RW的基地址,幫助鏈接器計算上述符號的值。對于較復雜的程序可以由scatter描述文件來定義RO和RW的基地址。?

3.2 具體實例及說明?

  所謂C環境初始化,就是利用上述符號初始化RW段和ZI段,以使后面使用全局變量的C程序正常運行。下面是初始化部分的實例:?

??? ENTRY??? ?? ;應用程序入口,應該位于內存的零地址。?

??? ;中斷向量表?

??? B?????? Reset_Handler?

??? B?????? Undefined_Handler?

??? B?????? SWI_Handler?

??? B?????? Prefetch_Handler?

??? B?????? Abort_Handler?

??? NOP??? ???? ;保留向量?

??? B?????? IRQ_Handler?

??? B?????? FIQ_Handler?

??? ;當用戶使用除復位中斷以外的幾個中斷時,應將跳轉地址換成中斷處理程序的入口地址。?

??? Undefined_Handler?

??? ??????? ??? B?????? Undefined_Handler?

??? SWI_Handler?

??? ??????? ??? B?????? SWI_Handler?

??? Prefetch_Handler?

??? ??????? ??? B?????? Prefetch_Handler?

??? Abort_Handler?

??? ??????? ??? B?????? Abort_Handler?

??? IRQ_Handler?

??? ??????? ??? B?????? IRQ_Handler?

??? FIQ_Handler?

??? ??????? ??? B?????? FIQ_Handler?

??? ;程序初始化部分?

??? Reset_Handler?

??? ??? ;初始化微處理器寄存器,以使其正常工作。?

??? ? ? ……?

??????? ;啟動MMU,進入虛擬內存管理。?

??? ??? ……?

??????? ;初始化C環境。?

??????? ??? IMPORT? |Image$$RO$$Limit|????? ?

??? ??????? IMPORT? |Image$$RW$$Base|?????? ?

??? ??????? IMPORT? |Image$$ZI$$Base|?????? ?

??? ??????? IMPORT? |Image$$ZI$$Limit|????? ?

??? ??????? LDR???? r0, =|Image$$RO$$Limit| ?

??? ??????? LDR???? r1, =|Image$$RW$$Base|? ?

??? ??????? LDR???? r3, =|Image$$ZI$$Base|? ?

??? ??????? CMP???? r0, r1????????????????? ?

???? ?????? BEQ???? %F1?

??? 0?????? CMP???? r1, r3????????????????? ?

??????????? LDRCC?? r2, [r0], #4?

??? ??????? STRCC?? r2, [r1], #4?

??????? ??? BCC???? %B0?

??? 1?????? LDR???? r1, =|Image$$ZI$$Limit| ?

??? ??????? MOV???? r2, #0?

??? 2?????? CMP???? r3, r1???????????????? ?

??? ??????? STRCC?? r2, [r3], #4?

??? ??????? BCC???? %B2?

  在RAM中初始化RW段和ZI段后,ZI段結束后的首地址到系統RAM最高端之間的內存就是用戶可以自由使用的空間,也就是說Image$$ZI$$Limit是這一內存空間的起始地址。?

  如果系統使用了FIQ和IRQ中斷,在ZI段之后可以創建這兩種中斷的棧空間,然后是操作系統使用的SVC模式下的??臻g,假設每一個棧大小為1024個字節。如果系統使用了定時器,還可在此之后創建定時器中斷的棧空間,假設其大小也為1024個字節。此時自由內存空間的起始地址變為:?

  Image$$ZI$$Limit+1024×4?

  在初始化代碼的最后將其作為一個參數傳遞到C程序入口,代碼如下:?

??? LDR???? r0,? =|Image$$ZI$$Limit| ?

??? ;創建IRQ??臻g。?

??? ……?

??? ;增加地址指針。?

??? ADD???? r0,? r0,? #1024? ?

??? ;創建FIQ??臻g。?

??? ……?

??? ;增加地址指針。?

??? ADD???? r0,? r0,? #1024? ?

??? ;創建SVC棧空間。?

??? ……?

??? ;增加地址指針。?

??? ADD???? r0,? r0,? #1024? ?

??? ;創建定時器中斷??臻g。?

??? ……?

??? ;增加地址指針。?

??? ADD???? r0,? r0,? #1024? ?

??? ;導入C代碼入口點。?

??? IMPORT? C_ENTRY?

??? ;跳轉到C代碼,此時r0作為入口參數。?

??? B?????? C_ENTRY?

3.3 對實例的總結?

  在C程序中,上述起始地址可以作為內存分區創建函數OSMemCreate()的內存地址參數,內存分區的最大值就是目標板RAM的最高端地址減去起始地址的值。圖1顯示了RO段在RAM中的內存分布情況,這種情況下,程序映像一般被保存在目標板閃存中。系統從閃存啟動后,將RO段拷貝到RAM中繼續執行。圖2顯示了RO段在閃存中,RW和ZI段在RAM中的情況。這種情況下,系統啟動和代碼的執行都發生在閃存中。?

?

?

?

  用戶知道起始地址的值和自由內存的大小后,就可以清楚、靈活地建立和使用內存分區了??梢愿鶕唧w需要建立一些大小不同的內存分區,任務棧、事件控制塊和消息隊列都可以在這些內存分區中分配。系統可以非常清晰地掌握內存使用情況。?

  本文針對一種芯片描述了如何實現對μC/OS-Ⅱ內存管理的改進。對于其它類型的微處理器,例如CISC指令集的芯片,雖然具體實現過程有所不同,但思路是一樣的。?

  μC/OS-Ⅱ的內存管理還有需要改進的地方,例如,現在的內存管理只支持固定大小的分區,而實際應用中有動態分配非固定分區的需求。這就要求μC/OS-Ⅱ有實現該功能的軟件結構和內存分配、回收算法。現在能清楚地掌握系統初始化后內存分布情況,為今后實現這些軟件結構和算法打下了基礎。?

參考文獻?

1 JEAN J.LABROSSE著,邵貝貝譯. μC/OS-Ⅱ—源碼公開的實時嵌入式操作系統.北京:中國電力出版社,2001?

2 ARM Limited. ARM Software Development Toolkit Reference Guide.1998?

3 ARM Limited. ARM Software Development Toolkit User Guide.1998?

4 ARM 7TDMI Data Sheet. Advanced RISC Machines Ltd(ARM). 1995
本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          1769国内精品视频在线播放| 欧美另类99xxxxx| 欧美一级成年大片在线观看| 激情视频一区二区三区| 久久免费99精品久久久久久| 亚洲一级片在线看| 国产亚洲欧美日韩在线一区| 欧美在线www| 国产精品私房写真福利视频| 久久aⅴ乱码一区二区三区| 国产精品免费观看在线| 黄色亚洲精品| 在线播放亚洲一区| 久久夜色精品国产| 欧美一区在线视频| 久久久久综合一区二区三区| 亚洲一区国产| 欧美女人交a| 亚洲美女区一区| 亚洲伦理一区| 国产精品久久久久毛片大屁完整版| 国产日韩欧美不卡在线| 揄拍成人国产精品视频| 裸体一区二区| 日韩午夜av在线| 亚洲一级黄色av| 久久久噜噜噜久久人人看| 激情欧美一区二区三区在线观看| 亚洲福利在线看| 午夜精品美女自拍福到在线| 久久久久久夜| 国产精自产拍久久久久久蜜| 红桃视频亚洲| 亚洲免费av网站| 一区二区精品国产| 欧美性猛交视频| 国产精品视频九色porn| 欧美色视频一区| 开元免费观看欧美电视剧网站| 亚洲欧洲日本在线| 亚洲日本黄色| 亚洲夜晚福利在线观看| 国户精品久久久久久久久久久不卡| 国产在线日韩| 国产日韩精品视频一区二区三区| 国产亚洲免费的视频看| 亚洲激情一区二区三区| 国产精品99免视看9| 久久精品中文字幕一区二区三区| 在线一区视频| 欧美在线一区二区| 久久久久久亚洲综合影院红桃| 99热这里只有精品8| 亚洲视频免费在线| 久久精品人人爽| 在线观看精品视频| 亚洲视频福利| 欧美日韩国产成人在线免费| 性欧美8khd高清极品| 久久天天躁狠狠躁夜夜av| 亚洲无限乱码一二三四麻| 欧美高清一区| 国外成人在线视频网站| 欧美亚洲第一页| 国产欧美激情| 亚洲自拍偷拍麻豆| 国产精品色在线| 麻豆精品传媒视频| 亚洲精品国产日韩| 欧美gay视频| 欧美视频亚洲视频| 日韩视频在线免费观看| 一区二区亚洲欧洲国产日韩| 国内精品久久国产| 欧美激情一区二区| 国产一区二区三区久久悠悠色av| 国产三级欧美三级| 一片黄亚洲嫩模| 国产小视频国产精品| 国产精品爽爽ⅴa在线观看| 久久久久久噜噜噜久久久精品| 国产在线视频欧美一区二区三区| 亚洲第一页中文字幕| 国产精品国产馆在线真实露脸| 一区二区视频欧美| 国产精品毛片a∨一区二区三区| 狠狠综合久久av一区二区小说| 亚洲欧美日韩一区二区| 国产精品福利网站| 欧美日韩国产欧美日美国产精品| 欧美精品一区三区在线观看| 亚洲第一天堂av| 久久精品国产视频| 国产精品日韩久久久| 欧美一区二区三区免费视| 亚洲欧美在线x视频| 亚洲一区三区电影在线观看| 亚洲色图综合久久| 午夜性色一区二区三区免费视频| 欧美日韩一区在线观看视频| 欧美夜福利tv在线| 亚洲人成在线播放| 先锋影音一区二区三区| 日韩亚洲国产精品| 国内激情久久| 久久激情视频免费观看| 欧美视频亚洲视频| 欧美不卡一区| 欧美88av| 亚洲永久精品大片| 最新中文字幕一区二区三区| 欧美日韩国产首页在线观看| 免费观看欧美在线视频的网站| 一本久道久久综合婷婷鲸鱼| 国产精品自拍视频| 欧美一区日韩一区| 欧美三区免费完整视频在线观看| 欧美一区二区精美| 亚洲精品一区在线| 亚洲欧美一区二区精品久久久| 欧美在线视频网站| 国产日韩欧美一区在线| 91久久久亚洲精品| 欧美成人午夜视频| 老司机精品视频一区二区三区| 国产精品第2页| 欧美a级在线| 国内精品免费午夜毛片| 亚洲免费在线精品一区| 亚洲国产专区校园欧美| 亚洲高清毛片| 欧美日韩一区二区三区在线| 欧美成人精精品一区二区频| 在线一区观看| 国产无一区二区| 国产精品日韩专区| 国产精品乱人伦一区二区| 国产精品入口福利| 黄色一区三区| 亚洲欧美精品中文字幕在线| 欧美aa在线视频| 国产欧美日韩亚洲一区二区三区| 国产精品区一区二区三| 亚洲免费av电影| 欧美freesex交免费视频| 欧美一区视频| 最新国产精品拍自在线播放| 亚洲精品视频在线| 国产精品无码专区在线观看| 免费h精品视频在线播放| 亚洲精品国偷自产在线99热| 激情伊人五月天久久综合| 中日韩在线视频| 欧美美女喷水视频| 国产一区 二区 三区一级| 日韩视频一区二区| 一区二区三区中文在线观看| 黄色成人精品网站| 极品尤物久久久av免费看| 亚洲午夜在线| 国产毛片精品国产一区二区三区| 亚洲男人第一网站| 免费视频最近日韩| 国产欧美日韩视频一区二区| 国产一区自拍视频| 国产真实精品久久二三区| 欧美视频精品一区| 日韩亚洲国产欧美| 欧美精品麻豆| 亚洲人成高清| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲深爱激情| 久久久久久91香蕉国产| 亚洲免费伊人电影在线观看av| 亚洲一区二区高清| 欧美一级片一区| 亚洲伦伦在线| 国产精品系列在线| 一区二区高清视频在线观看| 国产一二精品视频| 国产伦精品一区二区| 国产日韩欧美三级| 久久久久久尹人网香蕉| 国产麻豆9l精品三级站| 国产视频观看一区| 亚洲国产一区二区精品专区| 欧美日韩国产成人在线| 中文国产成人精品久久一| 一本久久综合亚洲鲁鲁| 亚洲精品视频啊美女在线直播| 午夜精品视频一区| 黄色一区二区三区四区| 亚洲欧美日韩成人高清在线一区| 国产精品久久久久久久久久免费| 欧美日韩亚洲一区二区三区在线观看| 欧美日韩一二区| 久久成人免费网| 亚洲国产成人av好男人在线观看| 国产精品国产一区二区| 一个人看的www久久| 久久狠狠一本精品综合网| 欧美日韩你懂的| 亚洲欧美日韩网| 欧美日韩国产亚洲一区| 午夜精品成人在线视频| 亚洲国产精品久久91精品| 亚洲女女做受ⅹxx高潮| 在线日韩一区二区| 亚洲黄网站在线观看| 国产精品亚洲激情| 久久久av网站| 亚洲第一中文字幕| 欧美日韩中国免费专区在线看| 国产精品日韩高清| 欧美成人午夜激情| 中文无字幕一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲天天影视| 亚洲激情电影中文字幕| 欧美日韩一区二区三区在线| 久久精品国产第一区二区三区最新章节| 免费观看成人网| 亚洲精品一区二区三区婷婷月| 国产精品盗摄久久久| 在线亚洲电影| 精品福利电影| 国产欧美日韩综合一区在线观看| 久久精品一二三| 久久久久久有精品国产| 国产精品日韩欧美综合| 免费短视频成人日韩| 这里只有精品视频在线| 亚洲专区国产精品| 亚洲天堂av高清| 欧美激情一区二区三区在线视频| 国产日本欧美一区二区三区| 极品少妇一区二区三区精品视频| 亚洲高清色综合| 国产精品theporn| 尤物视频一区二区| 亚洲男人av电影| 欧美肥婆在线| 欧美黄色aaaa| 先锋影音一区二区三区| 亚洲福利一区| 玖玖国产精品视频| 国产久一道中文一区| 欧美三级乱人伦电影| 国产精品美女在线| 欧美成人小视频| 一区二区三区四区五区精品视频| 亚洲视频欧美视频| 亚洲精品乱码久久久久久久久| 夜夜精品视频| 亚洲日韩中文字幕在线播放| 亚洲专区欧美专区| 国产偷国产偷亚洲高清97cao| 欧美日韩精品免费观看视频| 欧美日韩综合视频网址| 亚洲国产精品久久| 久久久999国产| 久久高清国产| 亚洲日本欧美在线| 国产日韩高清一区二区三区在线| 久久精品2019中文字幕| 你懂的亚洲视频| 国产精品视频精品| 99亚洲一区二区| 麻豆久久久9性大片| 国产亚洲精品久久久久久| 亚洲视频在线观看一区| 亚洲一品av免费观看| 亚洲一区二区不卡免费| 亚洲在线视频一区| 欧美激情视频一区二区三区不卡| 欧美日韩国产123| 国产免费成人在线视频| 免费毛片一区二区三区久久久| 国内精品久久久久伊人av| 麻豆精品在线观看| 国产精品理论片| 美女图片一区二区| 欧美1区2区3区| 欧美亚州韩日在线看免费版国语版| 欧美在线日韩| 嫩草成人www欧美| 国产精品无码专区在线观看| 欧美亚洲综合网| 狠狠色丁香婷综合久久| 久久亚洲影院| 亚洲欧美日韩综合国产aⅴ| 久久裸体视频| 日韩视频在线一区二区| 欧美午夜精品| 在线日韩中文字幕| 久久一区中文字幕| 女同一区二区| 91久久线看在观草草青青| 久久久久天天天天| 亚洲激情视频网| 国产精品久久久久久久久久妞妞| 欧美日韩三级电影在线| 欧美伊人影院| 欧美麻豆久久久久久中文| 国产一区二区| 韩国美女久久| 国产精品午夜在线| 久久激情一区| 国产精品人人做人人爽人人添| 亚洲国产va精品久久久不卡综合| 亚洲男人第一av网站| 国产精品久久波多野结衣| 亚洲手机成人高清视频| 欧美一区激情| 亚洲视频精品| 欧美日韩一区成人| 亚洲精品人人| 国产日韩一区| 亚洲欧美精品中文字幕在线| 亚洲一二三区视频在线观看| 欧美性猛交xxxx免费看久久久| 欧美日韩精品综合在线| 曰本成人黄色| 亚洲一区二区三区精品在线观看| 久久精品综合一区| 国产精品亚洲综合色区韩国| 久久久国产午夜精品| 国产精品蜜臀在线观看|