專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

uCosIII 學(xué)習(xí)

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年08月17日   【字體:

本人前言: 

很久沒有練習(xí)英語了,本想發(fā)點時間在工作之余,翻譯一下μC/OS III用戶手冊,發(fā)現(xiàn)還是有點吃力,于是乎,參見網(wǎng)絡(luò)上的嘉興學(xué)院的屈環(huán)宇同學(xué)的譯本,謝謝!

前言
做為Micrium 公司推出的第三代操作系統(tǒng), μC/OS III支持現(xiàn)代的實時內(nèi)核所期待的大部分功能;
μC/OS III是一個可裁剪、可固化、基于優(yōu)先級的實時內(nèi)核,支持例如資源管理、同步、任務(wù)間的通信等等。同時μC/OS III也具備一些很有特色的功能,是很多的其他的實時內(nèi)核所不具備的,比如完備的實際測量性能、直接發(fā)送信號或消息到任務(wù)、任何可同時等待多個內(nèi)核對象等。
與第二代μC/OS II相比,μC/OS III更加優(yōu)秀,μC/OS III中刪除或更新了μC/OS II中很少使用的一些功能;添加了更高效的功能和服務(wù),比如時間片輪轉(zhuǎn)調(diào)度(round robin)等,μC/OS II最多支持64個任務(wù),而μC/OS III在理論上任務(wù)數(shù)量沒有限
 

第一章  介紹

  實時系統(tǒng)
軟實時系統(tǒng)和硬實時系統(tǒng)的區(qū)別在于一旦沒有在規(guī)定的時間內(nèi)完 成任務(wù)所導(dǎo)致后果的嚴重性。超過時限后所得到的結(jié)果即使正確也可 能是毫無作用的。 硬實時系統(tǒng)中,運算超時是不允許發(fā)生的。在很多情況下,超時 會導(dǎo)致巨大的災(zāi)難,會威脅人們的生命安全。但是在軟實時系統(tǒng)中, 超時不會導(dǎo)致嚴重后果。
 
  前后臺系統(tǒng)
簡單的小型系統(tǒng)設(shè)計一般是基于前后臺的或者無限循環(huán)的系統(tǒng)。 包含一個無限循環(huán)的模塊實現(xiàn)需要的操作(后臺)。中斷處理程序?qū)?現(xiàn)異步事件(前臺)。前臺也叫做中斷級,后臺也叫作任務(wù)級。
  多數(shù)高產(chǎn)量低成本微控制器的應(yīng)用軟件(例如微波爐,電話玩具等)都是基于前后臺系統(tǒng)的。
  
  實時內(nèi)核
  實時內(nèi)核是一個能管理MPU、MCU、DSP時間和資源的軟件。
  實時內(nèi)核的應(yīng)用包括迅速地響應(yīng),可靠地完成工作的各個部分。任務(wù)(也叫做線程)是一段簡單的程序,運行時完全地占用CPU。在單CPU中,任何時候只有1個任務(wù)被執(zhí)行。
  內(nèi)核的責(zé)任是管理任務(wù),也做多任務(wù)處理。多任務(wù)處理的作用是協(xié)調(diào)和切換多個任務(wù)依次享用CPU。多任務(wù)處理最大化CPU的功能同時會讓我們感覺是多個CPU在同時運行。多任務(wù)處理也有利于處理模塊化的應(yīng)用。多任務(wù)處理一個最重要的方面在于它允許程序員管理復(fù)雜的實時應(yīng)用。在多任務(wù)處理中程序員可以簡單的維護和升級產(chǎn)品。
  uC/OS-III是一個搶占式內(nèi)核,這意味著uC/OS-III總是執(zhí)行最重要的就緒任務(wù),
  uC/OS-III內(nèi)核也負責(zé)管理任務(wù)間的交流,系統(tǒng)的資源(內(nèi)存和I/O)。
  系統(tǒng)中加入內(nèi)核需要額外的支出,因為內(nèi)核提供服務(wù)時需要時間去處理。大多數(shù)的額外支出取決于服務(wù)的調(diào)用頻繁度。在一個優(yōu)秀的設(shè)計中,內(nèi)核占用CPU的時間介于2%到4%之間。因為uC/OS-III是一個軟件,添加到目標(biāo)系統(tǒng)中需要額外的ROM和RAM。低檔的單片機很有可能不支持像uC/OS-III那樣的實時內(nèi)核,因為它只有很少的RAM可供訪問。uC/OS-III內(nèi)核需要1K到4K之間的RAM,加上每個任務(wù)自己所需的堆�?臻g。至少有4K大小RAM的處理器才有可能成功移植uC/OS-III。最后,為了更好地使用CPU,uC/OS-III提供了大約70種常用的服務(wù)。當(dāng)用過像uC/OS-III那樣的具有實時內(nèi)核的系統(tǒng)后,你將不會再去使用前后臺系統(tǒng)了。
  實時系統(tǒng)(RTOS)
  一個實時系統(tǒng)通常包括一個實時內(nèi)核以及其他高級的服務(wù),例如:文件管理,堆棧協(xié)議,圖形用戶接口等等。大多數(shù)服務(wù)都是跟I/O有關(guān)的。
  Micrium提供了RTOS一套完整的組件,包括uC/FS、uC/TCP-IP、uC/GUI、uC/USB等。這些組件大部分都可以單獨執(zhí)除了uC/TCP-IP。實時內(nèi)核在應(yīng)用中不是必須的。事實上,用戶可以單獨選擇您的應(yīng)用所需用的組件。
  uC/OS-III
  uC/OS-III是一個可擴展的,可固化的,搶占式的實時內(nèi)核,它管理的任務(wù)個數(shù)不受限制。它是第三代內(nèi)核,提供了現(xiàn)代實時內(nèi)核所期望的所有功能包括資源管理、同步、內(nèi)部任務(wù)交流等。uC/OS-III也提供了很多特性是在其他實時內(nèi)核中所沒有的。比如能在運行時測量運行性能,直接得發(fā)送信號或消息給任務(wù),任務(wù)能同時等待多個信號
量和消息隊列。
  以下列出uC/OS-III的特點:
  源代碼、應(yīng)用程序接口(API)、搶占式多任務(wù)處理、時間片輪轉(zhuǎn)調(diào)度、快速響應(yīng)中斷、確定性的、可擴展的、易移植的、可固化的、可實時配置的、任務(wù)數(shù)無限制、優(yōu)先級數(shù)無限制、內(nèi)核對象數(shù)無限制、各種系統(tǒng)服務(wù)、互斥信號量(Mutexes)、嵌套的任務(wù)停止、軟件定時器、掛起多個對象、任務(wù)信號量、任務(wù)消息、任務(wù)寄存器、錯誤檢測、內(nèi)置的性能測量、可優(yōu)化、死鎖預(yù)防、任務(wù)級的時基處理、用戶可定義的鉤子函數(shù)、時間戳、嵌入的內(nèi)核調(diào)試器、對象名稱。
  時間片輪轉(zhuǎn)調(diào)度uC/OS-III允許多個任務(wù)擁有相同的優(yōu)先級。當(dāng)多個相同優(yōu)先級的任務(wù)就緒時,并且這個優(yōu)先級是目前最高的。uC/OS-III會分配用戶定義的時間片給每個任務(wù)去運行。每個任務(wù)可以定義不同的時間片。當(dāng)任務(wù)用不完時間片時可以讓出CPU給另一個任務(wù)。
  任務(wù)數(shù)無限制uC/OS-III對任務(wù)數(shù)量無限制。實際上,任務(wù)的數(shù)量限制于處理器能提供的內(nèi)存大小。每一個任務(wù)需要有自己的堆�?臻g,uC/OS-III在運行時監(jiān)控任務(wù)堆棧的生長。uC/OS-III對任務(wù)的大小無限制,
  優(yōu)先級數(shù)無限制uC/OS-III對優(yōu)先級的數(shù)量無限制。然而,配置uC/OS-III的優(yōu)先級在32到256之間已經(jīng)滿足大多數(shù)的應(yīng)用了
  內(nèi)核對象數(shù)無限制uC/OS-III支持任何數(shù)量的任務(wù)、信號量、互斥信號量、事件標(biāo)志組、消息隊列、軟件定時器、內(nèi)存分區(qū)。用戶在運行時分配所有的內(nèi)核對象
  互斥信號量(Mutexes):互斥信號量用于資源管理。它是一個內(nèi)置優(yōu)先級的特殊類型信號量,用于消除優(yōu)先級反轉(zhuǎn)�;コ庑盘柫靠梢员磺短�,因此,任務(wù)可申請同一個互斥信號量多達250次。當(dāng)然,互斥信號量的占有者需要釋放同等次數(shù)。
  嵌套的任務(wù)停止:uC/OS-III允許任務(wù)停止自身或者停止另外的任務(wù)。停止一個任務(wù)意味著這個任務(wù)將不再執(zhí)行直到被其他的任務(wù)恢復(fù)。停止可以被嵌套到250級。換句話說,一個任務(wù)可以停止另外的任務(wù)多達250次。當(dāng)然,這個任務(wù)必須被恢復(fù)同等次數(shù)才有資格再次獲得CPU。
  軟件定時器:可以定義任意數(shù)量的一次性的、周期性的、或者兩者兼有的定時器。定時器是倒計時的,執(zhí)行用戶定義的行為一直到計數(shù)減為0。每一個定時器可以有自己的行為,如果一個定時器是周期性的,計數(shù)減為0時會自動重裝計數(shù)值并執(zhí)行用戶定義的行為。
  掛起多個對象:uC/OS-III允許任務(wù)等待多個事件的發(fā)生。特別的,任務(wù)可以同時等待多個信號量和消息隊列被提交。等待中的任務(wù)在事件發(fā)生的時候被喚醒。
  任務(wù)信號量:uC/OS-III允許ISR或者任務(wù)直接地發(fā)送信號量給其它任務(wù)。這樣就避免了必須產(chǎn)生一個中間級內(nèi)核對象如一個信號量或者事件標(biāo)志組只為了標(biāo)記一個任務(wù)。提高了內(nèi)核性能
  任務(wù)消息:uC/OS-III允許ISR或者任務(wù)直接發(fā)送消息到另一個任務(wù)。這樣就避免產(chǎn)生一個消息隊列,提高了內(nèi)核性能。
  內(nèi)置的性能測量:uC/OS-III有內(nèi)置性能測量功能。能測量每一個任務(wù)的執(zhí)行時間,每個任務(wù)的堆棧使用情況,任務(wù)的執(zhí)行次數(shù),CPU的使用情況,ISR到任務(wù)的切換時間,任務(wù)到任務(wù)的切換時間,列表中的峰值數(shù),關(guān)中斷、鎖調(diào)度器平均時間等。
  任務(wù)寄存器:每一個任務(wù)可以擁有用戶可定義的任務(wù)寄存器,不同于CPU寄存器。
  可優(yōu)化:uC/OS-III有內(nèi)置性能測量功能。能測量每一個任務(wù)的執(zhí)行時間,每個任務(wù)的堆棧使用情況,任務(wù)的執(zhí)行次數(shù),CPU的使用情況,ISR到任務(wù)的切換時間,任務(wù)到任務(wù)的切換時間,列表中的峰值數(shù),關(guān)中斷、鎖調(diào)度器平均時間等。
  用戶可定義的鉤子函數(shù):uC/OS-III允許程序員定義hook函數(shù),hook函數(shù)被uC/OS-III調(diào)用。hook函數(shù)允許用戶擴展uC/OS-III的功能。有的hook函數(shù)在任務(wù)切換的時候被調(diào)用,有的在任務(wù)創(chuàng)建的時候被調(diào)用,有的在任務(wù)刪除的時候被調(diào)用。
  時間戳:為了測量時間,uC/OS-III需要一個16位或者32位的時時間戳計數(shù)器。這個計數(shù)器值可以在運行時被讀取以測量時間。例如:當(dāng)ISR提交消息到任務(wù)時,時間戳計數(shù)器自動讀取并保存作為消息。當(dāng)接收者接收到這條消息,時間戳被提供在消息內(nèi)。通過讀取現(xiàn)在的時間戳,消息的響應(yīng)時間可以被確定。
  嵌入的內(nèi)核調(diào)試器:這個功能允許內(nèi)核調(diào)試器查看uC/OS-III的變量和數(shù)據(jù)結(jié)構(gòu)通過一個用戶定義的通道。(但是只能在調(diào)試器遇到斷點的時候查看)。uC/OS-III內(nèi)核也支持uC/Probe(探針)在運行時顯示信息。
 





μC/OS III 的目錄和文件:



F2-1(1)應(yīng)用代碼包括與工程、產(chǎn)品相關(guān)文件。為了方便,這些被簡單地叫做APP.C和APP.H。Main()函數(shù)應(yīng)該在APP.C代碼中
F2-1(2)半導(dǎo)體廠家通常會提供庫函數(shù)以控制那些CPU或MCU的外設(shè)。這些庫非常有用并且高效。因為對這些文件沒有規(guī)定。所以假定為*.C,*.H。
F2-1(3)板級支持包通常被用來初始化目標(biāo)板。例如打開或關(guān)閉LED、繼電器、讀取開關(guān)值、讀取溫度傳感器等。
F2-1(4)這些是uC/OS-III的與處理器無關(guān)的代碼。這些代碼都是高度遵循ANSIC標(biāo)準(zhǔn)。
F2-1(5)這些uC/OS-III代碼用于適應(yīng)不同架構(gòu)的CPU,在名為port的文件夾中。uC/OS-III源于uC/OS-II。uC/OS-II能移植成功的,只要稍有改動便能移植uC/OS-III。詳見附錄C。
F2-1(6)在Micrium,我們喜歡去總結(jié)CPU的功能。這些包括中斷的使能和除能。CPU_???類型的文件都是獨立于CPU的,在編譯時用到,而且可能非常有用。
F2-1(7)uC/LIB是一系列的源文件,提供了常用基本的功能如內(nèi)存拷貝,字符串,ASCII相關(guān)的函數(shù)。一些可以代替編譯器提供的stdlib的功能。這些文件是應(yīng)用與應(yīng)用間,編譯器與編譯器間可移植。uC/OS-III不需要這些文件,但是uC/CPU需要。
F2-1(8)uC/OS-III功能的配置文件(OS_CFG.H)包含在應(yīng)用中,OS_CFG_APP.H定義了uC/OS-III所需的變量類型大小、數(shù)據(jù)的結(jié)構(gòu)、空閑任務(wù)堆棧的大小、時鐘速率、內(nèi)存池大小等。
 
 
應(yīng)用代碼
 
如果Micrium提供了例子。那么它將被包含在如下的目錄結(jié)構(gòu)。
\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
在這個目錄中,你會找到半導(dǎo)體廠商提供的外設(shè)庫文件。
\Micrium
  \Software
    \CPU
       \
          \
\*.*
板級支持包(BSP)
板級支持包通常是目標(biāo)器件的特殊配置。實時上,寫得好的話,
BSP將適用于多個工程
\Micrium
\Software
\EvalBoards
\
\
\
\BSP
\*.*
各目錄中有哪些文件都可以參考用戶手冊,加以了解。
關(guān)閉窗口