資料介紹
關于μC/OS-II這個實時內核及其應用已經有很多文章介紹了,對于學習RTOS的人來說,這個系統是很好的學習起點。雖然文獻[1]的源代碼沒有行號和函數名交叉索引表等,給源代碼閱讀造成一些困難(可使用BC31的grep查找功能,提高閱讀效率),好在代碼不是很長,前面又有詳細的中文說明,對于有一定X86匯編和C語言基礎的人來說,仍然可以在不長的時間內掌握。
μC/OS-II內核是一個搶先式內核,可以進行任務間切換,也可以讓一個任務在得不到某個資源時休眠一定時間后再繼續運行;提供了用于共享資源管理的信號燈,用于進程通信的消息隊列和郵箱,甚至提供了存儲器管理機制,是一個比較全面的系統。
μC/OS-II內核有些地方仍然值得改進,比如該系統不支持時間片調度。如果有一個任務中一段死循環代碼(或者條件循環代碼),代碼就會永遠(或長時間)在此處執行,調度程序無法控制,其它任務也就是不到及時執行。這種搶先式實際上和非搶先式系統存在著同樣問題。當然,如果這種代碼不一個BUG,問題是可以解決的,在不提供時間片調度的搶先式系統中,一般采取信號燈,或者任務主動休眠的方法(對于μC/OS-II,很容易改造成支持時間片調度,只要在定時中斷服務程序調用OSIntCtxSw()函數即可);非搶先式系統一般采取有限狀態機方法,不使用這種耗時很長的循環代碼。不過,無論如何,對RTOS的使用者來說,這畢竟會使得任務函數的編碼不能隨心所欲。
uC/OS-II內核的另外一個值得改進的地方就是其任務棧管理方法。在μC/OS-II內核中,各個不同的任務使用獨立的堆棧空間,堆棧的大小按每個任務所需要的最大堆棧深度來定義,這種方法可能會造成堆棧空間的浪費。下面討論如何在RTOS中多個任務共用一段連續存儲空間作為堆棧。
1 任務切換要保存的數據
簡單地說,一個任務可看作一個運行中的C函數。對于搶先式RTOS來說,在任務切換時,應保存當前任務的各種現場數據。現場數據包括局部變量、各個CPU寄存器、堆棧指針和程序被中止的任務指針。CPU寄存器是任何任務代碼均會用到的;而局部變量,一般的編譯器是將其它安排在堆棧空間中,堆棧指針也是各任務公用的,所以也需要保存。 對于全局變量,由于一般是在內存中的固定位置,各任務所占用的空間完全獨立,所以不需要保存。 在X86環境中,要保存的CPU寄存器共14個16位寄存器;通用寄存器8個(AX、BX、CX、DX、SP、BP、SI、BI)、段寄存器4個(CS、DS、ES、SS)以及指令指針IP和標志寄存器FR各1個。
2 C編譯器中變量在堆棧中的位置
對于一個存在函數調用嵌套的C程序來說,大部分編譯器將傳遞的參數和函數本身的局部變量放在了堆棧中,編譯器會自動生成壓棧(push)和彈棧(pop)代碼,以保存上級函數的運行寄存器。 假設函數main()調用funl(),而funl()調用fun2(),則在執行fun2()中的代碼時,堆棧映像如圖1所示(X86 CPU的情況)。
對于RTOS軟件,堆棧中的各種數據就是一個任務的現場。一般CPU的堆棧指針SP只有一個,在進行任務切換時,必須將掛起任務所使用的堆棧內容保存起來,以便使該任務在下次喚醒時能從原地繼續運行。
μC/OS-II內核是一個搶先式內核,可以進行任務間切換,也可以讓一個任務在得不到某個資源時休眠一定時間后再繼續運行;提供了用于共享資源管理的信號燈,用于進程通信的消息隊列和郵箱,甚至提供了存儲器管理機制,是一個比較全面的系統。
μC/OS-II內核有些地方仍然值得改進,比如該系統不支持時間片調度。如果有一個任務中一段死循環代碼(或者條件循環代碼),代碼就會永遠(或長時間)在此處執行,調度程序無法控制,其它任務也就是不到及時執行。這種搶先式實際上和非搶先式系統存在著同樣問題。當然,如果這種代碼不一個BUG,問題是可以解決的,在不提供時間片調度的搶先式系統中,一般采取信號燈,或者任務主動休眠的方法(對于μC/OS-II,很容易改造成支持時間片調度,只要在定時中斷服務程序調用OSIntCtxSw()函數即可);非搶先式系統一般采取有限狀態機方法,不使用這種耗時很長的循環代碼。不過,無論如何,對RTOS的使用者來說,這畢竟會使得任務函數的編碼不能隨心所欲。
uC/OS-II內核的另外一個值得改進的地方就是其任務棧管理方法。在μC/OS-II內核中,各個不同的任務使用獨立的堆棧空間,堆棧的大小按每個任務所需要的最大堆棧深度來定義,這種方法可能會造成堆棧空間的浪費。下面討論如何在RTOS中多個任務共用一段連續存儲空間作為堆棧。
1 任務切換要保存的數據
簡單地說,一個任務可看作一個運行中的C函數。對于搶先式RTOS來說,在任務切換時,應保存當前任務的各種現場數據。現場數據包括局部變量、各個CPU寄存器、堆棧指針和程序被中止的任務指針。CPU寄存器是任何任務代碼均會用到的;而局部變量,一般的編譯器是將其它安排在堆棧空間中,堆棧指針也是各任務公用的,所以也需要保存。 對于全局變量,由于一般是在內存中的固定位置,各任務所占用的空間完全獨立,所以不需要保存。 在X86環境中,要保存的CPU寄存器共14個16位寄存器;通用寄存器8個(AX、BX、CX、DX、SP、BP、SI、BI)、段寄存器4個(CS、DS、ES、SS)以及指令指針IP和標志寄存器FR各1個。
2 C編譯器中變量在堆棧中的位置
對于一個存在函數調用嵌套的C程序來說,大部分編譯器將傳遞的參數和函數本身的局部變量放在了堆棧中,編譯器會自動生成壓棧(push)和彈棧(pop)代碼,以保存上級函數的運行寄存器。 假設函數main()調用funl(),而funl()調用fun2(),則在執行fun2()中的代碼時,堆棧映像如圖1所示(X86 CPU的情況)。
對于RTOS軟件,堆棧中的各種數據就是一個任務的現場。一般CPU的堆棧指針SP只有一個,在進行任務切換時,必須將掛起任務所使用的堆棧內容保存起來,以便使該任務在下次喚醒時能從原地繼續運行。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 【嵌入式系統—實時操作系統】uC/OS-II 及其STM32F103移植
- μC/OS-II的多任務系統實時性解析 2次下載
- 一種μC/OS-II任務調度硬件指令的實現 2次下載
- 關于μC/OS-II實時操作系統內存管理的改進方法分析 0次下載
- uC/OS-II 應用程序基本結構及重要的API介紹 2次下載
- 嵌入式實時操作系統uC/OS-II內核_英版 0次下載
- 基于UC_OS-II的腹腔灌注熱化療儀的優化設計
- 基于MCF5213和uC/OS-II的低成本Zigbee無線
- uc/os-ii在ARM處理器上的移植
- 基于uc/os-ii 的嵌入式GUI研究與應用
- 基于uC/OS-II的齒輪流量計二次儀表的設計
- μC OS-II 中擴充任務數的方法
- μC OS-II 任務棧處理的一種改進方法
- μC/OS-II 任務調度機制的改進
- The uC/OS-II port for Keil C V
- 基于μ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次閱讀
- LPC213X通過μC/OS-II的多種移植方案 621次閱讀
- 淺論uC/OS-II 在電動車電池管理系統中的應用研究 1313次閱讀
- μC/OS-II系統基礎嵌入式開發編程教程 4370次閱讀
- LPC2119簡介 μC/OS-II在LPC2119上的移植 2705次閱讀
- 車輛調度系統的整體設計 UC/OS-II的內核調度機理 1116次閱讀
- 基于LPC2365和嵌入式μC/OS-II下的多串口通信編程方法教程 2087次閱讀
- 嵌入式設備設計的內核uc/os-ii api使用手冊大全 4213次閱讀
- 用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次下載 | 免費
評論
查看更多