ucos(一)ucos系統簡介


一、概述

  μC/OS-II由Micrium公司提供,是一個可移植可固化的、可裁剪的、占先式多任務實時內核,它適用於多種微處理器,微控制器和數字處理芯片(已經移植到超過100種以上的微處理器應用中)。同時,該系統源代碼開放、整潔、一致,注釋詳盡,適合系統開發。 μC/OS-II已經通過聯邦航空局(FAA)商用航行器認證,符合航空無線電技術委員會(RTCA)DO-178B標准。現在最新版的是μC/OS-III。

二、性質

  • μC/OS-II被廣泛應用於微處理器微控制器數字信號處理器
  • μC/OS-II 的前身是μC/OS,最早出自於1992 年美國嵌入式系統專家Jean J.Labrosse 在《嵌入式系統編程》雜志的5 月和6 月刊上刊登的文章連載,並把μC/OS 的源碼發布在該雜志的B B S 上。
  • μC/OS 和μC/OS-II 是專門為計算機的嵌入式應用設計的, 絕大部分代碼是用C語言編寫的。CPU 硬件相關部分是用匯編語言編寫的、總量約200行的匯編語言部分被壓縮到最低限度,為的是便於移植到任何一種其它的CPU 上。用戶只要有標准的ANSI 的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS-II嵌入到開發的產品中。μC/OS-II 具有執行效率高、占用空間小、實時性能優良可擴展性強等特點, 最小內核可編譯至 2KB 。μC/OS-II 已經移植到了幾乎所有知名的CPU 上。
  • 嚴格地說uC/OS-II只是一個實時操作系統內核,它僅僅包含了任務調度任務管理時間管理內存管理和任務間的通信同步等基本功能。沒有提供輸入輸出管理,文件系統,網絡等額外的服務。但由於uC/OS-II良好的可擴展性和源碼開放,這些非必須的功能完全可以由用戶自己根據需要分別實現。
  • uC/OS-II目標是實現一個基於優先級調度的搶占式的實時內核,並在這個內核之上提供最基本的系統服務,如信號量,郵箱,消息隊列,內存管理,中斷管理等。
  • uC/OS-II以源代碼的形式發布,是開源軟件, 但並不意味着它是免費軟件。你可以將其用於教學和私下研究(peaceful research);但是如果你將其用於商業用途,那么你必須通過Micrium獲得商用許可。 

三、應用

μC/OS-II可以提供如下服務:
  • 信號量
  • 互斥信號量
  • 事件標識
  • 消息郵箱
  • 消息隊列
  • 任務管理
  • 固定大小內存塊管理
  • 時間管理另外,在μC/OS-II內核之上,有如下獨立模塊可供用戶選擇:
  • μC/FS文件系統模塊
  • μC/GUI圖形軟件模塊
  • μC/TCP-IP協議棧模塊
  • μC/USB協議棧模塊

四、組成

μC/OS-II可以大致分成核心任務處理時間處理任務同步通信,CPU的移植等5個部分。

1) 核心部分(OSCore.c)

  是操作系統的處理核心,包括操作系統初始化、操作系統運行、中斷進出的前導、時鍾節拍、任務調度、事件處理等多部分。能夠維持系統基本工作的部分都在這里。

2) 任務處理部分(OSTask.c)

  任務處理部分中的內容都是與任務的操作密切相關的。包括任務的建立、刪除、掛起、恢復等等。因為μC/OS-II是以任務為基本單位調度的,所以這部分內容也相當重要。

3) 時鍾部分(OSTime.c)

  μC/OS-II中的最小時鍾單位是timetick(時鍾節拍)。任務延時等操作是在這里完成的。

4) 任務同步和通信部分

  為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標志等部分;主要用於任務間的互相聯系和對臨界資源的訪問。

5) 與CPU的接口部分

  是指μC/OS-II針對所使用的CPU的移植部分。由於μC/OS-II是一個通用性的操作系統,所以對於關鍵問題上的實現,還是需要根據具體CPU的具體內容和要求作相應的移植。這部分內容由於牽涉到SP等系統指針,所以通常用匯編語言編寫。主要包括中斷級任務切換的底層實現、任務級任務切換的底層實現、時鍾節拍的產生和處理、中斷的相關處理部分等內容。
 

五、任務管理

uC/OS-II 中最多可以支持256個任務,分別對應優先級0~255,其中0 為最高優先級。255為最低級。
注意:uC/OS中最多可以支持64個任務,分別對應優先級0~63,其中0 為最高優先級。63為最低級。
uC/OS-II提供了任務管理的各種函數調用,包括創建任務,刪除任務,改變任務的優先級,任務掛起和恢復等。
系統初始化時會自動產生兩個任務:一個是空閑任務,它的優先級最低,該任務僅給一個整型變量做累加運算;另一個是系統任務,它的優先級為次低,該任務負責統計當前cpu的利用率。

六、時間管理

uC/OS-II的時間管理是通過定時中斷來實現的,該定時中斷一般為10毫秒或100毫秒發生一次,時間頻率取決於用戶對硬件系統的定時器編程來實現。中斷發生的時間間隔是固定不變的,該中斷也成為一個時鍾節拍。
uC/OS-II要求用戶在定時中斷的服務程序中,調用系統提供的與時鍾節拍相關的系統函數,例如中斷級的任務切換函數,系統時間函數。
 

七、內存管理

在ANSI C中是使用malloc和free兩個函數來動態分配和釋放內存。但在嵌入式實時系統中,多次這樣的操作會導致內存碎片,且由於內存管理算法的原因,malloc和free的執行時間也是不確定。
uC/OS-II中把連續的大塊內存按分區管理。每個分區中包含整數個大小相同的內存塊,但不同分區之間的內存塊大小可以不同。用戶需要動態分配內存時,系統選擇一個適當的分區,按塊來分配內存。釋放內存時將該塊放回它以前所屬的分區,這樣能有效解決碎片問題,同時執行時間也是固定的。
 

八、通信同步

對一個多任務的操作系統來說,任務間的通信和同步是必不可少的。uC/OS-II中提供了4種同步對象,分別是信號量,郵箱,消息隊列和事件。所有這些同步對象都有創建,等待,發送,查詢的接口用於實現進程間的通信和同步
 

九、任務調度

uC/OS-II 采用的是可剝奪型實時多任務內核。可剝奪型的實時內核在任何時候都運行就緒了的最高優先級的任務。
uC/OS-II的任務調度是完全基於任務優先級搶占式調度,也就是最高優先級的任務一旦處於就緒狀態,則立即搶占正在運行的低優先級任務的處理器資源。為了簡化系統設計,uC/OS-II規定所有任務的優先級不同,因為任務的優先級也同時唯一標志了該任務本身。
 

十、任務調度

1) 高優先級的任務因為需要某種臨界資源,主動請求掛起,讓出處理器,此時將調度就緒狀態的低優先級任務獲得執行,這種調度也稱為任務級的上下文切換。
2) 高優先級的任務因為時鍾節拍到來,在時鍾中斷的處理程序中,內核發現高優先級任務獲得了執行條件(如休眠的時鍾到時),則在中斷態直接切換到高優先級任務執行。這種調度也稱為中斷級的上下文切換。
這兩種調度方式在uC/OS-II的執行過程中非常普遍,一般來說前者發生在系統服務中,后者發生在時鍾中斷的服務程序中。
調度工作的內容可以分為兩部分:最高優先級任務的尋找和任務切換。其最高優先級任務的尋找是通過建立就緒任務表來實現的。u C / O S 中的每一個任務都有獨立的堆棧空間,並有一個稱為任務控制塊TCB(Task Control Block)的數據結構,其中第一個成員變量就是保存的任務堆棧指針。任務調度模塊首先用變量OSTCBHighRdy 記錄當前最高級就緒任務的TCB 地址,然后調用OS_TASK_SW()函數來進行任務切換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM