提高篇嵌入式操作系統(tǒng)_第1頁(yè)
提高篇嵌入式操作系統(tǒng)_第2頁(yè)
提高篇嵌入式操作系統(tǒng)_第3頁(yè)
提高篇嵌入式操作系統(tǒng)_第4頁(yè)
提高篇嵌入式操作系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩154頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

提高篇嵌入式操作系統(tǒng)第1頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式實(shí)時(shí)操作系統(tǒng)第2頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月一實(shí)時(shí)系統(tǒng)簡(jiǎn)介 一般而言具有實(shí)時(shí)性能的控制系統(tǒng)是實(shí)時(shí)系統(tǒng)。實(shí)時(shí)表示一個(gè)非常短的時(shí)間間隔“timegap”(也可以認(rèn)為表示時(shí)間框架“timeframe”或者時(shí)間窗口“timewindow”),具有“立即”之含義。當(dāng)計(jì)算機(jī)進(jìn)行實(shí)時(shí)處理時(shí),要求在接收到數(shù)據(jù)的同時(shí)執(zhí)行操作并輸出計(jì)算結(jié)果,不能超出計(jì)算機(jī)系統(tǒng)所能容忍的時(shí)限。第3頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)的定義IEEE(美國(guó)電氣電子工程師協(xié)會(huì))給出的實(shí)時(shí)系統(tǒng)定義是“那些正確性不僅取決于計(jì)算的邏輯結(jié)果,也取決于產(chǎn)生結(jié)果所花費(fèi)的時(shí)間的系統(tǒng)”。這就是說(shuō),實(shí)時(shí)系統(tǒng)運(yùn)算能力具有及時(shí)與正確的雙重特征。給出的實(shí)時(shí)系統(tǒng)(Real-TimeSystem)定義是:對(duì)外來(lái)事件能在限定的響應(yīng)時(shí)間內(nèi)做出預(yù)定質(zhì)量處理的計(jì)算機(jī)系統(tǒng)。第4頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)的體系結(jié)構(gòu)實(shí)時(shí)系統(tǒng)的體系結(jié)構(gòu)必須滿足:高運(yùn)算速度高速的中斷處理高的I/O吞吐率合理的處理器和I/O設(shè)備的拓?fù)溥B接高速可靠的和有時(shí)間約束的通信體系結(jié)構(gòu)支持的出錯(cuò)處理,體系結(jié)構(gòu)支持的調(diào)度體系結(jié)構(gòu)支持的操作系統(tǒng),體系結(jié)構(gòu)支持的實(shí)時(shí)語(yǔ)言特性。第5頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)的調(diào)度理論。由于實(shí)時(shí)系統(tǒng)應(yīng)用的特殊性,以往通用系統(tǒng)中以大吞吐量為目標(biāo)的調(diào)度算法必須改進(jìn)以適應(yīng)實(shí)時(shí)應(yīng)用的需要。主要要求是滿足時(shí)間的正確性,然后提供高度動(dòng)態(tài)的,滿足在線需求的,強(qiáng)適應(yīng)性的實(shí)時(shí)調(diào)度。實(shí)時(shí)操作系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。在設(shè)計(jì)上首要目標(biāo)是提供保證實(shí)時(shí)性的方法,包括一系列的經(jīng)典問(wèn)題的針對(duì)實(shí)時(shí)系統(tǒng)的解決方案。實(shí)現(xiàn)上要求操作系統(tǒng)的低開(kāi)銷,而且必須保證內(nèi)核以及其他關(guān)鍵部件的可重入性。第6頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)的主要特點(diǎn)及時(shí)響應(yīng)外部發(fā)生的隨機(jī)任務(wù)請(qǐng)求在規(guī)定的時(shí)間范圍內(nèi)完成任務(wù)

任務(wù)執(zhí)行的時(shí)間限制類型截止時(shí)間任務(wù)執(zhí)行時(shí)間第7頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月截止時(shí)間:一個(gè)時(shí)間界限。它要求一個(gè)任務(wù)在該時(shí)刻之前完成任務(wù)執(zhí)行時(shí)間一個(gè)任務(wù)從啟動(dòng)到完成所花費(fèi)的時(shí)間。分為平均任務(wù)執(zhí)行時(shí)間和最壞任務(wù)執(zhí)行時(shí)間,實(shí)時(shí)系統(tǒng)中一般指最壞任務(wù)執(zhí)行時(shí)間,考慮了可能的等待、阻塞等最不利的情況。任務(wù)余量:截止時(shí)間減去任務(wù)執(zhí)行時(shí)間所得的值,反映了系統(tǒng)工作的從容程度。緊時(shí)間約束在滿足任務(wù)時(shí)限的同時(shí),留給系統(tǒng)的時(shí)間比較緊張。由任務(wù)的余量小而引起。松時(shí)間約束:與緊時(shí)限概念相反,指在滿足任務(wù)時(shí)限的同時(shí),留給系統(tǒng)的時(shí)間比較寬松第8頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)的關(guān)鍵因素計(jì)算機(jī)系統(tǒng)的實(shí)時(shí)性能主要由操作系統(tǒng)和運(yùn)行在操作系統(tǒng)上的應(yīng)用軟件決定,對(duì)于無(wú)操作系統(tǒng)的計(jì)算機(jī)則由控制程序決定。具有實(shí)時(shí)性能的操作系統(tǒng)稱為實(shí)時(shí)操作系統(tǒng)(Real-TimeOperatingSystem,RTOS)第9頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)與非實(shí)時(shí)系統(tǒng)的例子實(shí)時(shí)系統(tǒng)典型例子民用飛機(jī)的導(dǎo)航系統(tǒng)汽車的防剎車抱死系統(tǒng)非實(shí)時(shí)系統(tǒng)典型例子銀行數(shù)據(jù)查詢處理系統(tǒng)視頻播放系統(tǒng)圖像掃描文字識(shí)別系統(tǒng)第10頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月提高實(shí)時(shí)性能的因素盡量采用硬件處理優(yōu)化微處理器的中斷機(jī)制采用簡(jiǎn)單的單線程循環(huán)程序采用基于實(shí)時(shí)操作系統(tǒng)的復(fù)雜多線程操作

可見(jiàn)硬件加速和RTOS應(yīng)用是提高實(shí)時(shí)系統(tǒng)的兩個(gè)主要因素以下幾種途徑常常用來(lái)提高應(yīng)用系統(tǒng)實(shí)時(shí)性能第11頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)的屬性和指標(biāo)實(shí)時(shí)系統(tǒng)的兩個(gè)基本屬性可預(yù)測(cè)性和可靠性實(shí)時(shí)系統(tǒng)的實(shí)時(shí)性能主要根據(jù)其RTOS的三個(gè)主要指標(biāo)來(lái)衡量響應(yīng)時(shí)間(responsetime)吞吐量(throughput)生存時(shí)間(survivaltime)第12頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可預(yù)測(cè)性系統(tǒng)能夠?qū)?shí)時(shí)任務(wù)的執(zhí)行時(shí)間進(jìn)行判斷,確定是否能夠滿足任務(wù)的時(shí)限要求。嵌入式系統(tǒng)的兩個(gè)可預(yù)測(cè)性硬件延遲的可預(yù)測(cè)性、軟件系統(tǒng)的可預(yù)測(cè)性應(yīng)用程序的響應(yīng)時(shí)間是可預(yù)測(cè)的,即在有限時(shí)間內(nèi)完成必須的工作。操作系統(tǒng)的可預(yù)測(cè)性,即實(shí)時(shí)原語(yǔ)、調(diào)度函數(shù)等運(yùn)行開(kāi)銷應(yīng)是有界的以保證應(yīng)用程序執(zhí)行時(shí)間的有界性。資源約束指多個(gè)實(shí)時(shí)任務(wù)共享有限的資源時(shí),必須按照一定的資源訪問(wèn)控制協(xié)議進(jìn)行同步,以避免死鎖和高優(yōu)先級(jí)任務(wù)被低優(yōu)先級(jí)任務(wù)堵塞的時(shí)間(即優(yōu)先級(jí)反轉(zhuǎn)時(shí)間)不可預(yù)測(cè)。第13頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可靠性可靠性已成為衡量實(shí)時(shí)系統(tǒng)性能不可缺少的重要指標(biāo)。采用靜態(tài)分析和保留資源的方法及冗余配置,使關(guān)鍵任務(wù)的要求總能滿足,系統(tǒng)在最壞情況下能正常工作或避免損失一個(gè)系統(tǒng)的可靠性是由其組成元素共同決定的,這些元素包括硬件、板級(jí)開(kāi)發(fā)包、RTOS和應(yīng)用等。第14頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)與通用系統(tǒng)區(qū)別通用系統(tǒng)方便用戶管理計(jì)算機(jī)資源追求系統(tǒng)資源最大利用率實(shí)時(shí)系統(tǒng)調(diào)度的實(shí)時(shí)性響應(yīng)時(shí)間可確定性高可靠性第15頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月性能衡量對(duì)傳統(tǒng)的通用系統(tǒng)大的系統(tǒng)吞吐量合理的響應(yīng)速度對(duì)每個(gè)系統(tǒng)用戶相對(duì)公平的進(jìn)行計(jì)算資源的分配實(shí)時(shí)系統(tǒng)實(shí)時(shí)的數(shù)據(jù)吞吐取代了吞吐量對(duì)硬實(shí)時(shí)應(yīng)用的優(yōu)先響應(yīng)取代了恰當(dāng)?shù)姆磻?yīng)速度系統(tǒng)的計(jì)算資源和其他外設(shè)資源必須優(yōu)先滿足實(shí)時(shí)應(yīng)用的要求取代了公平第16頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月響應(yīng)時(shí)間計(jì)算機(jī)從識(shí)別一個(gè)外部事件到做出響應(yīng)的時(shí)間RTOS響應(yīng)時(shí)間的具體指標(biāo)是:中斷延遲時(shí)間(InterruptLatency)任務(wù)切換時(shí)間(TaskSwitchingLatency)第17頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月響應(yīng)時(shí)間TCloseINT+TDoISR+TSaveReg+TStartService TCloseINT

:關(guān)中斷的最長(zhǎng)時(shí)間

TDoISR:開(kāi)始執(zhí)行中斷服務(wù)子程序的第一條指令的時(shí)間

TSaveReg:保存CPU內(nèi)部寄存器的時(shí)間

TStartService:內(nèi)核進(jìn)入中斷服務(wù)函數(shù)的執(zhí)行時(shí)間計(jì)算機(jī)接收到中斷信號(hào)到操作系統(tǒng)作出響應(yīng),并完成換道轉(zhuǎn)入中斷服務(wù)程序的時(shí)間中斷延遲時(shí)間第18頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月響應(yīng)時(shí)間TtoDoBTaskTime–TtoPauseATaskTime TtoDoBTaskTime:開(kāi)始執(zhí)行B任務(wù)的時(shí)刻

TtoPauseATask

:暫停執(zhí)行A任務(wù)的時(shí)刻也就是CPU從停止一個(gè)任務(wù)執(zhí)行切換到執(zhí)行另一個(gè)任務(wù)所需要的時(shí)間任務(wù)切換時(shí)間第19頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月eCos嵌入式可配置操作系統(tǒng)內(nèi)核實(shí)時(shí)響應(yīng)時(shí)間參考數(shù)據(jù)硬件測(cè)試環(huán)境中斷延遲時(shí)間任務(wù)切換時(shí)間ARM7TDMI(20MHz)22.10ms49.14msStrongARM(221.2MHz)3.25ms1.85msIntelXcale(600MHz)1.87ms0.87ms第20頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月吞吐量生存時(shí)間指在指定時(shí)間內(nèi)系統(tǒng)可處理的事件總數(shù),例如通信控制器用每秒處理的字符數(shù)來(lái)表示他的吞吐量是輸入數(shù)據(jù)的有效等待時(shí)間。如果在這段時(shí)間內(nèi)系統(tǒng)能接收到輸入數(shù)據(jù),就能給出有用的輸出時(shí)間。否則,即使接收到數(shù)據(jù),也給不出有效的輸出數(shù)據(jù)第21頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)分類硬實(shí)時(shí)系統(tǒng)->災(zāi)難后果指應(yīng)用的時(shí)間需求能夠得到完全滿足,否則就造成重大安全事故,甚至造成重大的生命財(cái)產(chǎn)損失和生態(tài)破壞航空航天、軍事、核工業(yè)等軟實(shí)時(shí)系統(tǒng)->性能下降應(yīng)用雖提出時(shí)間需求,但實(shí)時(shí)任務(wù)偶爾違反這種需求對(duì)系統(tǒng)運(yùn)行及環(huán)境不會(huì)造成嚴(yán)重影響,如:視頻點(diǎn)播(Video-On-Demand,VOD)、監(jiān)控系統(tǒng)、信息采集系統(tǒng)等。按實(shí)時(shí)性分第22頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月硬實(shí)時(shí)系統(tǒng)和軟實(shí)時(shí)系統(tǒng)時(shí)限效益第23頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)系統(tǒng)的分類強(qiáng)實(shí)時(shí)系統(tǒng):其響應(yīng)時(shí)間在毫秒級(jí)或微秒級(jí)普通實(shí)時(shí)系統(tǒng):其響應(yīng)時(shí)間一般幾秒弱實(shí)時(shí)系統(tǒng):其響應(yīng)時(shí)間一般在數(shù)十秒按照響應(yīng)時(shí)間的快慢分類第24頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月實(shí)時(shí)過(guò)程控制系統(tǒng)系統(tǒng)實(shí)時(shí)地從外界獲得被控系統(tǒng)的當(dāng)前狀態(tài),進(jìn)行預(yù)定的處理,根據(jù)處理結(jié)果對(duì)外界被控系統(tǒng)進(jìn)行及時(shí)控制,使其處于要求的狀態(tài)下實(shí)時(shí)信息處理系統(tǒng)系統(tǒng)僅從外界系統(tǒng)中獲得當(dāng)前狀態(tài)并進(jìn)行相應(yīng)處理不直接控制外界系統(tǒng)的變化第25頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)中的基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第26頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第27頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月

前、后臺(tái)系統(tǒng)前后臺(tái)系統(tǒng)應(yīng)用程序是一個(gè)無(wú)限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺(tái)行為(background)。中斷服務(wù)程序處理異步事件,可以看成前臺(tái)行為(foreground)后臺(tái)也可以叫做任務(wù)級(jí)。前臺(tái)也叫中斷級(jí)。第28頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月中斷中斷數(shù)據(jù)采集處理數(shù)據(jù)處理鍵盤顯示打印傳統(tǒng)前后臺(tái)系統(tǒng)編程處理鍵盤RTOS數(shù)據(jù)采集處理數(shù)據(jù)顯示打印中斷基于RTOS編程

前后臺(tái)與操作系統(tǒng)第29頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月調(diào)度(Scheduler)內(nèi)核的主要職責(zé)之一,決定任務(wù)運(yùn)行的次序。基本的調(diào)度算法有先來(lái)先服務(wù)FCFS,優(yōu)先級(jí)法(Priority),輪轉(zhuǎn)法(Round-Robin)等。調(diào)度的基本方式有可剝奪型和不可剝奪型。多數(shù)實(shí)時(shí)內(nèi)核是基于優(yōu)先級(jí)調(diào)度的多種方法的復(fù)合。第30頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月臨界資源和代碼臨界區(qū)臨界資源指的是一段時(shí)間只允許一個(gè)進(jìn)程訪問(wèn)的資源。共享臨界資源的各個(gè)進(jìn)程必須互斥的訪問(wèn)臨界資源。它分為硬件臨界資源和軟件臨界資源。如打印機(jī)屬于硬件臨界資源而緩沖區(qū)和隊(duì)列屬于軟件臨界區(qū)。代碼臨界區(qū)指處理時(shí)不可分割的代碼。一旦這部分代碼開(kāi)始執(zhí)行,則不允許任何中斷介入,為確保臨界區(qū)代碼執(zhí)行,在進(jìn)入臨界區(qū)之前必須關(guān)中斷,執(zhí)行完臨界區(qū)代碼之后要立即開(kāi)中斷。第31頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月

代碼臨界區(qū)(CriticalSection)指一段不可分割的代碼,一旦執(zhí)行,不能被中斷。定義實(shí)現(xiàn)代碼臨界區(qū)的方法1、屏蔽中斷,通常在代碼執(zhí)行前關(guān)閉中斷,執(zhí)行后打開(kāi)中斷。2、通過(guò)信號(hào)量機(jī)制。第32頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第33頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月進(jìn)程1、行為的一個(gè)規(guī)則叫做程序,程序在處理器上執(zhí)行時(shí)所發(fā)生的活動(dòng)叫做進(jìn)程。2、進(jìn)程是可以與其它進(jìn)程并發(fā)執(zhí)行的計(jì)算部分。3、進(jìn)程是一個(gè)獨(dú)立的可以調(diào)度的活動(dòng)。第34頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月進(jìn)程1、進(jìn)程是程序的一次執(zhí)行過(guò)程,是一個(gè)動(dòng)態(tài)的概念,而程序是指令的有序集合,是靜態(tài)的概念。2、進(jìn)程具有生命期,從創(chuàng)建時(shí)存在,到撤銷時(shí)消失,其存在是暫時(shí)的,而程序是是靜態(tài)的,其存在可以是永久的。3、進(jìn)程具有結(jié)構(gòu)特征,由程序段、數(shù)據(jù)段、進(jìn)程控制塊三部分組成,而程序僅是指令的有序集合,是進(jìn)程的組成部分。4、進(jìn)程與程序之間不是一一對(duì)應(yīng)的關(guān)系。一個(gè)程序可同時(shí)運(yùn)行于不同的數(shù)據(jù)集合上,映射成多個(gè)進(jìn)程。進(jìn)程與程序之間的區(qū)別第35頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月線程

線程是進(jìn)程內(nèi)一個(gè)相對(duì)獨(dú)立的可調(diào)度的執(zhí)行單元實(shí)體。定義:引入線程的優(yōu)點(diǎn):(1)提高了程序并發(fā)執(zhí)行的程度,加快了系統(tǒng)的執(zhí)行速度。線程是比進(jìn)程粒度更小的調(diào)度單位。一個(gè)進(jìn)程可以有多個(gè)線程。(2)大大降低了系統(tǒng)的開(kāi)銷。線程不擁有自己的資源,只共享進(jìn)程的資源空間,創(chuàng)建、切換、撤銷的開(kāi)銷都很小。(3)提高了資源的利用率。(4)更好地為用戶提供服務(wù)。實(shí)現(xiàn)高質(zhì)量的人機(jī)交互。第36頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月線程線程與進(jìn)程的關(guān)系(1)線程是進(jìn)程的一個(gè)組成部分,進(jìn)程創(chuàng)建時(shí)一般只有一個(gè)線程,需要時(shí)可由這個(gè)線程創(chuàng)建其他線程。(2)一個(gè)進(jìn)程可以有多個(gè)線程,這些共享進(jìn)程的資源在進(jìn)程的空間中并發(fā)活動(dòng)。(3)線程使用的資源是進(jìn)程所分到的資源。(4)進(jìn)程切換的開(kāi)銷遠(yuǎn)大于線程切換的開(kāi)銷。第37頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)Task指擁有所有CPU資源的簡(jiǎn)單程序。任務(wù)即是一個(gè)進(jìn)程,UCOS-II是多任務(wù)的可搶占操作系統(tǒng),我們可以把一個(gè)復(fù)雜的事情分成多個(gè)簡(jiǎn)單的子任務(wù),每個(gè)作為一個(gè)進(jìn)程運(yùn)行,這樣可以簡(jiǎn)化復(fù)雜程序的設(shè)計(jì)。實(shí)時(shí)系統(tǒng)中的大部分任務(wù)是周期的,體現(xiàn)在編程上每個(gè)任務(wù)則是一個(gè)典型的無(wú)限循環(huán)。任務(wù)的狀態(tài):休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)、被中斷態(tài)。第38頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月等待狀態(tài):任務(wù)在等待某一事件的發(fā)生還不能運(yùn)行的狀態(tài);被中斷狀態(tài):因?yàn)橹袛喾?wù)程序正在執(zhí)行而得不到CPU控制權(quán)的狀態(tài);睡眠狀態(tài):任務(wù)駐留在程序空間之中,還沒(méi)有交給μC/OS-Ⅱ管理的狀態(tài),而將任務(wù)交給μC/OS-Ⅱ管理是通過(guò)調(diào)用函數(shù)OSTaskCreate()實(shí)現(xiàn)的;就緒狀態(tài):任務(wù)已經(jīng)準(zhǔn)備好,可以運(yùn)行了,但由于該任務(wù)的優(yōu)先級(jí)比正在運(yùn)行的任務(wù)的優(yōu)先級(jí)低,還暫時(shí)不能運(yùn)行的狀態(tài)。在μC/OS-Ⅱ中,當(dāng)任務(wù)一旦建立,這個(gè)任務(wù)就進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行;運(yùn)行狀態(tài):任務(wù)掌握了CPU的控制權(quán),正在運(yùn)行中的狀態(tài)。任務(wù)的狀態(tài)運(yùn)行睡眠等待被中斷就緒任務(wù)狀態(tài)描述任務(wù)Task第39頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)Task任務(wù)=程序代碼+堆棧+任務(wù)控制塊任務(wù)控制塊保存著所有與進(jìn)程相關(guān)的信息,包括堆棧的指針和優(yōu)先級(jí)任務(wù)的堆棧則用來(lái)保存任務(wù)分配的局部變量,此外,當(dāng)任務(wù)被切換出去時(shí),堆棧還保存當(dāng)前寄存器的值第40頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月多任務(wù)

多任務(wù)是指用戶可以在同一時(shí)間內(nèi)運(yùn)行多個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序是一個(gè)任務(wù)。多任務(wù)運(yùn)行的實(shí)現(xiàn)實(shí)際上是靠CPU(中央處理單元)在許多任務(wù)之間轉(zhuǎn)換、調(diào)度。第41頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù):example手持?jǐn)?shù)據(jù)采集終端的打印CreateTASK(myprintf,priority);voidmyprintf(){for(;;){

等待接收隊(duì)列信息;往打印機(jī)發(fā)送打印信息;

}}第42頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第43頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月

任務(wù)切換(ContextSwitch)當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí),保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài),即保存CPU寄存器中的全部?jī)?nèi)容。這些內(nèi)容保存在任務(wù)自己的棧區(qū)之中。入棧工作完成以后,就把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀態(tài)從任務(wù)的棧中重新裝入CPU的寄存器,并開(kāi)始下一個(gè)任務(wù)的運(yùn)行。這個(gè)過(guò)程就稱為任務(wù)切換。第44頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月死鎖是指各并發(fā)任務(wù)彼此等待對(duì)方所擁有的資源,且這些并發(fā)任務(wù)在得到對(duì)方的資源之前不會(huì)釋放自己所擁有的資源,從而造成大家都想得到資源而又都得不到資源,各并發(fā)任務(wù)不能繼續(xù)向前推進(jìn)的狀態(tài)。第45頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月防止發(fā)生死鎖的方法內(nèi)核大多允許用戶在申請(qǐng)信號(hào)量時(shí)定義等待超時(shí),以化解死鎖。等待時(shí)間超過(guò)了某一確定值,信號(hào)量還是無(wú)效狀態(tài)時(shí),就會(huì)返回某種形式的出現(xiàn)超時(shí)錯(cuò)誤的代碼。這個(gè)出錯(cuò)代碼告知該任務(wù),不是得到了資源使用權(quán),而是系統(tǒng)錯(cuò)誤。死鎖一般發(fā)生在大型多任務(wù)系統(tǒng)中,在嵌入式系統(tǒng)中不易出現(xiàn)。第46頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月不可剝奪型內(nèi)核第47頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月不可剝奪型內(nèi)核1、任務(wù)在運(yùn)行過(guò)程中,中斷來(lái)了。2、如果此時(shí)中斷是開(kāi)著的,CPU由中斷向量進(jìn)入中斷服務(wù)子程序。3、中斷服務(wù)子程序做事件處理,使一個(gè)有更高級(jí)的任務(wù)進(jìn)入就緒態(tài)。4、中斷服務(wù)完成以后,中斷返回指令,CPU回到原來(lái)被中斷的任務(wù)。5、接著執(zhí)行該任務(wù)被中斷了的代碼。6、直到該任務(wù)完成,調(diào)用一個(gè)內(nèi)核服務(wù)函數(shù)以釋放CPU控制權(quán)。7、內(nèi)核將控制權(quán)交給那個(gè)優(yōu)先級(jí)更高的、并已進(jìn)入就緒態(tài)的任務(wù)這個(gè)優(yōu)先級(jí)更高的任務(wù)才開(kāi)始處理中斷服務(wù)程序標(biāo)識(shí)的事件。

第48頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可剝奪型內(nèi)核第49頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可剝奪型內(nèi)核1、任務(wù)在運(yùn)行過(guò)程中,中斷來(lái)了。2、如果此時(shí)中斷是開(kāi)著的,CPU由中斷向量進(jìn)入中斷服務(wù)子程序。3、中斷服務(wù)子程序做事件處理,使一個(gè)有更高級(jí)的任務(wù)進(jìn)入就緒態(tài)。當(dāng)ISR完成時(shí),進(jìn)入內(nèi)核提供的一種服務(wù)(一個(gè)內(nèi)核提供的函數(shù)被調(diào)用)。4、該函數(shù)知道一個(gè)更重要的任務(wù)進(jìn)入就緒態(tài),于是內(nèi)核進(jìn)行任務(wù)切換,執(zhí)行更重要的任務(wù)的代碼。5.當(dāng)該任務(wù)完成后,內(nèi)核提供另一個(gè)函數(shù)。6.該函數(shù)使得內(nèi)核看到了低優(yōu)先級(jí)的任務(wù)要運(yùn)行,于是發(fā)生另一次任務(wù)切換,被中斷了的任務(wù)繼續(xù)運(yùn)行。

第50頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月使用占先式內(nèi)核,最高優(yōu)先級(jí)的任務(wù)什么時(shí)候可以執(zhí)行以及什么時(shí)候可以得到CPU的控制權(quán)是可知的。使用占先式內(nèi)核使得任務(wù)級(jí)響應(yīng)時(shí)間得以最優(yōu)化。使用占先式內(nèi)核時(shí),應(yīng)用程序不應(yīng)該直接使用不可重入型函數(shù)??蓜儕Z型內(nèi)核第51頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)中的基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第52頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可重入性(Reentrant)

可重入型函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞??芍厝胄秃瘮?shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會(huì)丟失。第53頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可重入性(Reentrant)strcpy(char*dest,char*src){while(*src!=‘\0’){*dest=*src;dest++;src++;}*dest=‘\0’;}----------可重入函數(shù)第54頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月可重入性(Reentrant)intTemp;voidswap(int*x,int*y){Temp=*x;*x=*y;*y=Temp;}----------不可重入函數(shù)第55頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月使函數(shù)具有可重入性的方法把temp定義為局部變量;調(diào)用函數(shù)之前關(guān)中斷,調(diào)用后再開(kāi)中斷;用信號(hào)量禁止該函數(shù)在使用過(guò)程中被再次調(diào)用。第56頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月優(yōu)先級(jí)(Priority)

每個(gè)任務(wù)按其重要性被賦予一定的優(yōu)先級(jí)。靜態(tài)優(yōu)先級(jí)與動(dòng)態(tài)優(yōu)先級(jí)?;趦?yōu)先級(jí)的系統(tǒng)會(huì)出現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)(倒置)的問(wèn)題,一個(gè)好的實(shí)時(shí)內(nèi)核應(yīng)該提供解決倒置的方法。第57頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月優(yōu)先級(jí)反轉(zhuǎn)第58頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月優(yōu)先級(jí)列表任務(wù)1任務(wù)2任務(wù)3高低共享資源

假設(shè)任務(wù)1和任務(wù)3共享一個(gè)資源,任務(wù)2為優(yōu)先級(jí)介于任務(wù)1和任務(wù)3之間的一個(gè)與該共享資源無(wú)關(guān)任務(wù),分析優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題。任務(wù)2優(yōu)先級(jí)高于任務(wù)3而進(jìn)入運(yùn)行狀態(tài)任務(wù)1申請(qǐng)共享資源而處于等待狀態(tài)此時(shí),雖然任務(wù)1比任務(wù)2優(yōu)先級(jí)更高,但卻在任務(wù)2之后運(yùn)行,這種現(xiàn)象就是優(yōu)先級(jí)反轉(zhuǎn)。任務(wù)3得到共享資源而處于運(yùn)行狀態(tài)優(yōu)先級(jí)反轉(zhuǎn)第59頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題的解決—優(yōu)先級(jí)繼承優(yōu)先級(jí)繼承(Priorityinheritance):為防止發(fā)生優(yōu)先級(jí)反轉(zhuǎn),內(nèi)核能自動(dòng)變換任務(wù)的優(yōu)先級(jí)。將占用共享資源的低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)提升到略高于等待共享資源的高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)。這個(gè)略高于高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)稱為:優(yōu)先級(jí)繼承優(yōu)先級(jí)(PriorityInheritancePriority,PIP)第60頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月優(yōu)先級(jí)列表優(yōu)先級(jí)繼承任務(wù)1任務(wù)2任務(wù)3高低共享資源任務(wù)3共享資源

假設(shè)任務(wù)1和任務(wù)3共享一個(gè)資源,定義優(yōu)先級(jí)繼承優(yōu)先級(jí),任務(wù)2為優(yōu)先級(jí)介于任務(wù)1和任務(wù)3之間的一個(gè)與該共享資源無(wú)關(guān)任務(wù)。任務(wù)2優(yōu)先級(jí)不夠高無(wú)法獲得CPU任務(wù)1申請(qǐng)共享資源而處于等待狀態(tài)任務(wù)3此時(shí),任務(wù)2無(wú)法在任務(wù)1之前得到運(yùn)行,不發(fā)生優(yōu)先級(jí)反轉(zhuǎn)共享資源任務(wù)1任務(wù)3獲得CPU,且優(yōu)先級(jí)升到優(yōu)先級(jí)繼承優(yōu)先級(jí)任務(wù)1獲得CPU優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題的解決——優(yōu)先級(jí)繼承第61頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)中的基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第62頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月事件一個(gè)任務(wù)或者中斷服務(wù)子程序可以通過(guò)內(nèi)核服務(wù)來(lái)向另外的任務(wù)發(fā)信號(hào),這里所有的信號(hào)被看作事件(Event)。包括信號(hào)量、消息郵箱、消息隊(duì)列。第63頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月事件——信號(hào)量信號(hào)量是一種程序間的約定機(jī)制,這種約定決定哪個(gè)程序(任務(wù))可以執(zhí)行。信號(hào)量像是通行證,且通行證的數(shù)目是有限的。任務(wù)要運(yùn)行下去,要先拿到通行證。如果信號(hào)量已被別的任務(wù)占用,則該任務(wù)只得被掛起,直到信號(hào)量被當(dāng)前使用者釋放掉。第64頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月

我們知道酒店的桌子數(shù)是固定的,因此可以這樣理解其最大桌子數(shù)就是計(jì)數(shù)器的初值,假設(shè)一人占用一張桌子,因此每進(jìn)去一人,計(jì)數(shù)器就會(huì)自動(dòng)減1,而只有出去一人時(shí)計(jì)數(shù)器才會(huì)自動(dòng)加1。即就是說(shuō),如果計(jì)數(shù)器大于0,就可以進(jìn)去吃飯,否則只好等待有人出來(lái)才能進(jìn)去,這種計(jì)數(shù)信號(hào)就是信號(hào)量。酒店人計(jì)數(shù)器(能容納的人數(shù))3210人人人禁止其它客人進(jìn)入人沒(méi)有空位,不能再容納客人有空位,能再容納1位客人事件——信號(hào)量第65頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月事件——信號(hào)量初始化,也可稱做建立;等信號(hào),也可稱做掛起;給信號(hào)或發(fā)信號(hào)。信號(hào)量初始化時(shí)要給信號(hào)量賦初值,等待信號(hào)量的任務(wù)表應(yīng)清為空。對(duì)信號(hào)量只能實(shí)施三種操作第66頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月事件——消息郵箱通過(guò)內(nèi)核服務(wù)可以給任務(wù)發(fā)送消息。用一個(gè)指針型變量,通過(guò)內(nèi)核服務(wù),一個(gè)任務(wù)或一個(gè)中斷服務(wù)程序可以把一則消息(即一個(gè)指針)放到郵箱里去。同樣,一個(gè)或多個(gè)任務(wù)可以通過(guò)內(nèi)核服務(wù)接收這則消息。用來(lái)傳遞消息緩沖區(qū)指針的數(shù)據(jù)結(jié)構(gòu)叫做消息郵箱。第67頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月

消息是任務(wù)之間的一種通信手段,當(dāng)同步過(guò)程需要傳輸具體內(nèi)容時(shí)就不能使用信號(hào)量,此時(shí)可以選擇消息郵箱,即通過(guò)內(nèi)核服務(wù)可以給任務(wù)發(fā)送帶具體內(nèi)容的消息。

通過(guò)上述圖解可知,用來(lái)傳遞消息緩沖區(qū)指針的數(shù)據(jù)結(jié)構(gòu)就是消息郵箱。消息緩存區(qū)消息郵箱PCPC一個(gè)郵箱只能存放一個(gè)消息指針事件——消息郵箱第68頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月事件——消息隊(duì)列消息隊(duì)列用于給任務(wù)發(fā)消息。通過(guò)內(nèi)核提供的服務(wù),任務(wù)或中斷服務(wù)子程序可以將一條消息放入消息隊(duì)列。同樣,一個(gè)或多個(gè)任務(wù)可以通過(guò)內(nèi)核服務(wù)從消息隊(duì)列中得到消息。通常,消息隊(duì)列傳遞的是一個(gè)指針,以便任務(wù)可以通過(guò)它發(fā)送和接收任意類型數(shù)據(jù)(即消息,也就是指針指向的內(nèi)容)。第69頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月消息郵箱:實(shí)際上就是個(gè)數(shù)據(jù)結(jié)構(gòu),里面有個(gè)成員變量是個(gè)指針,該指針指向一條消息。消息隊(duì)列:和消息郵箱基本相同,只是它可以放入多條消息,而郵箱通常只有一條消息。事件——消息隊(duì)列第70頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月互斥(mutualexclusion)資源的使用必須獨(dú)占,叫做互斥。解決辦法:

●禁止中斷(關(guān)中斷)

●禁止搶占(禁止做任務(wù)切換)

●利用信號(hào)量

●測(cè)試并置位第71頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月禁止中斷voidFunction(void){OS_ENTER_CRITICAL();//宏調(diào)用,關(guān)中斷

/*在這里處理共享數(shù)據(jù)*/

OS_EXIT_CRITICAL();//宏調(diào)用,開(kāi)中斷}第72頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月禁止搶占voidFunction(void){OSSchedLock();//內(nèi)核函數(shù),調(diào)度上鎖

/*在這里處理共享數(shù)據(jù)(中斷是開(kāi)著的)*/OSSchedUnlock();//內(nèi)核函數(shù),調(diào)度解鎖}注意:這種辦法只能保證多個(gè)任務(wù)之間的互斥,不能保證任務(wù)與中斷服務(wù)程序之間的互斥第73頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月同步一個(gè)工作的完成需要多個(gè)任務(wù)或者多個(gè)任務(wù)與多個(gè)中斷共同完成,它們之間必須互相配合、協(xié)調(diào)動(dòng)作,甚至交換信息,這就要用到同步技術(shù)。任務(wù)之間這種制約性的合作運(yùn)行機(jī)制叫做任務(wù)間的同步。系統(tǒng)中是依靠任務(wù)與任務(wù)之間相互發(fā)送消息來(lái)保證同步。定義同步方法信號(hào)量、事件標(biāo)志組、消息郵箱、消息隊(duì)列第74頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月嵌入式操作系統(tǒng)中的基本概念前后臺(tái)系統(tǒng)調(diào)度臨界區(qū)進(jìn)程與線程任務(wù)與多任務(wù)任務(wù)切換死鎖不可剝奪型內(nèi)核可剝奪型內(nèi)核可重入性優(yōu)先級(jí)反轉(zhuǎn)事件互斥同步對(duì)存儲(chǔ)器要求第75頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月對(duì)存儲(chǔ)器的要求

代碼量=應(yīng)用程序代碼+內(nèi)核代碼

RAM總需求=應(yīng)用程序的RAM需求+(任務(wù)棧需求+最大中斷嵌套棧需求)*任務(wù)數(shù)第76頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月使用RTOS的得失失更方便開(kāi)發(fā)復(fù)雜系統(tǒng)(通過(guò)將復(fù)雜任務(wù)分解為簡(jiǎn)單子任務(wù),且每個(gè)任務(wù)的開(kāi)發(fā)相對(duì)獨(dú)立,邏輯關(guān)系簡(jiǎn)單);提供更好的實(shí)時(shí)性,更強(qiáng)大的功能。運(yùn)行操作系統(tǒng)本身需要占用一定的RAM,操作系統(tǒng)代碼也要占用一定程序ROM(flash);

此外,運(yùn)行內(nèi)核也會(huì)需要一定的CPU時(shí)間得第77頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月什么是實(shí)時(shí)系統(tǒng)?什么是程序的可重入性?什么是事件?什么是前后臺(tái)系統(tǒng)?程序、進(jìn)程和線程的區(qū)別?解釋一下信號(hào)量?什么叫消息郵箱?互斥是什么意思?作業(yè)第78頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月內(nèi)容uCOS-II操作系統(tǒng)簡(jiǎn)介uCOS-II操作系統(tǒng)內(nèi)核結(jié)構(gòu)uCOS-II操作系統(tǒng)任務(wù)管理uCOS-II操作系統(tǒng)內(nèi)存管理uCOS-II操作系統(tǒng)時(shí)間管理uCOS-II操作系統(tǒng)任務(wù)間的通訊uCOS-II操作系統(tǒng)移植第79頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS-II簡(jiǎn)介1、uC/OS-II是一個(gè)簡(jiǎn)單、高效的嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核。2、支持x86、ARM、PowerPC、MIPS等眾多體系結(jié)構(gòu)。3、可從網(wǎng)站上獲得全部源碼及其在各種體系結(jié)構(gòu)平臺(tái)上的移植范例。1、uC/OS-II內(nèi)核具有可搶占的實(shí)時(shí)多任務(wù)調(diào)度功能。2、提供了許多系統(tǒng)服務(wù),如信號(hào)量、消息隊(duì)列、郵箱、內(nèi)存管理、時(shí)間函數(shù)等。3、這些功能可以根據(jù)不同的需求進(jìn)行裁減。第80頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月μC/OS-II的各種商業(yè)應(yīng)用全世界有數(shù)百種產(chǎn)品在應(yīng)用:醫(yī)療器械移動(dòng)電話路由器工業(yè)控制GPS導(dǎo)航系統(tǒng)智能儀器更多第81頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS-II簡(jiǎn)介

μC/OS和μC/OS-II是專門為計(jì)算機(jī)的嵌入式應(yīng)用設(shè)計(jì)的,絕大部分代碼是用C語(yǔ)言編寫(xiě)的。CPU硬件相關(guān)部分是用匯編語(yǔ)言編寫(xiě)的、總量約200行的匯編語(yǔ)言部分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU上。第82頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS-II是一種基于優(yōu)先級(jí)的可搶先的硬實(shí)時(shí)內(nèi)核。自從92年發(fā)布以來(lái),在世界各地都獲得了廣泛的應(yīng)用,它是一種專門為嵌入式設(shè)備設(shè)計(jì)的內(nèi)核,目前已經(jīng)被移植到40多種不同結(jié)構(gòu)的CPU上,運(yùn)行在從8位到64位的各種系統(tǒng)之上。尤其值得一提的是,該系統(tǒng)自從2.51版本之后,就通過(guò)了美國(guó)FAA認(rèn)證,可以運(yùn)行在諸如航天器等對(duì)安全要求極為苛刻的系統(tǒng)之上。鑒于uC/OS-II可以免費(fèi)獲得代碼,對(duì)于嵌入式RTOS而言,選擇uC/OS無(wú)疑是最經(jīng)濟(jì)的選擇。uC/OS-II簡(jiǎn)介

第83頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS-II嵌入式系統(tǒng)基本模型嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存管理和任務(wù)間的通信和同步等基本功能。沒(méi)有提供輸入輸出管理,文件系統(tǒng),網(wǎng)絡(luò)等額外的服務(wù)。但由于uC/OS-II良好的可擴(kuò)展性和源碼開(kāi)放,這些非必須的功能完全可以由用戶自己根據(jù)需要分別實(shí)現(xiàn)。第84頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS操作系統(tǒng)的特點(diǎn)uC/OS是一個(gè)完成的,可移植、可固化、可裁減的搶占式實(shí)時(shí)多任務(wù)操作系統(tǒng)內(nèi)核。主要用ANSI的C語(yǔ)言編寫(xiě),少部分代碼是匯編語(yǔ)言。第85頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月?lián)屨际絻?nèi)核內(nèi)核搶占(可搶占式內(nèi)核):即當(dāng)進(jìn)程位于內(nèi)核空間時(shí),有一個(gè)更高優(yōu)先級(jí)的任務(wù)出現(xiàn)時(shí),如果當(dāng)前內(nèi)核允許搶占,則可以將當(dāng)前任務(wù)掛起,執(zhí)行優(yōu)先級(jí)更高的進(jìn)程。非搶占式內(nèi)核:高優(yōu)先級(jí)的進(jìn)程不能中止正在內(nèi)核中運(yùn)行的低優(yōu)先級(jí)的進(jìn)程而搶占CPU運(yùn)行。進(jìn)程一旦處于核心態(tài)(例如用戶進(jìn)程執(zhí)行系統(tǒng)調(diào)用),則除非進(jìn)程自愿放棄CPU,否則該進(jìn)程將一直運(yùn)行下去,直至完成或退出內(nèi)核。第86頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月優(yōu)點(diǎn)1、與終端硬件平臺(tái)相適應(yīng) 全部源代碼5500行,可裁減定制,生成的可執(zhí)行代碼占15~20k,可以移植到多種系列單片機(jī)上,包括ARM;2、考慮成本,免費(fèi)的源代碼公開(kāi);3、uC/OS-II代碼簡(jiǎn)單,容易掌握和使用;具有多任務(wù)調(diào)度的基本功能。第87頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月缺點(diǎn)1、缺少技術(shù)支持,相關(guān)的支持軟件少;2、和商業(yè)軟件比,功能較弱(如不支持時(shí)間片輪轉(zhuǎn),最大任務(wù)數(shù)為64等);對(duì)應(yīng)用開(kāi)發(fā)的支持不夠。第88頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS-II文件結(jié)構(gòu)第89頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月目的:為了實(shí)現(xiàn)資源共享。實(shí)現(xiàn)方法:進(jìn)入臨界段時(shí)關(guān)中斷,退出臨界段時(shí)開(kāi)中斷。這使得μC/OS-Ⅱ能夠在臨界段代碼時(shí)避免被其它任務(wù)或中斷服務(wù)所中斷。μC/OS-Ⅱ定義兩個(gè)宏(macros)來(lái)開(kāi)關(guān)中斷。分別是:進(jìn)入臨界段:OS_ENTER_CRITICAL()退出臨界段:OS_EXIT_CRITICAL()。這兩個(gè)宏的定義取決于所用的微處理器,每種微處理器都有自己的OS_CPU.H文件。臨界段(CriticalSections)第90頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)(task)voidmytask(void*pdata){doinitwhile(1){ dosomething; waiting; dosomething;}}一個(gè)任務(wù)通常是一個(gè)無(wú)限的循環(huán)第91頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)(task)μC/OS-Ⅱ可以管理多達(dá)64個(gè)任務(wù)。優(yōu)先級(jí)為0-63優(yōu)先級(jí)號(hào)越低,任務(wù)的優(yōu)先級(jí)越高。每個(gè)任務(wù)的優(yōu)先級(jí)不能相同。保留優(yōu)先級(jí):高優(yōu)先級(jí):0、1、2、3低優(yōu)先級(jí):OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0用戶可以有多達(dá)56個(gè)應(yīng)用任務(wù)。第92頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月中斷處理1、保存全部CPU寄存器;2、調(diào)用OSIntEnter或OSIntNesting直接加1;3、執(zhí)行用戶代碼做中斷服務(wù);4、調(diào)用OSIntExit();5、恢復(fù)所有CPU寄存器;6、執(zhí)行中斷返回指令;用戶中斷服務(wù)子程序框架第93頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月OSIntEnter()voidOSIntEnter(void){OS_ENTER_CRITICAL();OSIntNesting++;OS_EXIT_CRITICAL();}第94頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月OSIntExitOS_ENTER_CRITICAL();if((--OSIntNesting|OSLockNesting)==0){ OSIntExitY=OSUnMapTbl[OSRdyGrp];OSPrioHighRdy=(INT8U)((OSIntExitY<<3)+OSUnMapTbl[OSRdyTbl[OSIntExitY]]);if(OSPrioHighRdy!=OSPrioCur){ OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy];OSCtxSwCtr++;OSIntCtxSw();}}OS_EXIT_CRITICAL();第95頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月中斷與時(shí)鐘節(jié)拍當(dāng)發(fā)生中斷時(shí),首先應(yīng)保護(hù)現(xiàn)場(chǎng),將CPU寄存器入棧,再處理中斷函數(shù),然后恢復(fù)現(xiàn)場(chǎng),將CPU寄存器出棧,最后執(zhí)行中斷返回。uC/OS中提供了OSIntEnter()和OSIntExit()告訴內(nèi)核進(jìn)入了中斷狀態(tài)。時(shí)鐘節(jié)拍是一種特殊的中斷,操作系統(tǒng)的心臟。對(duì)任務(wù)列表進(jìn)行掃描,判斷是否有延時(shí)任務(wù)應(yīng)該處于準(zhǔn)備就緒狀態(tài),最后進(jìn)行上下文切換。第96頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月時(shí)鐘節(jié)拍μC/OS需要用戶提供周期性信號(hào)源,用于實(shí)現(xiàn)時(shí)間延時(shí)和確認(rèn)超時(shí)。節(jié)拍率應(yīng)在說(shuō)10到100Hz。時(shí)鐘節(jié)拍率越高,系統(tǒng)的額外負(fù)荷就越重。時(shí)鐘節(jié)拍的實(shí)際頻率取決于用戶應(yīng)用程序的精度。時(shí)鐘節(jié)拍源可以是專門的硬件定時(shí)器,也可以是來(lái)自50/60Hz交流電源的信號(hào)。用戶必須在多任務(wù)系統(tǒng)啟動(dòng)以后再開(kāi)啟時(shí)鐘節(jié)拍器,也就是在調(diào)用OSStart()之后。第97頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月OSTickISRvoidOSTickISR(void){

保存處理器寄存器的值;調(diào)用OSIntEnter()或是將OSIntNesting加1;

調(diào)用OSTimeTick();

調(diào)用OSIntExit();

恢復(fù)處理器寄存器的值;

執(zhí)行中斷返回指令;}第98頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月μC/OS-Ⅱ初始化在調(diào)用μC/OS-Ⅱ的任何其它服務(wù)之前,μC/OS-Ⅱ要求用戶首先調(diào)用系統(tǒng)初始化函數(shù)OSInit()。OSInit()建立空閑任務(wù)idletask,這個(gè)任務(wù)總是處于就緒態(tài)的??臻e任務(wù)OSTaskIdle()的優(yōu)先級(jí)總是設(shè)成最低,即OS_LOWEST_PRIO。μC/OS-Ⅱ還初始化了4個(gè)空數(shù)據(jù)結(jié)構(gòu)緩沖區(qū)。第99頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月μC/OS-Ⅱ初始化后的一些數(shù)據(jù)結(jié)構(gòu)內(nèi)容第100頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月μC/OS-Ⅱ初始化后的緩沖區(qū)第101頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月μC/OS-Ⅱ的啟動(dòng)多任務(wù)的啟動(dòng)是用戶通過(guò)調(diào)用OSStart()實(shí)現(xiàn)的。然而,啟動(dòng)μC/OS-Ⅱ之前,用戶至少要建立一個(gè)應(yīng)用任務(wù)。

OSInit();/*初始化uC/OS-II*/……

調(diào)用OSTaskCreate()或OSTaskCreateExt();

……OSStart();/*開(kāi)始多任務(wù)調(diào)度!永不返回*/第102頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月OSStartif(OSRunning==FALSE){y=OSUnMapTbl[OSRdyGrp];x=OSUnMapTbl[OSRdyTbl[y]];OSPrioHighRdy=(INT8U)((y<<3)+x);OSPrioCur=OSPrioHighRdy;OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy]; OSTCBCur=OSTCBHighRdy;OSStartHighRdy(); }第103頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)狀態(tài)就緒休眠等待或掛起運(yùn)行中斷服務(wù)刪除任務(wù)刪除任務(wù)刪除任務(wù)中斷中斷結(jié)束創(chuàng)建任務(wù)任務(wù)調(diào)度任務(wù)被占先等待消息掛起收到消息掛起時(shí)間到第104頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)控制塊(TCB)任務(wù)控制塊OS_TCB是一個(gè)數(shù)據(jù)結(jié)構(gòu),保存該任務(wù)的相關(guān)參數(shù),包括任務(wù)堆棧指針,狀態(tài),優(yōu)先級(jí),任務(wù)表位置,任務(wù)鏈表指針等。一旦任務(wù)建立了,任務(wù)控制塊OS_TCBs將被賦值。所有的任務(wù)控制塊分為兩條鏈表,空閑鏈表和使用鏈表。第105頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)控制塊結(jié)構(gòu)的主要成員OS_STK*OSTCBStkPtr;/*當(dāng)前任務(wù)棧頂?shù)闹羔?/structos_tcb*OSTCBNext;/*任務(wù)控制塊的雙重鏈接指針*/structos_tcb*OSTCBPrev;/*任務(wù)控制塊的雙重鏈接指針*/OS_EVENT*OSTCBEventPtr;/*事件控制塊的指針*/void*OSTCBMsg;/*消息的指針*/INT16UOSTCBDly;/*任務(wù)延時(shí)*/INT8UOSTCBStat;/*任務(wù)的狀態(tài)字*/INT8UOSTCBPrio;/*任務(wù)優(yōu)先級(jí)*/INT8UOSTCBX;/*用于加速進(jìn)入就緒態(tài)的過(guò)程*/INT8UOSTCBY;/*用于加速進(jìn)入就緒態(tài)的過(guò)程*/INT8UOSTCBBitX;/*用于加速進(jìn)入就緒態(tài)的過(guò)程*/INT8UOSTCBBitY;

/*用于加速進(jìn)入就緒態(tài)的過(guò)程*/第106頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)就緒表(ReadyList)每個(gè)任務(wù)的就緒態(tài)標(biāo)志都放入就緒表中的,就緒表中有兩個(gè)變量OSRdyGrp和OSRdyTbl[]。在OSRdyGrp中,任務(wù)按優(yōu)先級(jí)分組,8個(gè)任務(wù)為一組。OSRdyGrp中的每一位表示8組任務(wù)中每一組中是否有進(jìn)入就緒態(tài)的任務(wù)。任務(wù)進(jìn)入就緒態(tài)時(shí),就緒表OSRdyTbl[]中的相應(yīng)元素的相應(yīng)位也置位。第107頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)就緒表第108頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)就緒表OSRdyTbl[]1/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/01/0OSRdyGrp

D7D6D5D4D3D2D1D0

1/01/01/01/01/01/01/01/001234567xy01234567第109頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)創(chuàng)建想讓?duì)藽/OS-Ⅱ管理用戶的任務(wù),用戶必須要先建立任務(wù)。用戶可以通過(guò)傳遞任務(wù)地址和其它參數(shù)到以下兩個(gè)函數(shù)之一來(lái)建立任務(wù):OSTaskCreate()OSTaskCreateExt()。任務(wù)不能由中斷服務(wù)程序(ISR)來(lái)建立。第110頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)調(diào)度C/OS是搶占式實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)先級(jí)最高的任務(wù)一旦準(zhǔn)備就緒,則擁有CPU的所有權(quán)開(kāi)始投入運(yùn)行。C/OS中不支持時(shí)間片輪轉(zhuǎn)法,每個(gè)任務(wù)的優(yōu)先級(jí)要求不一樣且是唯一的,所以任務(wù)調(diào)度的工作就是:查找準(zhǔn)備就緒的最高優(yōu)先級(jí)的任務(wù)并進(jìn)行上下文切換。C/OS任務(wù)調(diào)度所花的時(shí)間為常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無(wú)關(guān)。第111頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)調(diào)度μC/OS-Ⅱ總是運(yùn)行進(jìn)入就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的那一個(gè)。確定哪個(gè)任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行了的工作是由調(diào)度器(Scheduler)完成的。任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()完成的。中斷級(jí)的調(diào)度是由另一個(gè)函數(shù)OSIntExt()完成的,這個(gè)函數(shù)將在以后描述。第112頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月根據(jù)就緒表確定最高優(yōu)先級(jí)通過(guò)OSRdyGrp值確定高3位,假設(shè)OSRdyGrp=0x08,對(duì)應(yīng)OSRdyTbl[3],高優(yōu)先級(jí)為2;通過(guò)OSRdyTbl[3]的值來(lái)確定低3位,假設(shè)OSRdyTbl[3]=0x3a,最高優(yōu)先級(jí)的任務(wù)為25第113頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月使任務(wù)進(jìn)入就緒態(tài)如果prio是任務(wù)是優(yōu)先級(jí),也是任務(wù)的識(shí)別號(hào),則將任務(wù)放入就緒表,即使任務(wù)進(jìn)入就緒態(tài)的方法是:OSRdyGrp|=OSMapTbl[prio>>3];OSRdyTbl[prio>>3]|=OSMapTbl[prio&0x07];假設(shè)優(yōu)先級(jí)為12——1100bOSRdyGrp|=0x02;OSRdyTbl[1]|=0x10;第114頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月使任務(wù)脫離就緒態(tài)將任務(wù)就緒表OSRdyTbl[prio>>3]相應(yīng)元素的相應(yīng)位清零,而且當(dāng)OSRdyTbl[prio>>3]中的所有位都為零時(shí),即全組任務(wù)中沒(méi)有一個(gè)進(jìn)入就緒態(tài)時(shí),OSRdyGrp的相應(yīng)位才為零。if((OSRdyTbl[prio>>3]&=OSMapTbl[prio&0x07])==0) OSRdyGrp&=OSMapTbl[prio>>3];第115頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)調(diào)度器voidOSSched(void){INT8Uy;

OS_ENTER_CRITICAL();if((OSLockNesting|OSIntNesting)==0) {y =OSUnMapTbl[OSRdyGrp];OSPrioHighRdy =(INT8U)((y<<3)+ OSUnMapTbl[OSRdyTbl[y]]); if(OSPrioHighRdy!=OSPrioCur) {OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OS_TASK_SW(); } }OS_EXIT_CRITICAL();}第116頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)切換將被掛起的任務(wù)寄存器入棧將較高優(yōu)先級(jí)任務(wù)的寄存器出棧第117頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)級(jí)的任務(wù)切換OS_TASK_SW()通過(guò)系統(tǒng)調(diào)用指令完成保護(hù)當(dāng)前任務(wù)的現(xiàn)場(chǎng)恢復(fù)新任務(wù)的現(xiàn)場(chǎng)執(zhí)行中斷返回指令開(kāi)始執(zhí)行新的任務(wù)第118頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月調(diào)用OS_TASK_SW()前的數(shù)據(jù)結(jié)構(gòu)低優(yōu)先級(jí)任務(wù)

OS_TCBOSTCBCur(1)存貯器低地址存貯器高地址堆棧方向SPR1R2R3R4PCPSW存貯器低地址存貯器高地址高優(yōu)先級(jí)任務(wù)

OS_TCBOSTCBHighRdy(3)(2)CPU(4)(5)第119頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月保存當(dāng)前CPU寄存器的值低優(yōu)先級(jí)任務(wù)

OS_TCBOSTCBCurPSWPCR1R2R3R4存貯器低地址存貯器高地址堆棧方向SPR1R2R3R4PCPSW存貯器低地址存貯器高地址高優(yōu)先級(jí)任務(wù)

OS_TCBOSTCBHighRdy(3)(2)CPU(4)(5)(1)(3)第120頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月重新裝入要運(yùn)行的任務(wù)低優(yōu)先級(jí)任務(wù)

OS_TCBOSTCBCurPSWPCR1R2R3R4存貯器低地址存貯器高地址堆棧方向SPR1R2R3R4PCPSWPSWPCR1R2R3R4存貯器低地址存貯器高地址高優(yōu)先級(jí)任務(wù)

OS_TCBOSTCBHighRdyOSTCBCur(1)(2)CPU(4)(4)(1)(3)(3)(4)第121頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)切換OS_TASK_SW()的代碼VoidOSCtxSw(void){

將R1,R2,R3及R4推入當(dāng)前堆棧;

OSTCBCurOSTCBStkPtr=SP;OSTCBCur=OSTCBHighRdy;SP=OSTCBHighRdyOSTCBSTKPtr;

將R4,R3,R2及R1從新堆棧中彈出;執(zhí)行中斷返回指令;}第122頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月內(nèi)存管理在ANSIC中可以用malloc()和free()兩個(gè)函數(shù)動(dòng)態(tài)地分配內(nèi)存和釋放內(nèi)存。在嵌入式實(shí)時(shí)操作系統(tǒng)中,容易產(chǎn)生內(nèi)存碎片。μC/OS-II中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來(lái)管理。每個(gè)分區(qū)中包含有整數(shù)個(gè)大小相同的內(nèi)存塊。在一個(gè)系統(tǒng)中可以有多個(gè)內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到不同大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬于的內(nèi)存分區(qū)。第123頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月內(nèi)存控制塊為了便于內(nèi)存的管理,在μC/OS-II中使用內(nèi)存控制塊(memorycontrolblocks)的數(shù)據(jù)結(jié)構(gòu)來(lái)跟蹤每一個(gè)內(nèi)存分區(qū),系統(tǒng)中的每個(gè)內(nèi)存分區(qū)都有它自己的內(nèi)存控制塊。typedefstruct{void*OSMemAddr; /*分區(qū)起始地址*/void*OSMemFreeList; /*下一個(gè)空閑內(nèi)存塊*/INT32UOSMemBlkSize; /*內(nèi)存塊的大小*/INT32UOSMemNBlks; /*內(nèi)存塊數(shù)量*/INT32UOSMemNFree; /*空閑內(nèi)存塊數(shù)量*/}OS_MEM;第124頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月內(nèi)存管理初始化如果要在μC/OS-II中使用內(nèi)存管理,需要在OS_CFG.H文件中將開(kāi)關(guān)量OS_MEM_EN設(shè)置為1。這樣μC/OS-II在啟動(dòng)時(shí)就會(huì)對(duì)內(nèi)存管理器進(jìn)行初始化(OSMemInit())。第125頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月建立一個(gè)內(nèi)存分區(qū),OSMemCreate()在使用一個(gè)內(nèi)存分區(qū)之前,必須使用OSMemCreate()先建立該內(nèi)存分區(qū)。該函數(shù)共有4個(gè)參數(shù):內(nèi)存分區(qū)的起始地址、分區(qū)內(nèi)的內(nèi)存塊總塊數(shù)、每個(gè)內(nèi)存塊的字節(jié)數(shù)和一個(gè)指向錯(cuò)誤信息代碼的指針。每個(gè)內(nèi)存分區(qū)必須含有至少兩個(gè)內(nèi)存塊,每個(gè)內(nèi)存塊至少為一個(gè)指針的大小。OS_MEM*CommTxBuf;INT8UCommTxPart[100][32];CommTxBuf=OSMemCreate(CommTxPart,100,32,&err);第126頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月分配一個(gè)內(nèi)存塊,OSMemGet()調(diào)用OSMemGet()函數(shù)從已經(jīng)建立的內(nèi)存分區(qū)中申請(qǐng)一個(gè)內(nèi)存塊。該函數(shù)的唯一參數(shù)是指向特定內(nèi)存分區(qū)的指針,該指針在建立內(nèi)存分區(qū)時(shí),由OSMemCreate()函數(shù)返回。注意的是,用戶可以在中斷服務(wù)子程序中調(diào)用OSMemGet(),因?yàn)樵跁簳r(shí)沒(méi)有內(nèi)存塊可用的情況下,OSMemGet()不會(huì)等待,而是馬上返回NULL指針。第127頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月釋放一個(gè)內(nèi)存塊,OSMemPut()應(yīng)用程序不再使用一個(gè)內(nèi)存塊時(shí),必須及時(shí)地把它釋放并放回到相應(yīng)的內(nèi)存分區(qū)中。這個(gè)操作由OSMemPut()函數(shù)完成。必須注意的是,OSMemPut()并不知道一個(gè)內(nèi)存塊是屬于哪個(gè)內(nèi)存分區(qū)的。釋放內(nèi)存塊時(shí)必須將它釋放到正確的分區(qū)。第128頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月時(shí)間管理μC/OS-Ⅱ(其它內(nèi)核也一樣)要求用戶提供定時(shí)中斷來(lái)實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能。這個(gè)定時(shí)中斷叫做時(shí)鐘節(jié)拍,它應(yīng)該每秒發(fā)生10至100次。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的負(fù)荷就越重。

與時(shí)鐘管理相關(guān)的系統(tǒng)服務(wù)有:OSTimeDLY()OSTimeDLYHMSM()OSTimeDlyResmue()OStimeGet()OSTimeSet()第129頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)間通信手段C/OS中,采用多種方法保護(hù)任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通信。提供OS_ENTER_CRITICAL和OS_EXIT_CRITICAL來(lái)對(duì)臨界資源進(jìn)行保護(hù)OSSchedLock()禁止調(diào)度保護(hù)任務(wù)級(jí)的共享資源。提供了經(jīng)典操作系統(tǒng)任務(wù)間通信方法:信號(hào)量、郵箱、消息隊(duì)列,事件標(biāo)志。第130頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月事件控制塊ECB所有的通信信號(hào)都被看成是事件(event),一個(gè)稱為事件控制塊(ECB,EventControlBlock)的數(shù)據(jù)結(jié)構(gòu)來(lái)表征每一個(gè)具體事件,ECB的結(jié)構(gòu)如下:typedefstruct{void*OSEventPtr;/*指向消息或消息隊(duì)列的指針*/INT8UOSEventTbl[OS_EVENT_TBL_SIZE];/*等待任務(wù)列表*/INT16UOSEventCnt;/*計(jì)數(shù)器(事件是信號(hào)量時(shí))*/INT8UOSEventType;/*事件類型:信號(hào)量、郵箱等*/INT8UOSEventGrp;/*等待任務(wù)組*/}OS_EVENT;與TCB類似的結(jié)構(gòu),使用兩個(gè)鏈表,空閑鏈表與使用鏈表第131頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月信號(hào)量semaphore信號(hào)量在多任務(wù)系統(tǒng)中用于:控制共享資源的使用權(quán)、標(biāo)志事件的發(fā)生、使兩個(gè)任務(wù)的行為同步。uC/OS中信號(hào)量由兩部分組成:信號(hào)量的計(jì)數(shù)值和等待該信號(hào)任務(wù)的等待任務(wù)表。信號(hào)量的計(jì)數(shù)值可以為二進(jìn)制,也可以是其他整數(shù)。系統(tǒng)通過(guò)OSSemPend()和OSSemPost()來(lái)支持信號(hào)量的兩種原子操作P()和V()。P()操作減少信號(hào)量的值,如果新的信號(hào)量的值不大于0,則操作阻塞;V()操作增加信號(hào)量的值。第132頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月任務(wù)調(diào)度不存在一個(gè)內(nèi)核任務(wù)/實(shí)體,內(nèi)核的管理是通過(guò)調(diào)用系統(tǒng)函數(shù)來(lái)實(shí)現(xiàn)的。每個(gè)任務(wù)有自己的堆??臻g。內(nèi)核對(duì)任務(wù)的占先式調(diào)度不會(huì)干擾每個(gè)任務(wù)的總的運(yùn)行結(jié)果。第133頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月COS-II在ARM9上的移植所謂移植,是指使一個(gè)實(shí)時(shí)操作系統(tǒng)能夠在某個(gè)微處理器平臺(tái)上運(yùn)行。COS-II的主要代碼都是由標(biāo)準(zhǔn)的C語(yǔ)言寫(xiě)成的,移植方便。第134頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月移植COS-II滿足的條件處理器的C編譯器能產(chǎn)生可重入代碼在程序中可以打開(kāi)或者關(guān)閉中斷處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10—1000Hz之間)處理器支承能夠容納一定量數(shù)據(jù)的硬件堆棧處理器有將堆棧指針和其他CPU寄存器存儲(chǔ)和讀出到堆棧(或者內(nèi)存)的指令第135頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月打開(kāi)/關(guān)閉中斷在COS-II中,可以通過(guò):OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()宏來(lái)控制系統(tǒng)關(guān)閉或者打開(kāi)中斷。這需要處理器的支持。在ARM7TDMI的處理器上,可以設(shè)置相應(yīng)的寄存器來(lái)關(guān)閉或者打開(kāi)系統(tǒng)的所有中斷。第136頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月處理器支持中斷并且能產(chǎn)生定時(shí)中斷COS-II是通過(guò)處理器產(chǎn)生的定時(shí)器的中斷來(lái)實(shí)現(xiàn)多任務(wù)之間的調(diào)度的。ARM7TDMI的處理器上可以產(chǎn)生定時(shí)器中斷。本系統(tǒng)工作在60MHz的主頻下,定時(shí)器的中斷的頻率為100Hz。也就是系統(tǒng)的響應(yīng)時(shí)間為10ms。第137頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月處理器支持硬件堆棧COS-II進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)把當(dāng)前任務(wù)的CPU寄存器存放到此任務(wù)的堆棧中,然后,再?gòu)牧硪粋€(gè)任務(wù)的堆棧中恢復(fù)原來(lái)的工作寄存器,繼續(xù)運(yùn)行另一個(gè)任務(wù)。所以,寄存器的入棧和出棧是COS-II多任務(wù)調(diào)度的基礎(chǔ)。ARM7處理器中有專門的指令處理堆棧,可以靈活的使用堆棧。第138頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月C/OS-II在S3C2410上的移植設(shè)置OS_CPU.H中與處理器和編譯器相關(guān)的代碼用C語(yǔ)言編寫(xiě)六個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)用匯編語(yǔ)言編寫(xiě)四個(gè)與處理器相關(guān)的函數(shù)(OS_CPU.ASM)第139頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月設(shè)置與處理器和編譯器相關(guān)的代碼OS_CPU.H中定義了與編譯器相關(guān)的數(shù)據(jù)類型。比如:INT8U、INT8S等。與ARM處理器相關(guān)的代碼,使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()宏開(kāi)啟/關(guān)閉中斷設(shè)施堆棧的增長(zhǎng)方向:堆棧由高地址向低地址增長(zhǎng)第140頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月用C語(yǔ)言編寫(xiě)六個(gè)操作系統(tǒng)相關(guān)的函數(shù)void*OSTaskStkInit(void(*task)(void*pd),void*pdata,void*ptos,INT16Uopt)voidOSTaskCreateHook(OS_TCB*ptcb)voidOSTaskDelHook(OS_TCB*ptcb)voidOSTaskSwHook(void)voidOSTaskStatHook(void)voidOSTimeTickHook(void)后5個(gè)函數(shù)為鉤子函數(shù),可以不加代碼第141頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月用匯編語(yǔ)言編寫(xiě)四個(gè)與處理器相關(guān)的函數(shù)OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR()第142頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月關(guān)于移植相對(duì)于其他的嵌入式操作系統(tǒng),uCOS-II的移植雖然是一個(gè)很簡(jiǎn)單的過(guò)程,但是,對(duì)于不熟悉uCOS-II的開(kāi)發(fā)者,移植還是有一定難度的。第143頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月移植要點(diǎn)定義函數(shù)OS_ENTER_CRITICAL和OS_ENTER_CRITICAL。定義函數(shù)OS_TASK_SW執(zhí)行任務(wù)切換。定義函數(shù)OSCtxSw實(shí)現(xiàn)用戶級(jí)上下文切換,用純匯編實(shí)現(xiàn)。定義函數(shù)OSIntCtxSw實(shí)現(xiàn)中斷級(jí)任務(wù)切換,用純匯編實(shí)現(xiàn)。定義函數(shù)OSTickISR。定義OSTaskStkInit來(lái)初始化任務(wù)的堆棧。第144頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月uC/OS的改進(jìn)固定的基于優(yōu)先級(jí)的調(diào)度,不支持時(shí)間片,使用起來(lái)不方便。一個(gè)任務(wù)的基礎(chǔ)上增加一個(gè)基于時(shí)間片的微型調(diào)度核。在對(duì)臨界資源的訪問(wèn)上使用關(guān)閉中斷實(shí)現(xiàn),沒(méi)有使用CPU提供的硬件指令,例如測(cè)試并置位。系統(tǒng)時(shí)鐘中斷,沒(méi)有提供用戶使用定時(shí)器,可以借鑒linux的定時(shí)器加以修改。可以加上文件系統(tǒng)和TCP/IP協(xié)議棧。第145頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月 基于uC/OS-II操作系統(tǒng)進(jìn)行應(yīng)用系統(tǒng)時(shí),設(shè)計(jì)任務(wù)的主要任務(wù)是將系統(tǒng)合理劃分成多個(gè)任務(wù),并由RTOS進(jìn)行調(diào)度,任務(wù)之間使用uC/OS-II提供的系統(tǒng)服務(wù)進(jìn)行通信,以配合實(shí)現(xiàn)應(yīng)用系統(tǒng)的功能。上圖中應(yīng)用代碼部分主要是設(shè)計(jì)人員設(shè)計(jì)的業(yè)務(wù)代碼。 與前后臺(tái)系統(tǒng)一樣,基于uC/OS-II的多任務(wù)系統(tǒng)也有一個(gè)main主函數(shù),main函數(shù)由編譯器所帶的C啟動(dòng)程序調(diào)用。在main主函數(shù)中主要實(shí)現(xiàn)uC/OS-II的初始化OSInit()、任務(wù)創(chuàng)建、一些任務(wù)通信方法的創(chuàng)建、uC/OS-II的多任務(wù)啟動(dòng)OSStart()等常規(guī)操作。另外,還有一些應(yīng)用程序相關(guān)的初始化操作,例如:硬件初始化、數(shù)據(jù)結(jié)構(gòu)初始化等。 uC/OS的改進(jìn)第146頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月 在使用uC/OS-II提供的任何功能之前,必須先調(diào)用OSInit()函數(shù)進(jìn)行初始化。在main主函數(shù)中調(diào)用OSStart()啟動(dòng)多任務(wù)之前,至少要先建立一個(gè)任務(wù)。否則應(yīng)用程序會(huì)崩潰。

OSInit()初始化uC/OS-II所有的變量和數(shù)據(jù)結(jié)構(gòu),并建立空閑任務(wù)OS_TaskIdle(),這個(gè)任務(wù)總是處于就緒態(tài)。uC/OS的改進(jìn)第147頁(yè),課件共159頁(yè),創(chuàng)作于2023年2月典型的main函數(shù)voidmain(void){

/*-----硬件初始化,等用戶代碼初始化-----*/

...

OSInit(); /*初始化uC/OS-II*/ …/*-------安裝中斷向量---------*/ /*通過(guò)調(diào)用OSTaskCreate()或OSTaskCreateExt()創(chuàng)建至少一個(gè)任務(wù);*/ OSTaskCreate(TaskStart,(void*)0,&Ta

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論