本人前言:
很久沒有練習英語了,本想發點時間在工作之余,翻譯一下μC/OS III用戶手冊,發現還是有點吃力,于是乎,參見網絡上的嘉興學院的屈環宇同學的譯本,謝謝!
前言
做為Micrium 公司推出的第三代操作系統, μC/OS III支持現代的實時內核所期待的大部分功能;
μC/OS III是一個可裁剪、可固化、基于優先級的實時內核,支持例如資源管理、同步、任務間的通信等等。同時μC/OS III也具備一些很有特色的功能,是很多的其他的實時內核所不具備的,比如完備的實際測量性能、直接發送信號或消息到任務、任何可同時等待多個內核對象等。
與第二代μC/OS II相比,μC/OS III更加優秀,μC/OS III中刪除或更新了μC/OS II中很少使用的一些功能;添加了更高效的功能和服務,比如時間片輪轉調度(round robin)等,μC/OS II最多支持64個任務,而μC/OS III在理論上任務數量沒有限
第一章 介紹
實時系統
軟實時系統和硬實時系統的區別在于一旦沒有在規定的時間內完 成任務所導致后果的嚴重性。超過時限后所得到的結果即使正確也可 能是毫無作用的。 硬實時系統中,運算超時是不允許發生的。在很多情況下,超時 會導致巨大的災難,會威脅人們的生命安全。但是在軟實時系統中, 超時不會導致嚴重后果。
前后臺系統
簡單的小型系統設計一般是基于前后臺的或者無限循環的系統。 包含一個無限循環的模塊實現需要的操作(后臺)。中斷處理程序實 現異步事件(前臺)。前臺也叫做中斷級,后臺也叫作任務級。
多數高產量低成本微控制器的應用軟件(例如微波爐,電話玩具等)都是基于前后臺系統的。
實時內核
實時內核是一個能管理MPU、MCU、DSP時間和資源的軟件。
實時內核的應用包括迅速地響應,可靠地完成工作的各個部分。任務(也叫做線程)是一段簡單的程序,運行時完全地占用CPU。在單CPU中,任何時候只有1個任務被執行。
內核的責任是管理任務,也做多任務處理。多任務處理的作用是協調和切換多個任務依次享用CPU。多任務處理最大化CPU的功能同時會讓我們感覺是多個CPU在同時運行。多任務處理也有利于處理模塊化的應用。多任務處理一個最重要的方面在于它允許程序員管理復雜的實時應用。在多任務處理中程序員可以簡單的維護和升級產品。
uC/OS-III是一個搶占式內核,這意味著uC/OS-III總是執行最重要的就緒任務,
uC/OS-III內核也負責管理任務間的交流,系統的資源(內存和I/O)。
系統中加入內核需要額外的支出,因為內核提供服務時需要時間去處理。大多數的額外支出取決于服務的調用頻繁度。在一個優秀的設計中,內核占用CPU的時間介于2%到4%之間。因為uC/OS-III是一個軟件,添加到目標系統中需要額外的ROM和RAM。低檔的單片機很有可能不支持像uC/OS-III那樣的實時內核,因為它只有很少的RAM可供訪問。uC/OS-III內核需要1K到4K之間的RAM,加上每個任務自己所需的堆棧空間。至少有4K大小RAM的處理器才有可能成功移植uC/OS-III。最后,為了更好地使用CPU,uC/OS-III提供了大約70種常用的服務。當用過像uC/OS-III那樣的具有實時內核的系統后,你將不會再去使用前后臺系統了。
實時系統(RTOS)
一個實時系統通常包括一個實時內核以及其他高級的服務,例如:文件管理,堆棧協議,圖形用戶接口等等。大多數服務都是跟I/O有關的。
Micrium提供了RTOS一套完整的組件,包括uC/FS、uC/TCP-IP、uC/GUI、uC/USB等。這些組件大部分都可以單獨執除了uC/TCP-IP。實時內核在應用中不是必須的。事實上,用戶可以單獨選擇您的應用所需用的組件。
uC/OS-III
uC/OS-III是一個可擴展的,可固化的,搶占式的實時內核,它管理的任務個數不受限制。它是第三代內核,提供了現代實時內核所期望的所有功能包括資源管理、同步、內部任務交流等。uC/OS-III也提供了很多特性是在其他實時內核中所沒有的。比如能在運行時測量運行性能,直接得發送信號或消息給任務,任務能同時等待多個信號
量和消息隊列。
以下列出uC/OS-III的特點:
源代碼、應用程序接口(API)、搶占式多任務處理、時間片輪轉調度、快速響應中斷、確定性的、可擴展的、易移植的、可固化的、可實時配置的、任務數無限制、優先級數無限制、內核對象數無限制、各種系統服務、互斥信號量(Mutexes)、嵌套的任務停止、軟件定時器、掛起多個對象、任務信號量、任務消息、任務寄存器、錯誤檢測、內置的性能測量、可優化、死鎖預防、任務級的時基處理、用戶可定義的鉤子函數、時間戳、嵌入的內核調試器、對象名稱。
時間片輪轉調度:uC/OS-III允許多個任務擁有相同的優先級。當多個相同優先級的任務就緒時,并且這個優先級是目前最高的。uC/OS-III會分配用戶定義的時間片給每個任務去運行。每個任務可以定義不同的時間片。當任務用不完時間片時可以讓出CPU給另一個任務。
任務數無限制:uC/OS-III對任務數量無限制。實際上,任務的數量限制于處理器能提供的內存大小。每一個任務需要有自己的堆棧空間,uC/OS-III在運行時監控任務堆棧的生長。uC/OS-III對任務的大小無限制,
優先級數無限制:uC/OS-III對優先級的數量無限制。然而,配置uC/OS-III的優先級在32到256之間已經滿足大多數的應用了
內核對象數無限制:uC/OS-III支持任何數量的任務、信號量、互斥信號量、事件標志組、消息隊列、軟件定時器、內存分區。用戶在運行時分配所有的內核對象
互斥信號量(Mutexes):互斥信號量用于資源管理。它是一個內置優先級的特殊類型信號量,用于消除優先級反轉。互斥信號量可以被嵌套,因此,任務可申請同一個互斥信號量多達250次。當然,互斥信號量的占有者需要釋放同等次數。
嵌套的任務停止:uC/OS-III允許任務停止自身或者停止另外的任務。停止一個任務意味著這個任務將不再執行直到被其他的任務恢復。停止可以被嵌套到250級。換句話說,一個任務可以停止另外的任務多達250次。當然,這個任務必須被恢復同等次數才有資格再次獲得CPU。
軟件定時器:可以定義任意數量的一次性的、周期性的、或者兩者兼有的定時器。定時器是倒計時的,執行用戶定義的行為一直到計數減為0。每一個定時器可以有自己的行為,如果一個定時器是周期性的,計數減為0時會自動重裝計數值并執行用戶定義的行為。
掛起多個對象:uC/OS-III允許任務等待多個事件的發生。特別的,任務可以同時等待多個信號量和消息隊列被提交。等待中的任務在事件發生的時候被喚醒。
任務信號量:uC/OS-III允許ISR或者任務直接地發送信號量給其它任務。這樣就避免了必須產生一個中間級內核對象如一個信號量或者事件標志組只為了標記一個任務。提高了內核性能
任務消息:uC/OS-III允許ISR或者任務直接發送消息到另一個任務。這樣就避免產生一個消息隊列,提高了內核性能。
內置的性能測量:uC/OS-III有內置性能測量功能。能測量每一個任務的執行時間,每個任務的堆棧使用情況,任務的執行次數,CPU的使用情況,ISR到任務的切換時間,任務到任務的切換時間,列表中的峰值數,關中斷、鎖調度器平均時間等。
任務寄存器:每一個任務可以擁有用戶可定義的任務寄存器,不同于CPU寄存器。
可優化:uC/OS-III有內置性能測量功能。能測量每一個任務的執行時間,每個任務的堆棧使用情況,任務的執行次數,CPU的使用情況,ISR到任務的切換時間,任務到任務的切換時間,列表中的峰值數,關中斷、鎖調度器平均時間等。
用戶可定義的鉤子函數: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(探針)在運行時顯示信息。
μC/OS III 的目錄和文件:
F2-1(1)應用代碼包括與工程、產品相關文件。為了方便,這些被簡單地叫做APP.C和APP.H。Main()函數應該在APP.C代碼中
F2-1(2)半導體廠家通常會提供庫函數以控制那些CPU或MCU的外設。這些庫非常有用并且高效。因為對這些文件沒有規定。所以假定為*.C,*.H。
F2-1(3)板級支持包通常被用來初始化目標板。例如打開或關閉LED、繼電器、讀取開關值、讀取溫度傳感器等。
F2-1(4)這些是uC/OS-III的與處理器無關的代碼。這些代碼都是高度遵循ANSIC標準。
F2-1(5)這些uC/OS-III代碼用于適應不同架構的CPU,在名為port的文件夾中。uC/OS-III源于uC/OS-II。uC/OS-II能移植成功的,只要稍有改動便能移植uC/OS-III。詳見附錄C。
F2-1(6)在Micrium,我們喜歡去總結CPU的功能。這些包括中斷的使能和除能。CPU_???類型的文件都是獨立于CPU的,在編譯時用到,而且可能非常有用。
F2-1(7)uC/LIB是一系列的源文件,提供了常用基本的功能如內存拷貝,字符串,ASCII相關的函數。一些可以代替編譯器提供的stdlib的功能。這些文件是應用與應用間,編譯器與編譯器間可移植。uC/OS-III不需要這些文件,但是uC/CPU需要。
F2-1(8)uC/OS-III功能的配置文件(OS_CFG.H)包含在應用中,OS_CFG_APP.H定義了uC/OS-III所需的變量類型大小、數據的結構、空閑任務堆棧的大小、時鐘速率、內存池大小等。
應用代碼
如果Micrium提供了例子。那么它將被包含在如下的目錄結構。
\Micrium
\Software
\EvalBoards
\
\
\
\
\*.*
\Micrium
這是我們存放軟件或工程的地方,通常位于電腦的根目錄。
\Software
子目錄中是軟件成分。
\EvalBoards
子目錄中包含了評估版的工程。
\
制造商的名字名字中不包括"<"和">"。
\
評估板的名字。Micrium通常命名為uC-Eval-xxxx。用CPU或MCU
類型替代''xxxx''。
\
代碼所用編譯器的名字
\
工程名。例如,uC/OS-III工程會被命名為"OS-Ex1"。"-Ex1"表明
工程中值包含uC/OS-III。命名為OS-Probe-Ex1表示工程中包含
uC/OS-III和uC/Probe。
\*.*
這些是工程的源文件,main文件可以被命名為APP*.*。目錄中也
包括配置文件OS_CFG.H,OS_CFG_APP.H以及其它需要的源文件。
CPU
在這個目錄中,你會找到半導體廠商提供的外設庫文件。
\Micrium
\Software
\CPU
\
\
\*.*
板級支持包(BSP)
板級支持包通常是目標器件的特殊配置。實時上,寫得好的話,
BSP將適用于多個工程
\Micrium
\Software
\EvalBoards
\
\
\
\BSP
\*.*
各目錄中有哪些文件都可以參考用戶手冊,加以了解。