![[7]嵌入式操作系統(tǒng)原理_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee1.gif)
![[7]嵌入式操作系統(tǒng)原理_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee2.gif)
![[7]嵌入式操作系統(tǒng)原理_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee3.gif)
![[7]嵌入式操作系統(tǒng)原理_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee4.gif)
![[7]嵌入式操作系統(tǒng)原理_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee/b3e844a6-e2f9-409a-8d94-8c4fde7f1fee5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第三講第三講嵌入式操作系統(tǒng)原理嵌入式操作系統(tǒng)原理操作系統(tǒng)概念任務(wù)/進(jìn)程內(nèi)核進(jìn)程間同步與通信中斷管理1.操作系統(tǒng)概念1.1操作系統(tǒng)基本功能控制和管理計(jì)算機(jī)系統(tǒng)內(nèi)各種硬件和軟件資源、有效地組織多道程序運(yùn)行的系統(tǒng)軟件(或程序集合),是用戶與計(jì)算機(jī)之間的接口。UNIX DOS Linux Windows 98 Windows NT擴(kuò)充機(jī)器功能,方便用戶使用;提高系統(tǒng)效率。存儲(chǔ)器管理、處理機(jī)管理、設(shè)備管理、文件管理、用戶接口1.2 操作系統(tǒng)的形成和發(fā)展操作系統(tǒng)的形成和發(fā)展手工階段批處理多道程序設(shè)計(jì)技術(shù)和多道成批系統(tǒng)分時(shí) 操作系統(tǒng)實(shí)時(shí)操作系統(tǒng)網(wǎng)絡(luò)操作系統(tǒng)分布式系統(tǒng)1.2.1多道程序設(shè)計(jì)技術(shù)和多道成批系統(tǒng)多
2、道程序設(shè)計(jì)技術(shù)和多道成批系統(tǒng)n多道程序設(shè)計(jì)技術(shù):在計(jì)算機(jī)內(nèi)存中同時(shí)存放幾道相互獨(dú)立的程序,它們?cè)诠芾沓绦虻目刂葡孪嗷ゴ┎宓剡\(yùn)行。n多道 宏觀上并行 微觀上串行n批量操作系統(tǒng):該系統(tǒng)把用戶提交的作業(yè)成批地送入計(jì)算機(jī)內(nèi)存,然后由作業(yè)調(diào)度程序自動(dòng)地選擇作業(yè)運(yùn)行。n優(yōu)點(diǎn):縮短作業(yè)之間的交接時(shí)間,減少處理機(jī)的空閑等待時(shí)間,提高系統(tǒng)的吞吐量。缺點(diǎn):用戶響應(yīng)時(shí)間較長。用戶既不能了解自己程序的運(yùn)行情況,也不能控制計(jì)算機(jī)。1.2.2 分時(shí)分時(shí) 操作系統(tǒng)操作系統(tǒng)由于中斷技術(shù)的使用,使得一臺(tái)計(jì)算機(jī)能連接多個(gè)用戶終端,用戶可通過各自的終端使用和控制計(jì)算機(jī),我們把一臺(tái)計(jì)算機(jī)連接多個(gè)終端的計(jì)算機(jī)系統(tǒng)稱為分時(shí)計(jì)算機(jī)系統(tǒng),或
3、稱分時(shí)系統(tǒng)。把處理機(jī)的響應(yīng)時(shí)間分成若于個(gè)大小相等(或不相等)的時(shí)間單位,稱為時(shí)間片(如100毫秒),每個(gè)終端用戶獲得CPU,就等于獲得一個(gè)時(shí)間片,該用戶程序開始運(yùn)行,當(dāng)時(shí)間片到(用完),用戶程序暫停運(yùn)行,等待下一次運(yùn)行。2. 任務(wù)/進(jìn)程操作系統(tǒng)的特性之一是并發(fā)與共享,即在系統(tǒng)中(內(nèi)存)同時(shí)存在幾個(gè)相互獨(dú)立的程序,這些程序在系統(tǒng)中既交叉地運(yùn)行,又要共享系統(tǒng)中的資源,這就會(huì)引起一系列的問題,包括:對(duì)資源的競爭、運(yùn)行程序之間的通信、程序之間的合作與協(xié)同等符。要解決這些問題,用程序的概念已經(jīng)不能描述程序在內(nèi)存中運(yùn)行的狀態(tài),必須引人新的概念進(jìn)程。2.1 任務(wù)/進(jìn)程概念行為的一個(gè)規(guī)則叫做程序,程序在處理機(jī)
4、上執(zhí)行時(shí)所發(fā)生的活動(dòng)稱為進(jìn)程(Dijkstra)。進(jìn)程是這樣的計(jì)算部分,它是可以和其它計(jì)算并行的一個(gè)計(jì)算。(Donovan)進(jìn)程(有時(shí)稱為任務(wù))是一個(gè)程序與其數(shù)據(jù)一道通過處理機(jī)的執(zhí)行所發(fā)生的活動(dòng)。(Alan.C. Shaw)進(jìn)程是執(zhí)行中的程序。(Ken Thompson and Dennis Ritchie )進(jìn)程,即是程序在并發(fā)環(huán)境中的執(zhí)行過程 。2.1 進(jìn)程與程序的區(qū)別進(jìn)程是動(dòng)態(tài)概念;程序是靜態(tài)概念進(jìn)程具有并發(fā)性,宏觀上同時(shí)運(yùn)行;程序本身具有順序性,程序的并發(fā)執(zhí)行是通過進(jìn)程實(shí)現(xiàn)的進(jìn)程具有獨(dú)立性,是一個(gè)能獨(dú)立運(yùn)行的單位,是系統(tǒng)資源分配的基本單位,是運(yùn)行調(diào)度的基本單位;程序本身沒有此特性進(jìn)程和
5、程序無一一對(duì)應(yīng)關(guān)系,一個(gè)進(jìn)程可順序執(zhí)行多個(gè)程序;一個(gè)程序可由多個(gè)進(jìn)程共用進(jìn)程異步前進(jìn),會(huì)相互制約;程序不具備此特性進(jìn)程實(shí)體具有一定結(jié)構(gòu),組成進(jìn)程映象;程序沒有這種結(jié)構(gòu)2.2 任務(wù)/進(jìn)程特點(diǎn)一個(gè)任務(wù)也可以稱為一個(gè)進(jìn)程。每個(gè)任務(wù)都是整個(gè)應(yīng)用系統(tǒng)的一個(gè)部分。每個(gè)任務(wù)都賦予一定的優(yōu)先級(jí),有自己一套CPU寄存器和自己的棧空間。典型的每個(gè)任務(wù)都是一個(gè)無限循環(huán),每個(gè)任務(wù)都存在某種狀態(tài)下:休眠態(tài)、運(yùn)行態(tài)、掛起態(tài)(等待某一個(gè)事件發(fā)生)和被中斷態(tài)。任務(wù) 多任務(wù)2.3進(jìn)程描述在系統(tǒng)中一個(gè)進(jìn)程存在: 進(jìn)程控制塊(數(shù)據(jù)結(jié)構(gòu)) 進(jìn)程的執(zhí)行程序(一個(gè)可執(zhí)行文件) 進(jìn)程總是位于某個(gè)隊(duì)列(就緒、等待某事件隊(duì)列) 處于某種狀態(tài)(
6、運(yùn)行、就緒、等待) 占用某些系統(tǒng)資源(內(nèi)存,打開某些文件、處理機(jī)、外設(shè))進(jìn)程描述進(jìn)程控制塊 PCB (Process Control Block)存放進(jìn)程的管理和控制信息的數(shù)據(jù)結(jié)構(gòu)稱為進(jìn)程控制塊。它是進(jìn)程管理和控制的最重要的數(shù)據(jù)結(jié)構(gòu),在創(chuàng)建時(shí),建立PCB,并伴隨進(jìn)程運(yùn)行的全過程,直到進(jìn)程撤消而撤消。PCB就象我們的戶口。2.4 任務(wù)狀態(tài)休眠態(tài) - 該任務(wù)駐留在內(nèi)存中,但并不被多任務(wù)內(nèi)核所調(diào)度。就緒態(tài) - 任務(wù)已經(jīng)準(zhǔn)備好,但由于該任務(wù)的優(yōu)先級(jí)比正在運(yùn)行的任務(wù)的優(yōu)先級(jí)低,暫時(shí)不能運(yùn)行。運(yùn)行態(tài) - 該任務(wù)掌握了CPU的控制權(quán),正在運(yùn)行中。掛起態(tài) - 也稱為等待事件態(tài),指該任務(wù)正在等待某一個(gè)或一些事件
7、的發(fā)生。被中斷態(tài) - 由于CPU開始處理中斷請(qǐng)求,使該任務(wù)的執(zhí)行被打斷。2022-4-14任務(wù)的運(yùn)行狀態(tài)l每個(gè)任務(wù)都有確定的狀態(tài),而同時(shí)只能是一個(gè)任務(wù)占有CPU;l擁有運(yùn)行權(quán)的任務(wù)一定是就緒任務(wù)中優(yōu)先級(jí)最高的。睡眠狀態(tài)就緒狀態(tài)運(yùn)行狀態(tài)等待狀態(tài)ISR被刪除的任務(wù)退出中斷調(diào)度程序啟動(dòng)就緒的最高優(yōu)先級(jí)任務(wù)被更高優(yōu)先級(jí)的任務(wù)搶奪運(yùn)行權(quán)剛創(chuàng)建的任務(wù)等待某個(gè)事件事件發(fā)生或超時(shí)進(jìn)入中斷3. 內(nèi)核內(nèi)核負(fù)責(zé)為每個(gè)任務(wù)分配CPU時(shí)間。內(nèi)核負(fù)責(zé)任務(wù)間通信。內(nèi)核負(fù)責(zé)任務(wù)切換工作。負(fù)責(zé)任務(wù)調(diào)度,按照一定的策略,在就緒態(tài)的任務(wù)中選擇一個(gè)任務(wù)執(zhí)行。實(shí)時(shí)內(nèi)核調(diào)度算法基于優(yōu)先級(jí)調(diào)度,總是讓處于就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)先運(yùn)行。3
8、.1 非占先式內(nèi)核 非占先式內(nèi)核 non-preemptive - 內(nèi)核要求每個(gè)任務(wù)自我放棄CPU的所有權(quán)。 - 中斷可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀態(tài)變?yōu)榫途w態(tài),但中斷服務(wù)以后控制權(quán)還是回到原來被中斷的那個(gè)任務(wù),直到該任務(wù)主動(dòng)放棄CPU的使用權(quán)。 - 更高優(yōu)先權(quán)的任務(wù)不能打斷正在執(zhí)行的較低優(yōu)先權(quán)的任務(wù),直到較低優(yōu)先權(quán)任務(wù)主動(dòng)放棄CPU的控制權(quán)。非占先式內(nèi)核3.2 占先式內(nèi)核 占先式內(nèi)核 preemptive - 最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。 - 高優(yōu)先級(jí)的就緒任務(wù)可以打斷正在執(zhí)行的較低優(yōu)先級(jí)的任務(wù),進(jìn)入執(zhí)行態(tài);被搶占的較低優(yōu)先級(jí)任務(wù)進(jìn)入就緒任務(wù)隊(duì)列,等待下一次調(diào)度。 -
9、 商業(yè)上銷售的實(shí)時(shí)內(nèi)核都是搶占式內(nèi)核。占先式內(nèi)核3.3 可重入性 可重入性 reentrancy -可重入型函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞。 - 可重入型函數(shù)任何時(shí)候可以被中斷,一段時(shí)間后又可以執(zhí)行,而相應(yīng)的數(shù)據(jù)不會(huì)丟失。 - 可重入型函數(shù)只使用局部變量,即變量保存在CPU寄存器中或堆棧中??芍厝胄秃瘮?shù)不可重入型函數(shù)3.4 時(shí)間片輪轉(zhuǎn)調(diào)度時(shí)間片輪轉(zhuǎn)調(diào)度 round-robin scheduling當(dāng)兩個(gè)或兩個(gè)以上的任務(wù)具有同樣的優(yōu)先級(jí),內(nèi)核運(yùn)行一個(gè)任務(wù)運(yùn)行事先確定的一段時(shí)間,叫做時(shí)間額度(quantum),然后切換給另一個(gè)任務(wù)。滿足下列條件時(shí),把CPU控制權(quán)交給下一個(gè)就緒任
10、務(wù) - 當(dāng)前任務(wù)無事可作。 - 當(dāng)前任務(wù)的時(shí)間片還沒有用完任務(wù)就結(jié)束了。 - 當(dāng)前任務(wù)的時(shí)間片用完了。3.5 基于優(yōu)先級(jí)調(diào)度根據(jù)任務(wù)的優(yōu)先級(jí)和狀態(tài)決定任務(wù)的調(diào)度。基于優(yōu)先級(jí)搶占式調(diào)度?;趦?yōu)先級(jí)非搶占式調(diào)度。任務(wù)優(yōu)先級(jí)靜態(tài)優(yōu)先級(jí) - 任務(wù)在執(zhí)行過程中優(yōu)先級(jí)不改變,各個(gè)任務(wù)的優(yōu)先級(jí)在編譯時(shí)就確定了。動(dòng)態(tài)優(yōu)先級(jí) - 任務(wù)在執(zhí)行過程中,優(yōu)先級(jí)是可變的。3.6 優(yōu)先級(jí)反轉(zhuǎn)高優(yōu)先級(jí)的任務(wù)在申請(qǐng)已經(jīng)被低優(yōu)先級(jí)任務(wù)占據(jù)的資源時(shí),高優(yōu)先級(jí)被迫進(jìn)入等待態(tài),如果有一個(gè)中優(yōu)先級(jí)的任務(wù)一直在執(zhí)行,則高優(yōu)先級(jí)將無法執(zhí)行。優(yōu)先級(jí)反轉(zhuǎn)問題實(shí)例優(yōu)先級(jí)反轉(zhuǎn)的解決方法 優(yōu)先級(jí)繼承 - 擁有資源的低優(yōu)先級(jí)任務(wù)被高優(yōu)先級(jí)搶占。 -
11、高優(yōu)先級(jí)任務(wù)開始申請(qǐng)被低優(yōu)先級(jí)占據(jù)的資源。 - 此時(shí),擁有該資源的低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)上升到高于高優(yōu)先級(jí)的任務(wù)。 - 擁有資源的任務(wù)得到運(yùn)行機(jī)會(huì),就有機(jī)會(huì)盡快釋放資源。 - 釋放資源,該任務(wù)回到原來的優(yōu)先級(jí)。 - 高優(yōu)先級(jí)任務(wù)得到運(yùn)行機(jī)會(huì),占有資源。4. 進(jìn)程間同步與通信在多道程序的環(huán)境中,系統(tǒng)中的多個(gè)進(jìn)程可以并發(fā)執(zhí)行,同時(shí)它們又要共享系統(tǒng)中的資源,這些資源有些是可共享使用的,如磁盤,有些是以獨(dú)占方式使用的,如打印機(jī)。由此將會(huì)引起一系列的矛盾,產(chǎn)生錯(cuò)綜復(fù)雜的相互制約的關(guān)系。 產(chǎn)生這種錯(cuò)綜復(fù)雜的相互制約關(guān)系的原因有二: 資源共享 進(jìn)程合作4.1 臨界與互斥臨界與互斥1. 臨界資源:一次僅允許一個(gè)
12、進(jìn)程使用的資源稱為臨界資源。2、臨界區(qū):每個(gè)進(jìn)程中訪問臨界資源的那段程序段稱為臨界區(qū)(臨界段)?;コ?在操作系統(tǒng)中,當(dāng)某一進(jìn)程正在訪問某臨界區(qū)時(shí),就不允許其它進(jìn)程進(jìn)入,否則就會(huì)發(fā)生(后果)無法估計(jì)的錯(cuò)誤。我們把進(jìn)程之間的這種相互制約的關(guān)系稱為互斥。4.2 信號(hào)量信號(hào)量信號(hào)量 semaphore - 控制共享資源的使用權(quán) - 標(biāo)志某個(gè)事件發(fā)生 - 使兩個(gè)任務(wù)的行為同步二進(jìn)制信號(hào)量 - 信號(hào)只有兩個(gè)值0和1計(jì)數(shù)式信號(hào)量 - 信號(hào)有一個(gè)取值范圍,例如0-255信號(hào)量信號(hào)量的操作創(chuàng)建 Create - 初始化二進(jìn)制或計(jì)數(shù)式信號(hào)量的信號(hào)值等待 Wait - 如果信號(hào)量值非0,則得到信號(hào),信號(hào)量值減1給信
13、號(hào) Signal - 信號(hào)量值加133互斥型信號(hào)量:通常表現(xiàn)為一個(gè)二值型信號(hào),用一位二進(jìn)制位來表示(1/0),可以實(shí)現(xiàn)共享資源的獨(dú)占式占用。計(jì)數(shù)信號(hào)量:通常表現(xiàn)為一個(gè)遞減的計(jì)數(shù)器信號(hào),可以實(shí)現(xiàn)若干個(gè)同類資源的共享,提高資源使用效率。二進(jìn)制信號(hào)量計(jì)數(shù)式信號(hào)量364.3 消息郵箱消息郵箱 指向保存任務(wù)間傳遞信息的存儲(chǔ)空間(緩存區(qū))的指針結(jié)構(gòu)稱為消息郵箱。374.4 消息隊(duì)列消息隊(duì)列 若消息郵箱被定義成擁有若干個(gè)元素的數(shù)組,用來傳遞多個(gè)消息的地址指針,這樣消息的數(shù)據(jù)結(jié)構(gòu)稱為消息隊(duì)列。4.5死鎖死鎖死鎖 dead lock - 指兩個(gè)任務(wù)無限期地互相等待對(duì)方控制的資源。防止死鎖的方法 - 先得到全部的
14、資源再做下一步工作。 - 所有任務(wù)用同樣的順序去申請(qǐng)多個(gè)資源。 - 釋放資源時(shí)使用相反的順序。 - 定義任務(wù)等待資源的時(shí)間,如果一段時(shí)間內(nèi)沒有等到資源就產(chǎn)生超時(shí),化解死鎖。4.6事件標(biāo)志事件標(biāo)志應(yīng)用于任務(wù)和多個(gè)事件同步的場合。獨(dú)立型事件標(biāo)志 - 任何等待的一個(gè)事件發(fā)生,則喚醒任務(wù)關(guān)聯(lián)型事件標(biāo)志 - 所有等待的事件同時(shí)發(fā)生,則喚醒任務(wù)事件標(biāo)志42消息郵箱及其操作一、消息郵箱 任務(wù)與任務(wù)間要傳遞一個(gè)數(shù)據(jù),為了適應(yīng)不同數(shù)據(jù)的需要,最好在存儲(chǔ)中建立一個(gè)數(shù)據(jù)緩沖區(qū),把要傳遞的數(shù)據(jù)放在該緩沖區(qū)中,從而實(shí)現(xiàn)任務(wù)間的數(shù)據(jù)通信。消息郵箱消息郵箱 message mail box - 通過內(nèi)核一個(gè)任務(wù)或一個(gè)中斷服
15、務(wù)程序可以把一則消息(一個(gè)指針)放到郵箱中。 - 通過內(nèi)核一個(gè)或多個(gè)任務(wù)可以通過內(nèi)核接收這則消息。 - 每個(gè)郵箱有相應(yīng)的等待消息的任務(wù)列表,如果郵箱為空,則等待消息的任務(wù)將被掛起。 - 每個(gè)郵箱也應(yīng)該有相應(yīng)的發(fā)送消息的任務(wù)列表,如果郵箱滿,則發(fā)送消息的任務(wù)將被掛起。44二、消息郵箱的操作OS_EVENT *OSMboxCreate (void *msg) OS_EVENT *pevent; OS_ENTER_CRITICAL(); pevent = OSEventFreeList; if (OSEventFreeList != (OS_EVENT *)0) OSEventFreeList =
16、(OS_EVENT *)OSEventFreeList-OSEventPtr; OS_EXIT_CRITICAL(); if (pevent != (OS_EVENT *)0) pevent-OSEventType = OS_EVENT_TYPE_MBOX; (1) pevent-OSEventPtr = msg; (2) OSEventWaitListInit(pevent); return (pevent); (3)創(chuàng)建郵箱1.郵箱的創(chuàng)建452.發(fā)送一個(gè)消息到郵箱中:OSMboxPost()/ OSMboxPostOpt() INT8U OSMboxPost ( OS_EVENT *pev
17、ent, void *msg ) INT8U OSMboxPostOpt ( OS_EVENT *pevent, void *msg, INT8U opt ) 463.等待一個(gè)郵箱中的消息: OSMboxPend()/OSMboxAccept() void *OSMboxPend( OS_EVENT *pevent, INT16U timeout, INT8U *err ) void *OSMboxAccept( OS_EVENT *pevent ) 474.查詢一個(gè)郵箱的狀態(tài)查詢一個(gè)郵箱的狀態(tài), OSMboxQuery(), OSMboxQuery() INT8U OSMboxQuery (
18、 OS_EVENT*pevent, OS_MBOX_DATA *pdata ) Typedef structvoid *OSMsg;INTU8U OSEvenTb1OS_EVENT_TBL_SIZE;INT8U OSEventGrp;OS_MBOX_DATA;5.刪除刪除郵箱郵箱, OSMboxDel(), OSMboxDel() OS_EVENT *OSMboxDel ( OS_EVENT*pevent, INT8U opt INT8U *err ) 48消息隊(duì)列及其操作一、消息隊(duì)列 消息隊(duì)列可以傳遞多條消息,通常由三部分組成:事件控制塊、消息對(duì)列和消息.消息隊(duì)列消息隊(duì)列 message q
19、ueue - 消息隊(duì)列實(shí)際上是郵箱陣列。 - 通過內(nèi)核一個(gè)任務(wù)或一個(gè)中斷服務(wù)程序可以把一則消息(一個(gè)指針)放到消息隊(duì)列中。 - 通過內(nèi)核一個(gè)或多個(gè)任務(wù)可以通過內(nèi)核接收這則消息。 - 每個(gè)消息隊(duì)列有相應(yīng)的等待消息的任務(wù)列表,如果消息隊(duì)列為空,則等待消息的任務(wù)將被掛起。 - 每個(gè)消息隊(duì)列也應(yīng)該有相應(yīng)的發(fā)送消息的任務(wù)列表,如果消息隊(duì)列滿,則發(fā)送消息的任務(wù)將被掛起。501.消息指針數(shù)組 消息指針數(shù)組結(jié)構(gòu)51 OSQPtr在空閑隊(duì)列控制塊中鏈接所有的隊(duì)列控制塊。一旦建立了消息隊(duì)列,該域就不再有用了。 OSQStart是指向消息隊(duì)列的指針數(shù)組的起始地址的指針。用戶應(yīng)用程序在使用消息隊(duì)列之前必須先定義該數(shù)組
20、。 OSQEnd是指向消息隊(duì)列結(jié)束單元的下一個(gè)地址的指針。該指針使得消息隊(duì)列構(gòu)成一個(gè)循環(huán)的緩沖區(qū)。 OSQIn是指向消息隊(duì)列中插入下一條消息的位置的指針。當(dāng)OSQIn和.OSQEnd相等時(shí),OSQIn被調(diào)整指向消息隊(duì)列的起始單元。52 OSQOut是指向消息隊(duì)列中下一個(gè)取出消息的位置的指針。當(dāng)OSQOut和OSQEnd相等時(shí),OSQOut被調(diào)整指向消息隊(duì)列的起始單元。 OSQSize是消息隊(duì)列中總的單元數(shù)。該值是在建立消息隊(duì)列時(shí)由用戶應(yīng)用程序決定的。在C/OS-II中,該值最大可以是65,535。 OSQEntries是消息隊(duì)列中當(dāng)前的消息數(shù)量。當(dāng)消息隊(duì)列是空的時(shí),該值為0。當(dāng)消息隊(duì)列滿了以后
21、,該值和OSQSize值一樣。 在消息隊(duì)列剛剛建立時(shí),該值為0。53 系統(tǒng)把消息指針數(shù)組的基本參數(shù)都記錄在一個(gè)叫做隊(duì)列控制塊(OS_Q)的結(jié)構(gòu)中。并用隊(duì)列控制塊中的指針OSQPtr將所有隊(duì)列控制塊鏈接為鏈表。2.隊(duì)列控制塊 54一、消息隊(duì)列的操作1.消息隊(duì)列的創(chuàng)建,OSQCreate() OS_EVENT *OSQCreate ( void *start, INT16U size ) 2.等待一個(gè)消息隊(duì)列中的消息,OSQPend()/OSQAccept() void *OSQPend ( OS_EVENT *pevent, INT16U timeout, INT8U *err ) void *
22、OSQAccept ( OS_EVENT *pevent )553.向消息隊(duì)列發(fā)送一個(gè)消息(FIFO),OSQPost()和OSQPostOpt() INT8U OSQPost ( OS_EVENT *pevent, void *msg ) INT8U OSQPostOpt ( OS_EVENT *pevent, void *msg. INT8U opt ) 564.清空一個(gè)消息隊(duì)列, OSQFlush() INT8U OSQFlush (OS_EVENT *pevent) OS_Q *pq; OS_ENTER_CRITICAL(); if (pevent-OSEventType != OS_
23、EVENT_TYPE_Q) (1) OS_EXIT_CRITICAL(); return (OS_ERR_EVENT_TYPE); pq = pevent-OSEventPtr; pq-OSQIn = pq-OSQStart; (2) pq-OSQOut = pq-OSQStart; pq-OSQEntries = 0; OS_EXIT_CRITICAL(); return (OS_NO_ERR);575.刪除一個(gè)消息隊(duì)列, OSQDEL() OS_EVENT OSQDel ( OS_EVENT *pevent ) ;6.查詢消息隊(duì)列,OSQQuery() OS_EVENT OSQQuery ( OS_EVENT *pevent, OS_Q_DATA *pdata ) ;T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 活動(dòng)策劃報(bào)告
- 婦產(chǎn)科護(hù)理練習(xí)試題附答案
- 職場新人培訓(xùn)計(jì)劃與教材編寫指南
- 物流倉儲(chǔ)作業(yè)指導(dǎo)手冊(cè)
- 智能家居設(shè)備維護(hù)與故障排除教程
- 交通運(yùn)輸行業(yè)智能交通與自動(dòng)駕駛技術(shù)研究方案
- 農(nóng)村農(nóng)業(yè)智能倉儲(chǔ)管理系統(tǒng)
- 現(xiàn)代服務(wù)業(yè)流程優(yōu)化作業(yè)指導(dǎo)書
- 溝通協(xié)作手冊(cè)
- 企業(yè)IT支持服務(wù)說明手冊(cè)
- 人力資源內(nèi)部培訓(xùn)課件
- 《S中學(xué)宿舍樓工程量清單計(jì)價(jià)編制(附三維圖)》30000字
- 全國運(yùn)動(dòng)員注冊(cè)協(xié)議書范本(2篇)
- 《高點(diǎn)全景視頻監(jiān)控聯(lián)網(wǎng)技術(shù)要求》
- 白云山生態(tài)停車場工程施工組織設(shè)計(jì)施工方案
- 2024年四川省綿陽市中考語文試卷(附真題答案)
- 【MOOC】Office高級(jí)應(yīng)用-成都信息工程大學(xué) 中國大學(xué)慕課MOOC答案
- 足球英語課件
- 盆底康復(fù)課件
- CNAS認(rèn)可準(zhǔn)則、規(guī)則考核專項(xiàng)測試題附答案
- 中等職業(yè)學(xué)??谇恍迯?fù)工藝專業(yè)實(shí)訓(xùn)教學(xué)條件建設(shè)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論