在线观看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次下載  |  免費
主站蜘蛛池模板: 337p亚洲精品色噜噜狠狠 | 精品欧美一区二区三区 | 福利社91 | 精品四虎免费观看国产高清 | 大尺度视频网站久久久久久久久 | 曰本三级香港三级人妇99视频 | 自拍偷拍福利 | 亚洲狠狠网站色噜噜 | 欧美一级二级三级视频 | 黄色国产视频 | 久久精品福利 | 国产精品女人在线观看 | 久久久久久久国产精品电影 | 国产成在线人视频免费视频 | 国产亚洲高清在线精品不卡 | 午夜影院毛片 | 久久久久久天天夜夜天天 | 天天色综合天天 | 男女交性无遮挡免费视频 | 色综合天天色 | 亚洲视频一二 | 美女扒开尿口给男人桶爽视频 | 第一福利在线 | a级黑粗大硬长爽猛视频毛片 | 国产三级自拍视频 | 在线色av | 久久综合九色综合欧美播 | 免费视频在线看 | 啪啪啦资源站永久 | 推倒都市极品贵妇 | 日韩在线视频www色 日韩在线视频免费观看 | 久久夜色精品国产尤物 | 精品日韩一区二区三区 | 欧美中字 | 亚洲一区二区中文 | 成人综合网址 | 种子天堂bt磁力在线资源 | 欧美高清成人videosex | 一级黄色片a | 色噜噜狠狠成人影院 | 777奇米四色米奇影院在线播放 |