uC/OS-III 簡介,為什麼命名新的版本,uC/OS-III 的目標,uC/OS-III 的特點,原始碼,應用程式接口(API),搶占式多任務處理,時間片輪轉調度,快速回響中斷,確定性的,可擴展的,易移植的,可固化的,可實時配置的,任務數無限制,優先權數無限制,核心對象數無限制,服務,互斥信號量,嵌套的任務停止,軟體定時器,掛起多個對象,任務信號量,任務訊息,任務暫存器,錯誤檢測,內置的性能測量,可最佳化,死鎖預防,任務級的時基處理,用戶可定義的鉤子函式,時間戳,嵌入的核心調試器,對象名稱,
uC/OS-III 簡介
uC/OS-III(Micro C OS Three 微型的C 語言編寫的作業系統第3版)是一個可升級的,可固化的,基於優先權的實時核心。它對任務的個數無限制。uC/OS-III 是一個第3 代的系統核心,支持現代的實時核心所期待的大部分功能。例如資源管理,同步,任務間的通信等等。然而,uC/OS-III 提供的特色功能在其它的實時核心中是找不到的,比如說完備的運行時間測量性能,直接地傳送信號或者訊息到任務,任務可以同時等待多個
核心對象等。
uC/OS-III 是一個可擴展的,可固化的,搶占式的實時核心,它管理的任務個數不受限制。它是第三代核心,提供了現代實時核心所期望的所有功能包括資源管理、同步、內部任務交流等。uC/OS-III 也提供了很多特性是在其他實時核心中所沒有的。比如能在運行時測量運行性能,直接得傳送信號或訊息給任務,任務能同時等待多個信號量和訊息佇列。
為什麼命名新的版本
uC/OS 系列,第一代產生於1992。經過了多年的使用和上千人的反饋,已經產生了很多的進化版本。uC/OS-III 是這些反饋和經驗的總結。在uC/OS-II 中很少使用的功能已經被刪除或者被更新,添加了更高效的功能和服務。其中最有用的功能應該是時間片輪轉法(round robin),這個是uC/OS-II 中不支持的,但是現在已經是uC/OS-III 的一個功能了。uC/OS-III 會提供新的功能以更好地適應新出現的處理器。特別的,uC/OS-III 被設計用於32 位處理器,但是它也能在16 位或8 位處理器中很好地工作。
uC/OS-III 的目標
uC/OS-III 最主要的目標是提供一流的實時核心以適應更新很快的嵌入式產品。使用像uC/OS-III 那樣具有雄厚的基礎和穩定的框架的商業實時核心,能夠幫助設計師們處理日益複雜的嵌入式設計。
uC/OS-III 的特點
原始碼
uC/OS-III 完全根據ANSI-C 標準寫的。代碼的規範是Micrium 團隊的一種文化。雖然很多商業核心供應商提供他們產品的原始碼,但是這些產品很有可能是笨重且難以利用的。除非代碼嚴格地遵循標準並且產品有完整的帶例子的說明書以展示代碼是怎樣工作的。
應用程式接口(API)
uC/OS-III 是很直觀的。如果你熟悉類似的編碼規範,你能輕鬆地知道函式名所對應的服務,以及需要怎樣的參數。例如:指向對象的指針通常是第一個參數,指向錯誤代碼的指針通常是最後一個參數。
搶占式多任務處理
uC/OS-III 是一個搶占式多任務處理核心,因此,uC/OS-III 正在運行的經常是最重要的就緒任務。
時間片輪轉調度
uC/OS-III 允許多個任務擁有相同的優先權。當多個相同優先權的任務就緒時,並且這個優先權是目前最高的。uC/OS-III 會分配用戶定義的時間片給每個任務去運行。每個任務可以定義不同的時間片。當任務用不完時間片時可以讓出CPU 給另一個任務。
快速回響中斷
uC/OS-III 有一些內部的數據結構和變數。uC/OS-III 保護臨界段可以通過鎖定調度器代替關中斷。因此關中斷的時間會非常少。這樣就使uC/OS-III 可以回響一些非常快的中斷源了。
確定性的
uC/OS-III 的中斷回響時間是可確定的,uC/OS-III 提供的大部分服務的執行時間也是可確定的。
可擴展的
根據套用的需求,代碼大小可以被調整。編譯時通過調整uC/OS-III 原始碼中的大約40 個#define(見OS_CFG.H)可以在添加或移除一些功能。uC/OS-III 的服務還提供一些實時檢查功能。特別的,uC/OS-III 能檢傳遞的參數是否為NULL 指針,ISR 是否就緒了任務級服務。參數有允許範圍,指定選項都是有用的。檢測功能可以被關閉(在編譯時)以提供更好的性能和縮減代碼大小。實際上,可擴展的uC/OS-III 支持更廣泛的套用和項目。
易移植的
uC/OS-III 可以被移植到大部分的CPU 架構中。大部分的支持uC/OS-II 的器件通過改動就能支持uC/OS-III。而uC/OS-II已經移植到45 種CPU 架構中了。
可固化的
uC/OS-III 專為嵌入式系統設計,它可以跟應用程式代碼一起被固化。
可實時配置的
uC/OS-III 允許用戶在運行時配置核心。特別的,所有的核心對象如任務、堆疊、信號量、事件標誌組、訊息佇列、訊息、互斥信號量、記憶體分區、軟體定時器等都是在運行時分配的,以免在編譯時的過度分配。
任務數無限制
uC/OS-III 對任務數量無限制。實際上,任務的數量限制於處理器能提供的記憶體大小。每一個任務需要有自己的堆疊空間,uC/OS-III 在運行時監控任務堆疊的生長。uC/OS-III 對任務的大小無限制,
優先權數無限制
uC/OS-III 對優先權的數量無限制。然而,配置uC/OS-III 的優先權在32 到256 之間已經滿足大多數的套用了。
核心對象數無限制
uC/OS-III 支持任何數量的任務、信號量、互斥信號量、事件標誌組、訊息佇列、軟體定時器、記憶體分區。用戶在運行時分配所有的核心對象。
服務
uC/OS-III 提供了高檔實時核心所需要的所有功能,例如任務管理、時間管理、信號量、事件標誌組、互斥信號量、訊息佇列、軟體定時器、記憶體分區等。
互斥信號量
互斥信號量用於資源管理。它是一個內置優先權的特殊類型信號量,用於消除優先權反轉。互斥信號量可以被嵌套,因此,任務可申請同一個互斥信號量多達250 次。當然,互斥信號量的占有者需要釋放同等次數。
嵌套的任務停止
uC/OS-III 允許任務停止自身或者停止另外的任務。停止一個任務意味著這個任務將不再執行直到被其他的任務恢復。停止可以被嵌套到250 級。換句話說,一個任務可以停止另外的任務多達250 次。當然,這個任務必須被恢復同等次數才有資格再次獲得CPU。
軟體定時器
可以定義任意數量的一次性的、周期性的、或者兩者兼有的定時器。定時器是倒計時的,執行用戶定義的行為一直到計數減為0。每一個定時器可以有自己的行為,如果一個定時器是周期性的,計數減為0 時會自動重裝計數值並執行用戶定義的行為。
掛起多個對象
uC/OS-III 允許任務等待多個事件的發生。特別的,任務可以同時等待多個信號量和訊息佇列被提交。等待中的任務在事件發生的時候被喚醒。
任務信號量
uC/OS-III 允許ISR 或者任務直接地傳送信號量給其它任務。這樣就避免了必須產生一個中間級核心對象如一個信號量或者事件標誌組只為了標記一個任務。提高了核心性能。
任務訊息
uC/OS-III 允許ISR 或者任務直接傳送訊息到另一個任務。這樣就避免產生一個訊息佇列,提高了核心性能。
任務暫存器
每一個任務可以擁有用戶可定義的任務暫存器,不同於CPU 暫存器。
錯誤檢測
uC/OS-III 能檢測指針是否為NULL、在ISR 中調用的任務級服務是否允許、參數在允許範圍內、配置選項的有效性、函式的執行結果等。每一個uC/OS-III 的API 函式返回一個對應於函式調用結果的錯誤代號。
內置的性能測量
uC/OS-III 有內置性能測量功能。能測量每一個任務的執行時間,每個任務的堆疊使用情況,任務的執行次數,CPU的使用情況,ISR 到任務的切換時間,任務到任務的切換時間,列表中的峰值數,關中斷、鎖調度器平均時間等。
可最佳化
uC/OS-III 被設計於能夠根據CPU 的架構被最佳化。uC/OS-III 所用的大部分數據類型能夠被改變,以更好地適應CPU 固有的字大小。優先權調度法則可以通過編寫一些彙編語言而獲益於一些特殊的指令如位設定、位清除、計數清零指令(CLZ),find-first-one(FF1)指令。
死鎖預防
uC/OS-III 中所有的掛起服務都可以有時間限制,預防死鎖。
任務級的時基處理
uC/OS-III 有時基任務,時基ISR 觸發時基任務。uC/OS-III 使用了哈希列表結構,可以大大減少處理延時和任務逾時所產生的開支。
用戶可定義的鉤子函式
uC/OS-III 允許程式設計師定義hook 函式,hook 函式被uC/OS-III 調用。hook 函式允許用戶擴展uC/OS-III 的功能。有的hook 函式在任務切換的時候被調用,有的在任務創建的時候被調用,有的在任務刪除的時候被調用。
時間戳
為了測量時間,uC/OS-III 需要一個16 位或者32 位的時時間戳計數器。這個計數器值可以在運行時被讀取以測量時間。例如:當ISR 提交訊息到任務時,時間戳計數器自動讀取並保存作為訊息。當接收者接收到這條訊息,時間戳被提供在訊息內。通過讀取現在的時間戳,訊息的回響時間可以被確定。
嵌入的核心調試器
這個功能允許核心調試器查看uC/OS-III 的變數和數據結構通過一個用戶定義的通道。(但是只能在調試器遇到斷點的時候查看)。uC/OS-III 核心也支持uC/Probe(探針)在運行時顯示信息。
對象名稱
每個uC/OS-III 的核心對象有一個相關聯的名字。這樣就能很容易的識別出對象所指定的作用。分配一個ASCII 碼的名字給任務、信號量、互斥信號量、事件標誌組、訊息佇列、記憶體塊、軟體定時器。對象的名字長度沒有限制,但是必須以空字元結束。