資料介紹
μC/OS-II是一種開放源碼的實時操作系統,具有搶先式、多任務的特點,已被應用到眾多的微處理器上。雖然該內核功能較多,但還是有不甚完善的地方。筆者在分析使用中發現,內核在任務管理(包括任務調度、任務間的通信與同步)和中斷管理上是比較完善的,具有可以接受的穩定性和可靠性;但在內存管理上顯得過于簡單,內存分區的建立方式有不合理之處。
1 內存管理不足之處的分析
在分析許多μC/OS-II的應用實例中發現,任務棧空間和內存分區的創建采用了定義全局數組的方法,即定義一維或二維的全局數組,在創建任務或內存分區時,將數組名作為內存地址指針傳遞給生成函數。這樣實現起來固然簡單,但是不夠靈活有效。
編譯器會將全局數組作為未初始化的全局變量,放到應用程序映像的數據段。數組大小是固定的,生成映像后不可能在使用中動態地改變。對于任務棧空間來說,數組定義大了會造成內存浪費;定義小于了任務棧溢出,會造成系統崩潰。對于內存分區,在不知道系統初始化后給用戶留下了多少自由內存空間的情況下,很難定義內存分區所用數組的大小。總之利用全局數組來分配內存空間是很不合理的。
另外,現在的μC/OS-II只支持固定大小的內存分區,容易造成內存浪費。μC/OS-II將來應該被改進以支持可變大小的內存分區。為了實現這一功能,系統初始化后能清楚地掌握自由內存空間的情況是很重要的。
2 解決問題的方法
為了能清楚掌握自由內存空間的情況,避免使用全局數組分配內存空間,關鍵是要知道整個應用程序在編譯、鏈接后代碼段和數據段的大小,在目標板內存中是如何定位的,以及目標板內存大小。對于最后一條,系統編程人員當然是清楚的,第一條編譯器會給出,而如何定位是由編程人員根據具體應用環境在系統初始化確定的。因此,系統初始化時,如果能正確安排代碼段和數據段的位置,就能清楚地知道用戶可以自由使用的內存空間起始地址。用目標板內存最高端地址減去起始地址,就是這一自由空間的大小。
3 舉例描述該方法的實現
下面以在CirrusLogic公司的EP7211微處理器上使用μC/OS-II為例,描述該方法的實現過程。假設基于μC/OS-II的應用程序比較簡單,以簡化問題的闡述。
3.1 芯片初始化過程和鏈接器的功能
EP7211采用了RISC體系結構的微處理器核ARM&TDMI,該芯片支持內存管理單元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$$ Limit表示讀寫段結束后的首地址;Image$$ZI$$Base表示零初始化段的起始地址,Image$$ZI$$Limit表示零初始化段結束后的首地址。
一般嵌入式應用,程序鏈接定位后生成bin文件,即絕對地址空間的代碼,因此上述符號的值表示物理地址。對于簡單程序,可在編譯鏈接時指定RO和RW的基礎址,幫助鏈接器計算上述符號的值。對于較復雜的程序可以由scatter描述文件來定義RO和RW的基地址。
?
1 內存管理不足之處的分析
在分析許多μC/OS-II的應用實例中發現,任務棧空間和內存分區的創建采用了定義全局數組的方法,即定義一維或二維的全局數組,在創建任務或內存分區時,將數組名作為內存地址指針傳遞給生成函數。這樣實現起來固然簡單,但是不夠靈活有效。
編譯器會將全局數組作為未初始化的全局變量,放到應用程序映像的數據段。數組大小是固定的,生成映像后不可能在使用中動態地改變。對于任務棧空間來說,數組定義大了會造成內存浪費;定義小于了任務棧溢出,會造成系統崩潰。對于內存分區,在不知道系統初始化后給用戶留下了多少自由內存空間的情況下,很難定義內存分區所用數組的大小。總之利用全局數組來分配內存空間是很不合理的。
另外,現在的μC/OS-II只支持固定大小的內存分區,容易造成內存浪費。μC/OS-II將來應該被改進以支持可變大小的內存分區。為了實現這一功能,系統初始化后能清楚地掌握自由內存空間的情況是很重要的。
2 解決問題的方法
為了能清楚掌握自由內存空間的情況,避免使用全局數組分配內存空間,關鍵是要知道整個應用程序在編譯、鏈接后代碼段和數據段的大小,在目標板內存中是如何定位的,以及目標板內存大小。對于最后一條,系統編程人員當然是清楚的,第一條編譯器會給出,而如何定位是由編程人員根據具體應用環境在系統初始化確定的。因此,系統初始化時,如果能正確安排代碼段和數據段的位置,就能清楚地知道用戶可以自由使用的內存空間起始地址。用目標板內存最高端地址減去起始地址,就是這一自由空間的大小。
3 舉例描述該方法的實現
下面以在CirrusLogic公司的EP7211微處理器上使用μC/OS-II為例,描述該方法的實現過程。假設基于μC/OS-II的應用程序比較簡單,以簡化問題的闡述。
3.1 芯片初始化過程和鏈接器的功能
EP7211采用了RISC體系結構的微處理器核ARM&TDMI,該芯片支持內存管理單元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$$ Limit表示讀寫段結束后的首地址;Image$$ZI$$Base表示零初始化段的起始地址,Image$$ZI$$Limit表示零初始化段結束后的首地址。
一般嵌入式應用,程序鏈接定位后生成bin文件,即絕對地址空間的代碼,因此上述符號的值表示物理地址。對于簡單程序,可在編譯鏈接時指定RO和RW的基礎址,幫助鏈接器計算上述符號的值。對于較復雜的程序可以由scatter描述文件來定義RO和RW的基地址。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式實時操作系統μC、OS-II在ARM上的移植.
- μC/OS-II的多任務系統實時性解析 2次下載
- 嵌入式實時操作系統uC/OS-II內核_英版 0次下載
- μC/OS-II 在Nios上的移植
- 實時操作系統OS-II在ARM7上的移植
- 基于ARM的嵌入式操作系統μC/OS-II的移植
- 輕型PPP協議在μC/OS-II操作系統中的實現
- 嵌入式μC/OS-II在LPC2104上的移植及通信設計
- 實時操作系統μC/OS-II調度算法的研究
- 實時操作系統μC/OS-II 在LPC2210 上的移植研究
- 嵌入式實時操作系統μC OS-II與eCos的比較
- μC OS-II 在Nios 上的移植1
- 實時操作系統μC OS - II下TCP IP 協議棧的實現
- μC/OS-II 任務調度機制的改進
- 嵌入式實時操作系統μC/OS-II與eCos的比較
- FreeRTOS:一個迷你的實時操作系統內核 828次閱讀
- 基于μC/OS-II和TMS320LF2407A實現集散式數據采集系統的設計 2186次閱讀
- 基于實時嵌入式操作系統mC/OS-II實現GPRS終端系統的設計 2252次閱讀
- 基于MC9S12DP256芯片和μC/OS-II實現CCP軟件的設計 2685次閱讀
- 基于嵌入式工控模塊和μC/OS-II實現車載狀態監控系統的設計 1907次閱讀
- 基于μC/OS-II操作系統實現在P89V51RD2微控制器上運行 747次閱讀
- 基于μC/OS-II操作系統在SPCE061A上的移植優化研研究 779次閱讀
- 51單片機對μC/OS-II實時操作系統的移植 2385次閱讀
- 淺論uC/OS-II 在電動車電池管理系統中的應用研究 1313次閱讀
- 淺析STM32的五種嵌入式操作系統的特點及不足 4070次閱讀
- 五種基于STM平臺的且滿足實時控制要求操作的嵌入式操作系統的介紹 5158次閱讀
- 車輛調度系統的整體設計 UC/OS-II的內核調度機理 1116次閱讀
- 基于LPC2365和嵌入式μC/OS-II下的多串口通信編程方法教程 2087次閱讀
- 利用μC/OS-II的嵌入式激光測距系統 1992次閱讀
- 用AndesCore N1033A-S處理器實現μC/OS-II的移植 3969次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多