在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>基于μC/OS-Ⅱ實時操作系統的內存管理改進方案

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

2017-10-30 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

μC/OS-Ⅱ是一種開放源碼的實時操作系統,具有搶先式、多任務的特點,已被應用到眾多的微處理器上。雖然該內核功能較多,但還是有不甚完善的地方。筆者在分析使用中發現,內核在任務管理(包括任務調度、任務間的通信與同步)和中斷管理上是比較完善的,具有可以接受的穩定性和可靠性;但在內存管理上顯得過于簡單,內存分區的建立方式有不合理之處。
  1 內存管理不足之處的分析
  在分析許多μC/OS-Ⅱ的應用實例中發現,任務棧空間和內存分區的創建采用了定義全局數組的方法,即定義一維或二維的全局數組,在創建任務或內存分區時,將數組名作為內存地址指針傳遞給生成函數。這樣實現起來固然簡單,但是不夠靈活有效。
  編譯器會將全局數組作為未初始化的全局變量,放到應用程序映像的數據段。數組大小是固定的,生成映像后不可能在使用中動態地改變。對于任務棧空間來說,數組定義大了會造成內存浪費;定義小了任務棧溢出,會造成系統崩潰。對于內存分區,在不知道系統初始化后給用戶留下了多少自由內存空間的情況下,很難定義內存分區所用數組的大小。總之利用全局數組來分配內存空間是很不合理的。
  另外,現在的μC/OS-Ⅱ只支持固定大小的內存分區,容易造成內存浪費。μC/OS-Ⅱ將來應該被改進以支持可變大小的內存分區。為了實現這一功能,系統初始化后能清楚地掌握自由內存空間的情況是很重要的。
  2 解決問題的方法
  為了能清楚掌握自由內存空間的情況,避免使用全局數組分配內存空間,關鍵是要知道整個應用程序在編譯、鏈接后代碼段和數據段的大小,在目標板內存中是如何定位的,以及目標板內存大小。對于最后一條,系統編程人員當然是清楚的,第一條編譯器會給出,而如何定位是由編程人員根據具體應用環境在系統初始化確定的。因此,系統初始化時,如果能正確安排代碼段和數據段的位置,就能清楚地知道用戶可以自由使用的內存空間起始地址。用目標板內存最高端地址減去起始地址,就是這一自由空間的大小。
  3 舉例描述該方法的實現
  下面以在CirrusLogic公司的EP7211微處理器上使用μC/OS-Ⅱ為例,描述該方法的實現過程。假設基于μC/OS-Ⅱ的應用程序比較簡單,以簡化問題的闡述。
  3.1 芯片初始化過程和鏈接器的功能
  EP7211采用了RISC體系結構的微處理器核ARM7TDMI,該芯片支持內存管理單元MMU。系統加電復位后,從零地址開始執行由匯編語言編寫的初始化代碼。零地址存放著中斷向量表,第一個是復位中斷,通過該中斷向量指向的地址可以跳轉到系統初始化部分,執行微處理器寄存器初始化。如果使用虛擬內存,則啟動MMU,然后是為C代碼執行而進行的C環境初始化。之后創建中斷處理程序使用的棧空間,最后跳轉到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模式下的棧空間,假設每一個棧大小為1024個字節。如果系統使用了定時器,還可在此之后創建定時器中斷的棧空間,假設其大小也為1024個字節。此時自由內存空間的起始地址變為:
  Image$$ZI$$Limit+1024×4
  在初始化代碼的最后將其作為一個參數傳遞到C程序入口,代碼如下:
  LDR r0, =|Image$$ZI$$Limit|
  ;創建IRQ棧空間。
  ……
  ;增加地址指針。
  ADD r0, r0, #1024
  ;創建FIQ棧空間。
  ……
  ;增加地址指針。
  ADD r0, r0, #1024
  ;創建SVC棧空間。
  ……
  ;增加地址指針。
  ADD r0, r0, #1024
  ;創建定時器中斷棧空間。
  ……
  ;增加地址指針。
  ADD r0, r0, #1024
  ;導入C代碼入口點。
  IMPORT C_ENTRY
  ;跳轉到C代碼,此時r0作為入口參數。
  B C_ENTRY
  
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 久久福利青草精品资源站免费| 一级片在线免费观看| 深夜性久久| 四虎最新网| 亲女乱h文小兰第一次| 人与牲动交xx| 久久国产精品99久久久久久老狼| 国模人体一区二区三区| www.黄色免费| 天堂最新资源在线| 国产免费一级在线观看| 欧美人与z0zoxxxx特| 亚洲成人毛片| 黄色一级毛片网站| 国产日韩精品一区二区在线观看| www.四虎.com| 色狠狠色综合吹潮| 成人国产永久福利看片| 我被黑人巨大开嫩苞在线观看| 亚洲区一二三四区2021| 一色屋网站| 日韩毛片免费视频一级特黄| 精品视频日本| 亚洲日本高清| 黄色免费在线网址| 真爽~张开腿~让我插| 一级aaa毛片| 欧美一区二区三区免费| 国产美女精品视频免费观看| 天天射天天爱天天干| 大色综合色综合资源站| 特黄aa级毛片免费视频播放| 亚洲成人免费看| 免费看国产一级特黄aa大片| www.色婷婷| 国产呦系列呦交| 欧美性色xo影院69| 色天使视频| 国产成人亚洲精品77| 久久免费国产| 美女隐私黄www视频|