|
0.jpg (11.19 KB, 下載次數(shù): 223)
下載附件
2018-4-26 16:01 上傳
譯者序
很高興終于完成了 uC/OS-III 嵌入式系統(tǒng)的翻譯,翻譯從 2011 年10 月 15 日開始到 2011 年 11 月 3 日為止 , 共 20 天時間 , 平均每天 5個小時。本想將 uC/OS-III 函數(shù)的 API 部分也翻譯的,但畢竟考研更甚于愛好,我得為 2013 年 1 月的考研做準(zhǔn)備呀 ~~ 。
在此,我要感謝:
1 、 我的導(dǎo)師:樂教授。是您經(jīng)常帶我去公司拓展視野,并讓我堅定不移地往嵌入式方面發(fā)展。
2 、 我的師傅:張博士。是您無償提供給我一些開發(fā)板,作為回報,幫您的店鋪宣傳一下as-robot
3 、 還有我的親朋好友們。
特別是今天上午,用了 3 小時終于在 MDK4.0 編譯器上 將uC/OS-III 移植到 stm32f103rb 處理器上,并成功運行。移植的步驟 ,我也會發(fā)布到網(wǎng)上的,謝謝大家。
序言
什么是 uC/OS-III?
uC/OS-III(Micro C OS Three 微型的 C 語言編寫的操作系統(tǒng)第 3版 ) 是一個可升級的,可固化的,基于優(yōu)先級的實時內(nèi)核。它對任務(wù)的個數(shù)無限制。 uC/OS-III 是一個第 3 代的系統(tǒng)內(nèi)核,支持現(xiàn)代的實時內(nèi)核所期待的大部分功能 。 例如資源管理 , 同步 , 任務(wù)間的通信等等。然而, uC/OS-III 提供的特色功能在其它的實時內(nèi)核中是找不到的 , 比如說完備的運行時間測量性能 , 直接地發(fā)送信號或者消息到任務(wù),任務(wù)可以同時等待多個內(nèi)核對象等。為什么命名一個新的版本?
uC/OS 系列,第一代產(chǎn)生于 1992 。經(jīng)過了多年的使用和上千人的反饋,已經(jīng)產(chǎn)生了很多的進(jìn)化版本。
uC/OS-III 是這些反饋和經(jīng)驗的總結(jié)。在 uC/OS-II 中很少使用的功能已經(jīng)被刪除或者被更新 , 添加了更高效的功能和服務(wù) 。 其中最有用的功能應(yīng)該是時間片輪轉(zhuǎn)法( round robin), 這個是 uC/OS-II 中不支持的,但是現(xiàn)在已經(jīng)是 uC/OS-III 的一個功能了。uC/OS-III 會提供新的功能以更好地適應(yīng)新出現(xiàn)的處理器。特別的, uC/OS-III 被設(shè)計用于 32 位處理器,但是它也能在 16 位或 8 位處理器中很好地工作。
uC/OS-III 的目標(biāo)
uC/OS-III 最主要的目標(biāo)是提供一流的實時內(nèi)核以適應(yīng)更新很快的嵌入式產(chǎn)品。使用像 uC/OS-III 那樣具有雄厚的基礎(chǔ)和穩(wěn)定的框架的商業(yè)實時內(nèi)核,能夠幫助設(shè)計師們處理日益復(fù)雜的嵌入式設(shè)計。這本書中的目標(biāo) , 是為了介紹 uC/OS-III 的內(nèi)部工作 。 了解這些會幫助讀者實現(xiàn)邏輯上的設(shè)計方案 , 協(xié)調(diào)統(tǒng)一硬件和軟件會讓你對整體的設(shè)計很有把握。
1 、簡介
在重要的地方,實時系統(tǒng)憑借其系統(tǒng)性的計算和及時的處理能力工作著。一共有 2 種類型的實時系統(tǒng):軟實時系統(tǒng)和硬實時系統(tǒng)。軟實時系統(tǒng)和硬實時系統(tǒng)的區(qū)別在于一旦沒有在規(guī)定的時間內(nèi)完成任務(wù)所導(dǎo)致后果的嚴(yán)重性 。 超過時限后所得到的結(jié)果即使正確也可能是毫無作用的。
硬實時系統(tǒng)中,運算超時是不允許發(fā)生的。在很多情況下,超時會導(dǎo)致巨大的災(zāi)難,會威脅人們的生命安全。但是在軟實時系統(tǒng)中 ,超時不會導(dǎo)致嚴(yán)重后果。
實時系統(tǒng)的應(yīng)用范圍很廣,但很多實時系統(tǒng)是嵌入式的。一個嵌入式系統(tǒng)是計算機(jī)中添加操作系統(tǒng),但是用戶不公認(rèn)這是個計算機(jī) 。以下列出嵌入式系統(tǒng)的一些例子
0.jpg (20.42 KB, 下載次數(shù): 192)
下載附件
2018-4-26 16:04 上傳
0.jpg (24.34 KB, 下載次數(shù): 193)
下載附件
2018-4-26 16:04 上傳
實時系統(tǒng)的設(shè)計,調(diào)試和配置比非實時系統(tǒng)難得多。
1-1 前后臺系統(tǒng) 前后臺系統(tǒng) 前后臺系統(tǒng) 前后臺系統(tǒng)簡單的小型系統(tǒng)設(shè)計一般是基于前后臺的或者無限循環(huán)的系統(tǒng)。包含一個無限循環(huán)的模塊實現(xiàn)需要的操作(后臺 ) 。中斷處理程序?qū)崿F(xiàn)異步事件(前臺 ) 。前臺也叫做中斷級,后臺也叫作任務(wù)級。臨界操作應(yīng)該在任務(wù)級中被執(zhí)行,不可避免地必須在中斷處理程序中執(zhí)行也要確保是在很短的時間內(nèi)完成 。 因為這會導(dǎo)致 ISR 占用更長的時間 。 通常的 , ISR 中使能相關(guān)的信息而在后臺程序中執(zhí)行相應(yīng)的操作 。 這叫做任務(wù)級響應(yīng) 。 任務(wù)級響應(yīng)的時間依賴于后臺循環(huán)一次所需的時間 , 通常這不是一個固定常量 。 另外 , 如果其中的代碼稍有改動,那么循環(huán)一次所用的時間也將有所變化。
大多數(shù)高產(chǎn)量低成本微控制器的應(yīng)用軟件 ( 例如微波爐 , 電話玩具等)都是基于前后臺系統(tǒng)的。
0.png (96.96 KB, 下載次數(shù): 192)
下載附件
2018-4-26 16:05 上傳
1-2 實時內(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ù)處理中程序員可以簡單的維護(hù)和升級產(chǎn)品。
uC/OS-III 是一個搶占式內(nèi)核 , 這意味著 uC/OS-III 總是執(zhí)行最重要的就緒任務(wù),如圖 1-2 。
0.png (86.16 KB, 下載次數(shù): 179)
下載附件
2018-4-26 16:06 上傳
F1-2 ( 1 ) 一個低優(yōu)先級的任務(wù)正在被執(zhí)行
F1-2 ( 2 )發(fā)生一個中斷, CPU 轉(zhuǎn)向 ISR
F1-2 ( 3 ) ISR 響應(yīng)中斷請求設(shè)備 , 但是 ISR 只做非常少的工作 。 ISR應(yīng)該標(biāo)記或發(fā)送消息到一個高優(yōu)先級的任務(wù) , 讓中斷能夠快速處理完畢 。 例如 , 如果一個中斷來自于以太網(wǎng)控制器 , ISR 標(biāo)記任務(wù) , 在任務(wù)級響應(yīng)以太網(wǎng)控制器。
F1-2 ( 4 ) 當(dāng) ISR 執(zhí)行完畢 , uC/OS-III 注意到 ISR 創(chuàng)建的一個更高優(yōu)先級的任務(wù)就緒。 uC/OS-III 將不會返回到中斷前的任務(wù),它會切換到這個更高優(yōu)先級的任務(wù)。
F1-2 ( 5 )高優(yōu)先級任務(wù)執(zhí)行必要的處理答復(fù)中斷請求設(shè)備。
F1-2 ( 6 )當(dāng)高優(yōu)先級任務(wù)完成時,返回原任務(wù)中斷前的代碼。
F1-2 ( 7 )原任務(wù)在它被中斷的地方開始執(zhí)行。
uC/OS-III 內(nèi)核也負(fù)責(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-II I是一個軟件,添加到目標(biāo)系統(tǒng)中需要額外的 ROM 和 RAM 。低檔的單片機(jī)很有可能不支持像 uC/OS-III 那樣的實時內(nèi)核 , 因為它只有很少的 RAM 可供訪問。 uC/OS-III 內(nèi)核需要 1K 到 4K 之間 的RAM , 加上每個任務(wù)自己所需的堆棧空間 。 至少有 4K 大小 RAM 的處理器才有可能成功移植 uC/OS-III 。
最后,為了更好地使用 CPU , uC/OS-III 提供了大約 70 種常用的服務(wù)。當(dāng)用過像 uC/OS-III 那樣的具有實時內(nèi)核的系統(tǒng)后,你將不會再去使用前后臺系統(tǒng)了。
1-3 實時系統(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)用所需用的組件。詳情和購買請聯(lián)系 Micrium 。
1-4 uC/OS-III
uC/OS-III 是一個可擴(kuò)展的 , 可固化的 , 搶占式的實時內(nèi)核 , 它管理的任務(wù)個數(shù)不受限制 。 它是第三代內(nèi)核 , 提供了現(xiàn)代實時內(nèi)核所期望的所有功能包括資源管理、同步、內(nèi)部任務(wù)交流等。 uC/OS-III 也提供了很多特性是在其他實時內(nèi)核中所沒有的 。 比如能在運行時測量運行性能 , 直接得發(fā)送信號或消息給任務(wù) , 任務(wù)能同時等待多個信號量和消息隊列。
以下列出 uC/OS-III 的特點:
源代碼 : uC/OS-III 完全根據(jù) ANSI-C 標(biāo)準(zhǔn)寫的。代碼的規(guī)范 是Micrium 團(tuán)隊的一種文化 。 雖然很多商業(yè)內(nèi)核供應(yīng)商提供他們產(chǎn)品的源代碼 , 但是這些產(chǎn)品很有可能是笨重且難以利用的 。 除非代碼嚴(yán)格地遵循標(biāo)準(zhǔn)并且產(chǎn)品有完整的帶例子的說明書以展示代碼是怎樣工作的。通過這本書,你將會對 uC/OS-III 內(nèi)部的工作情況有一個很深的了解。應(yīng)用程序接口 ( API ) : uC/OS-III 是很直觀的 。 如果你熟悉類似的編碼規(guī)范 , 你能輕松地知道函數(shù)名所對應(yīng)的服務(wù) , 以及需要怎樣的參數(shù) 。 例如 : 指向?qū)ο蟮闹羔樛ǔJ堑谝粋參數(shù) , 指向錯誤代碼的指針
通常是最后一個參數(shù)。
搶占式多任務(wù)處理 : uC/OS-III 是一個搶占式多任務(wù)處理內(nèi)核 , 因此, uC/OS-III 正在運行的經(jīng)常是最重要的就緒任務(wù)。時間片輪轉(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ù)。
快速響應(yīng)中斷: uC/OS-III 有一些內(nèi)部的數(shù)據(jù)結(jié)構(gòu)和變量。
uC/OS-III 保護(hù)臨界段可以通過鎖定調(diào)度器代替關(guān)中斷。因此關(guān)中斷的時間會非常少。這樣就使 uC/OS-III 可以響應(yīng)一些非常快的中斷源了。
確定性的 : uC/OS-III 的中斷響應(yīng)時間是可確定的 , uC/OS-III 提供
的大部分服務(wù)的執(zhí)行時間也是可確定的。
可擴(kuò)展的 :根據(jù)應(yīng)用的需求,代碼大小可以被調(diào)整。 編譯時 通過調(diào)整 uC/OS-II I 源代碼中的大 約 4 0 個 #define( 見 OS_CFG.H) 可以在添加或移除一些功能。 uC/OS-III 的服務(wù)還提供一些實時檢查功能。特別的, uC/OS-III 能檢傳遞的參數(shù)是否為 NULL 指針, ISR 是否就緒了任務(wù)級服務(wù) 。 參數(shù)有允許范圍 , 指定選項都是有用的 。 檢測功能可以被關(guān)閉(在編譯時)以提供更好的性能和縮減代碼大小。實際上 ,可擴(kuò)展的 uC/OS-III 支持更廣泛的應(yīng)用和項目。易移植的 : uC/OS-III 可以被移植到大部分的 CPU 架構(gòu)中。大部分的支持 uC/OS-II 的器件通過改動就能支持 uC/OS-III 。而 uC/OS-I I已經(jīng)移植到 45 種 CPU 架構(gòu)中了。
可固化的 : uC/OS-III 專為嵌入式系統(tǒng)設(shè)計 , 它可以跟應(yīng)用程序代碼一起被固化。
可實時配置的: uC/OS-III 允許用戶在運行時配置內(nèi)核。特別的 ,所有的內(nèi)核對象如任務(wù)、堆棧、信號量、事件標(biāo)志組、消息隊列 、 消息、互斥信號量、內(nèi)存分區(qū)、軟件定時器等都是在運行時分配的 , 以免在編譯時的過度分配。
任務(wù)數(shù)無限制 : uC/OS-III 對任務(wù)數(shù)量無限制 。 實際上 , 任務(wù)的數(shù)量限制于處理器能提供的內(nèi)存大小 。 每一個任務(wù)需要有自己的堆棧空間, 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)核對象。
服務(wù) : uC/OS-III 提供了高檔實時內(nèi)核所需要的所有功能 , 例如任務(wù)管理、時間管理、信號量、事件標(biāo)志組、互斥信號量、消息隊列 、軟件定時器、內(nèi)存分區(qū)等。互斥信號量( Mutexes Mutexes Mutexes Mutexes ) : 互斥信號量用于資源管理。它是一個內(nèi)置優(yōu)先級的特殊類型信號量 , 用于消除優(yōu)先級反轉(zhuǎn) 。 互斥信號量可以被嵌套,因此,任務(wù)可申請同一個互斥信號量多達(dá) 250 次。當(dāng)然 , 互斥信號量的占有者需要釋放同等次數(shù)。
嵌套的任務(wù)停止 : uC/OS-III 允許任務(wù)停止自身或者停止另外的任務(wù)。停止一個任務(wù)意味著這個任務(wù)將不再執(zhí)行直到被其他的任務(wù)恢復(fù) 。 停止可以被嵌套到 250 級 。 換句話說 , 一個任務(wù)可以停止另外的任務(wù)多達(dá) 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)核性能。
任務(wù)寄存器 :每一個任務(wù)可以擁有用戶可定義的任務(wù)寄存器,不同于 CPU 寄存器。
錯誤檢測 : uC/OS-III 能檢測指針是否為 NULL 、 在 ISR 中調(diào)用的任務(wù)級服務(wù)是否允許 、 參數(shù)在允許范圍內(nèi) 、 配置選項的有效性 、 函數(shù)的執(zhí)行結(jié)果等。每一個 uC/OS-III 的 API 函數(shù)返回一個對應(yīng)于函數(shù)調(diào)用結(jié)果的錯誤代號。
內(nèi)置的性能測量 : uC/OS-III 有內(nèi)置性能測量功能 。 能測量每一個任務(wù)的執(zhí)行時間 , 每個任務(wù)的堆棧使用情況,任務(wù)的執(zhí)行次數(shù), CP U的使用情況 , ISR 到任務(wù)的切換時間 , 任務(wù)到任務(wù)的切換時間 , 列表中的峰值數(shù),關(guān)中斷、鎖調(diào)度器平均時間等。
可優(yōu)化: uC/OS-III 被設(shè)計于能夠根據(jù) CPU 的架構(gòu)被優(yōu)化。
uC/OS-III 所用的大部分?jǐn)?shù)據(jù)類型能夠被改變 , 以更好地適應(yīng) CPU 固有的字大小 。 優(yōu)先級調(diào)度法則可以通過編寫一些匯編語言而獲益于一些 特 殊 的 指 令 如 位 設(shè) 置 、 位 清 除 、 計 數(shù) 清 零 指 令( CLZ ) ,find-first-one(FF1) 指令。
死鎖預(yù)防 : uC/OS-III 中所有的掛起服務(wù)都可以有時間限制 , 預(yù)防死鎖。
任務(wù)級的時基處理 : uC/OS-III 有時基任務(wù),時基 ISR 觸發(fā)時基任務(wù)。 uC/OS-III 使用了哈希列表結(jié)構(gòu),可以大大減少處理延時和任務(wù)超時所產(chǎn)生的開支。
用戶可定義的鉤子函數(shù): uC/OS-III 允許程序員定義 hook 函數(shù) ,hook 函數(shù)被 uC/OS-III 調(diào)用。 hook 函數(shù)允許用戶擴(kuò)展 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 ( 探針 ) 在運行時顯示信息。
對象名稱 : 每個 uC/OS-III 的內(nèi)核對象有一個相關(guān)聯(lián)的名字 。 這樣就能很容易的識別出對象所指定的作用 。 分配一個 ASCII 碼的名字給任務(wù) 、 信號量 、 互斥信號量 、 事件標(biāo)志組 、 消息隊列 、 內(nèi)存塊 、 軟件定時器。對象的名字長度沒有限制,但是必須以空字符結(jié)束。
0.png (66.98 KB, 下載次數(shù): 186)
下載附件
2018-4-26 16:09 上傳
完整的pdf格式文檔51黑下載地址(共316頁):
uCOS-III中文說明文檔.pdf
(5.31 MB, 下載次數(shù): 907)
2018-4-26 08:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|