<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > uC/OS-II詳細介紹-百度百科

uC/OS-II詳細介紹-百度百科

作者: 時(shí)間:2010-06-10 來(lái)源:網(wǎng)絡(luò ) 收藏

uC/OS-II簡(jiǎn)介

  u C / O S 是一種公開(kāi)源代碼、結構小巧、具有可剝奪內核的操作系統,商業(yè)應用需要付費。   μC/OS-II 的前身是μC/OS,最早出自于1992 年美國嵌入式系統專(zhuān)家Jean J.Labrosse 在《嵌入式系統編程》雜志的5 月和6 月刊上刊登的文章連載,并把μC/OS 的源碼發(fā)布在該雜志的B B S 上。  

 μC/OS 和μC/OS-II 是專(zhuān)門(mén)為計算機的嵌入式應用設計的, 絕大部分代碼是用C語(yǔ)言編寫(xiě)的。CPU 硬件相關(guān)部分是用匯編語(yǔ)言編寫(xiě)的、總量約200行的匯編語(yǔ)言部分被壓縮到最低限度,為的是便于到任何一種其它的CPU 上。用戶(hù)只要有標準的ANSI 的C交叉編譯器,有匯編器、連接器等軟件工具,就可以將μC/OS-II嵌人到開(kāi)發(fā)的產(chǎn)品中。μC/OS-II 具有執行效率高、占用空間小、性能優(yōu)良和可擴展性強等特點(diǎn), 最小內核可編譯至 2KB 。μC/OS-II 已經(jīng)到了幾乎所有知名的CPU 上。

 嚴格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統內核,它僅僅包含了任務(wù),任務(wù)管理,時(shí)間管理,內存管理和任務(wù)間的通信和同步等基本功能。沒(méi)有提供輸入輸出管理,文件系統,網(wǎng)絡(luò )等額外的服務(wù)。但由于uC/OS-II良好的可擴展性和源碼開(kāi)放,這些非必須的功能完全可以由用戶(hù)自己根據需要分別實(shí)現。   uC/OS-II目標是實(shí)現一個(gè)基于優(yōu)先級的搶占式的實(shí)時(shí)內核,并在這個(gè)內核之上提供最基本的系統服務(wù),如信號量,郵箱,消息隊列,內存管理,中斷管理等。


任務(wù)管理

  uC/OS-II 中最多可以支持64 個(gè)任務(wù),分別對應優(yōu)先級0~63,其中0 為最高優(yōu)先級。63為最低級,系統保留了4個(gè)最高優(yōu)先級的任務(wù)和4個(gè)最低優(yōu)先級的任務(wù),所有用戶(hù)可以使用的任務(wù)數有56個(gè)。  

 uC/OS-II提供了任務(wù)管理的各種函數調用,包括創(chuàng )建任務(wù),刪除任務(wù),改變任務(wù)的優(yōu)先級,任務(wù)掛起和恢復等。  

 系統初始化時(shí)會(huì )自動(dòng)產(chǎn)生兩個(gè)任務(wù):一個(gè)是空閑任務(wù),它的優(yōu)先級最低,該任務(wù)僅給一個(gè)整形變量做累加運算;另一個(gè)是系統任務(wù),它的優(yōu)先級為次低,該任務(wù)負責統計當前cpu的利用率。


時(shí)間管理

  uC/OS-II的時(shí)間管理是通過(guò)定時(shí)中斷來(lái)實(shí)現的,該定時(shí)中斷一般為10毫秒或100毫秒發(fā)生一次,時(shí)間頻率取決于用戶(hù)對硬件系統的定時(shí)器編程來(lái)實(shí)現。中斷發(fā)生的時(shí)間間隔是固定不變的,該中斷也成為一個(gè)時(shí)鐘節拍。   

uC/OS-II要求用戶(hù)在定時(shí)中斷的服務(wù)程序中,調用系統提供的與時(shí)鐘節拍相關(guān)的系統函數,例如中斷級的任務(wù)切換函數,系統時(shí)間函數。


內存管理

  在A(yíng)NSI C中是使用malloc和free兩個(gè)函數來(lái)動(dòng)態(tài)分配和釋放內存。但在嵌入式實(shí)時(shí)系統中,多次這樣的錯作會(huì )導致內存碎片,且由于內存管理算法的原因,malloc和free的執行時(shí)間也是不確定。

  uC/OS-II中把連續的大快內存按分區管理。每個(gè)分區中包含整數個(gè)大小相同的內存塊,但不同分區之間的內存快大小可以不同。用戶(hù)需要動(dòng)態(tài)分配內存時(shí),系統選擇一個(gè)適當的分區,按塊來(lái)分配內存。釋放內存時(shí)將該塊放回它以前所屬的分區,這樣能有效解決碎片問(wèn)題,同時(shí)執行時(shí)間也是固定的。
 

任務(wù)間通信與同步

  對一個(gè)多任務(wù)的操作系統來(lái)說(shuō),任務(wù)間的通信和同步是必不可少的。uC/OS-II中提供了4中同步對象,分別是信號量,郵箱,消息隊列和事件。所有這些同步對象都有創(chuàng )建,等待,發(fā)送,查詢(xún)的接口用于實(shí)現進(jìn)程間的通信和同步。


任務(wù)

  uC/OS-II 采用的是可剝奪型實(shí)時(shí)多任務(wù)內核??蓜儕Z型的實(shí)時(shí)內核在任何時(shí)候都運行就緒了的最高優(yōu)先級的任務(wù)。  
 
uC/os-II的任務(wù)調度是完全基于任務(wù)優(yōu)先級的搶占式調度,也就是最高優(yōu)先級的任務(wù)一旦處于就緒狀態(tài),則立即搶占正在運行的低優(yōu)先級任務(wù)的處理器資源。為了簡(jiǎn)化系統設計,uC/OS-II規定所有任務(wù)的優(yōu)先級不同,因為任務(wù)的優(yōu)先級也同時(shí)唯一標志了該任務(wù)本身。  
 
任務(wù)調度將在以下情況下發(fā)生:  
 
1) 高優(yōu)先級的任務(wù)因為需要某種臨界資源,主動(dòng)請求掛起,讓出處理器,此時(shí)將調度就緒狀態(tài)的低優(yōu)先級任務(wù)獲得執行,這種調度也稱(chēng)為任務(wù)級的上下文切換。   
2) 高優(yōu)先級的任務(wù)因為時(shí)鐘節拍到來(lái),在時(shí)鐘中斷的處理程序中,內核發(fā)現高優(yōu)先級任務(wù)獲得了執行條件(如休眠的時(shí)鐘到時(shí)),則在中斷態(tài)直接切換到高優(yōu)先級任務(wù)執行。這種調度也稱(chēng)為中斷級的上下文切換。   這兩種調度方式在uC/OS-II的執行過(guò)程中非常普遍,一般來(lái)說(shuō)前者發(fā)生在系統服務(wù)中,后者發(fā)生在時(shí)鐘中斷的服務(wù)程序中。
  
調度工作的內容可以分為兩部分:最高優(yōu)先級任務(wù)的尋找和任務(wù)切換。其最高優(yōu)先級任務(wù)的尋找是通過(guò)建立就緒任務(wù)表來(lái)實(shí)現的。u C / O S 中的每一個(gè)任務(wù)都有獨立的堆??臻g,并有一個(gè)稱(chēng)為任務(wù)控制塊TCB(Task Control Block)的數據結構,其中第一個(gè)成員變量就是保存的任務(wù)堆棧指針。任務(wù)調度模塊首先用變量OSTCBHighRdy 記錄當前最高級就緒任務(wù)的TCB 地址,然后調用OS_TASK_SW()函數來(lái)進(jìn)行任務(wù)切換。


μC/OS-II的組成部分  

 μC/OS-II可以大致分成核心、任務(wù)處理、時(shí)間處理、任務(wù)同步與通信,CPU的等5個(gè)部分。
  
1) 核心部分(OSCore.c)   是操作系統的處理核心,包括操作系統初始化、操作系統運行、中斷進(jìn)出的前導、時(shí)鐘節拍、任務(wù)調度、事件處理等多部分。能夠維持系統基本工作的部分都在這里。  
 2) 任務(wù)處理部分(OSTask.c)   任務(wù)處理部分中的內容都是與任務(wù)的操作密切相關(guān)的。包括任務(wù)的建立、刪除、掛起、恢復等等。因為μC/OS-II是以任務(wù)為基本單位調度的,所以這部分內容也相當重要。  
 3) 時(shí)鐘部分(OSTime.c)   μC/OS-II中的最小時(shí)鐘單位是timetick(時(shí)鐘節拍)。任務(wù)延時(shí)等操作是在這里完成的。  
 4) 任務(wù)同步和通信部分   為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標志等部分;主要用于任務(wù)間的互相聯(lián)系和對臨界資源的訪(fǎng)問(wèn)。  
 5) 與CPU的接口部分   是指μC/OS-II針對所使用的CPU的移植部分。由于μC/OS-II是一個(gè)通用性的操作系統,所以對于關(guān)鍵問(wèn)題上的實(shí)現,還是需要根據具體CPU的具體內容和要求作相應的移植。這部分內容由于牽涉到SP等系統指針,所以通常用匯編語(yǔ)言編寫(xiě)。主要包括中斷級任務(wù)切換的底層實(shí)現、任務(wù)級任務(wù)切換的底層實(shí)現、時(shí)鐘節拍的產(chǎn)生和處理、中斷的相關(guān)處理部分等內容。

本文引用地址:http://dyxdggzs.com/article/257948.htm


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>