第6章 信號量與互斥信號量管理_第1頁
第6章 信號量與互斥信號量管理_第2頁
第6章 信號量與互斥信號量管理_第3頁
第6章 信號量與互斥信號量管理_第4頁
第6章 信號量與互斥信號量管理_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量管理信號量與互斥信號量管理第第6 6章章 信號量與互斥信號量管理信號量與互斥信號量管理 本章主要描述信號量與互斥信號本章主要描述信號量與互斥信號量的概念、功能、原理及其使用方法。量的概念、功能、原理及其使用方法。 本章主要內(nèi)容本章主要內(nèi)容嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1 信號量管理 一一 信號量的類型信號量的類型1.一種是只有0和1兩種值的信號量,稱為二值信號量;2.另一種是可以有多種值的信號量,稱為計數(shù)式信

2、號量,其值的大小取決于信號量的數(shù)據(jù)類型,如計數(shù)式信號量是8位整型變量,則其值可以是0255,若是16位整型變量,則其值可以是065,535。二二 C/OS-IIC/OS-II信號量的兩個組成部分信號量的兩個組成部分1.一個是信號量的計數(shù)值,范圍是065,535;2.另一個是由等待該信號量的任務(wù)組成的任務(wù)等待列表。6.1.1 6.1.1 概述概述6.1.1.1 6.1.1.1 信號量的類型和組成信號量的類型和組成嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.1.2 6.1.1.2 信號量的功能信號量的功能 信號量可以使

3、用在如下場合:1.允許一個任務(wù)與其它任務(wù)或中斷同步;2.取得共享資源的使用權(quán);3.標(biāo)志事件的發(fā)生。 6.1.1.3 6.1.1.3 對信號量的初始計數(shù)值賦值方法對信號量的初始計數(shù)值賦值方法對C/OS-II信號量初始值的賦值方法如下:1.信號量的初始值065,535。2.如果表示一個或者多個事件的發(fā)生,那么初始值應(yīng)設(shè)為0。3.如果是用于對共享資源的訪問,那么該初始值應(yīng)設(shè)為1(例如,把它當(dāng)作二值信號量使用)。4.如果是用來表示允許任務(wù)訪問n個相同的資源,那么該初始值應(yīng)該是n,并把該信號量作為一個可計數(shù)的信號量使用。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信

4、號量與互斥信號量信號量與互斥信號量6.1.1.4 6.1.1.4 信號量管理函數(shù)信號量管理函數(shù) 如表6.1所示,C/OS-II提供了6種對信號量進(jìn)行操作的函數(shù),所屬文件是OS_SEM.C。 表表6.1 6.1 信號量管理函數(shù)一覽表信號量管理函數(shù)一覽表函數(shù)功能調(diào)用者OSSemCreate()OSSemCreate()建立信號量任務(wù)或者啟動代碼OSSemPendOSSemPend() ()等待信號量只能是任務(wù)OSSemPostOSSemPost() ()發(fā)送信號量任務(wù)或者中斷OSSemAcceptOSSemAccept() ()無等待地請求信號量任務(wù)或者中斷OSSemDelOSSemDel() (

5、)刪除信號量任務(wù)OSSemQuery()OSSemQuery()查詢信號量當(dāng)前狀態(tài)任務(wù)或者中斷嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.1.5 6.1.1.5 信號量的配置常量信號量的配置常量 在使用信號量函數(shù)之前,必須將 OS_CFG.H文件中相應(yīng)的配置常量設(shè)置為0或1,以確定是編譯還是裁剪該函數(shù),其配置常量如表6.2所示。表表6.2 6.2 信號量函數(shù)配置常量一覽表信號量函數(shù)配置常量一覽表函數(shù)配置常量說明系統(tǒng)配置OS_SEM_EN該常量為0時,屏蔽所有信號量函數(shù)OSSemCreate()信號量必然包含這3個函

6、數(shù),所以它們沒有單獨(dú)的配置常量。OSSemPend()OSSemPost()OSSemAccept()OS_SEM_ACCEPT_ENOSSemDel()OS_SEM_DEL_ENOSSemQuery()OS_SEM_QUERY_EN嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.1.6 6.1.1.6 中斷、任務(wù)與信號量之間的關(guān)系中斷、任務(wù)與信號量之間的關(guān)系 1.如果信號量用于對共享資源的訪問,那么信號量就用鑰匙符號。符號旁邊的數(shù)字N代表可用資源數(shù)。對于二值信號量,該值就是1;2.如果信號量用于表示某事件的發(fā)生,那么

7、就用旗幟符號。這時的數(shù)字N代表事件已經(jīng)發(fā)生的次數(shù)。圖6.1任務(wù)、中斷服務(wù)子程序和信號量之間的關(guān)系 任務(wù)、中斷服務(wù)子程序與信號量之間的關(guān)系如圖6.1所示,其中:用鑰匙或者旗幟符號來表示信號量。6.1.1.7 6.1.1.7 應(yīng)用要點(diǎn)應(yīng)用要點(diǎn) 原則上中斷和任務(wù)可以共享信號量,但并不推薦這樣使用,因?yàn)樾盘柫恳话阌糜谌蝿?wù)級。如果非這樣做不可,則中斷服務(wù)子程序只能用來發(fā)送信號量。嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.2 6.1.2 建立一個信號量,建立一個信號量,OSSemCreate()OSSemCreate() 6

8、.1.2.1 6.1.2.1 函數(shù)原型函數(shù)原型OS_EVENT OS_EVENT * * OSSemCreate( INT16U value) OSSemCreate( INT16U value)一一功能:功能:OSSemCreate()函數(shù)用于建立一個信號量,并對信號量賦予初始計數(shù)值。這個初始值就是函數(shù)的參數(shù)valuevalue,可以為065,535中的任何值,初始值有自己的設(shè)置規(guī)則。二二初始值的設(shè)置規(guī)則初始值的設(shè)置規(guī)則1.如果信號量用來表示一個或多個事件的發(fā)生,那么該信號量的初值通常賦為0;2.如果信號量用于對共享資源的訪問,那么該信號量的初值應(yīng)賦為1(例如,把它當(dāng)成二值信號量使用);3.

9、如果信號量用來表示允許訪問n個相同的資源,那么該信號量的初值應(yīng)賦為n,并把信號量作為一個可計數(shù)的信號量使用。三三返回值:返回值:OSSemCreate()函數(shù)返回指向分配給所建立的信號量的事件控制塊的指針。如果沒有可用的事件控制塊,OSSemCreate()函數(shù)返回空指針。四四調(diào)用者:調(diào)用者:任務(wù)或者啟動代碼。五五配置常量:配置常量:OS_SEM_EN。使用任何信號量函數(shù)的前提都是需要用此函數(shù)建立信號量。嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.2 6.1.2 建立一個信號量,建立一個信號量,OSSemCreat

10、e()OSSemCreate() 6.1.2.1 6.1.2.1 函數(shù)原型函數(shù)原型OS_EVENT OS_EVENT * * OSSemCreate( INT16U value) reentrant OSSemCreate( INT16U value) reentrant一一功能:功能:OSSemCreate()函數(shù)用于建立一個信號量,并對信號量賦予初始計數(shù)值。這個初始值就是函數(shù)的參數(shù)valuevalue,可以為065,535中的任何值,初始值有自己的設(shè)置規(guī)則。二二初始值的設(shè)置規(guī)則初始值的設(shè)置規(guī)則1.如果信號量用來表示一個或多個事件的發(fā)生,那么該信號量的初值通常賦為0;2.如果信號量用于對共享

11、資源的訪問,那么該信號量的初值應(yīng)賦為1(例如,把它當(dāng)成二值信號量使用);3.如果信號量用來表示允許訪問n個相同的資源,那么該信號量的初值應(yīng)賦為n,并把信號量作為一個可計數(shù)的信號量使用。三三調(diào)用者:調(diào)用者:任務(wù)或者啟動代碼。四四配置常量:配置常量:OS_SEM_EN。使用任何信號量函數(shù)的前提都是需要用此函數(shù)建立信號量。 函數(shù)返回指向分配給所建立的信號量的事件控制塊的指針。如果沒有可用的事件控制塊,OSSemCreate()函數(shù)返回空指針。6.1.2.2 6.1.2.2 返回值返回值 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號

12、量圖6.3 返回之前的ECB數(shù)據(jù)結(jié)構(gòu)6.1.2.3 6.1.2.3 原理與實(shí)現(xiàn)原理與實(shí)現(xiàn) 一、原理一、原理二、實(shí)現(xiàn)代碼二、實(shí)現(xiàn)代碼圖6.2 信號量建立計算原理主要流程 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.2.4 6.1.2.4 應(yīng)用范例應(yīng)用范例 程序清單程序清單6.2 OSSemCreate() 6.2 OSSemCreate() 應(yīng)用范例應(yīng)用范例OS_EVENT OS_EVENT * *AdcSemAdcSem; / 定義一個指向信號量ECB的指針 void main(void) OSInit();.Ad

13、cSemAdcSem=OSSemCreate(1)=OSSemCreate(1); / 信號量初始值設(shè)置為1.OSStart(); OSSemCreate()函數(shù)應(yīng)用范例如程序清單6.2所示,必須首先定義一個OS_EVENT類型的全局變量,用于保存函數(shù)的返回值,以供其它相關(guān)函數(shù)使用。嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.3 6.1.3 刪除一個信號量,刪除一個信號量,OSSemDel()OSSemDel()6.1.3.1 6.1.3.1 函數(shù)原型函數(shù)原型OS_EVENT *OSSemDel(OS_EVENT

14、*pevent,INT8U opt,INT8U *err) reentrant一一功能:功能:OSSemDel()函數(shù)用于刪除一個信號量。二二調(diào)用者:調(diào)用者:只能是任務(wù)。三三配置常量:配置常量:OS_SEM_EN和OS_SEM_DEL_EN。四四參數(shù)參數(shù)1. 1.peventpevent 指向信號量的指針,該指針的值可以在建立信號量時得到;2.2.optopt定義信號量刪除條件的選項(xiàng),它有兩個選擇:OS_DEL_NO_PEND,規(guī)定只能在已經(jīng)沒有任何任務(wù)等待信號量時,才能刪除該信號量;OS_DEL_ALWAYS, 規(guī)定不管有沒有任務(wù)在等待,立即刪除這個信號量。刪除后,所有等待該信號量的任務(wù)立即

15、進(jìn)入就緒狀態(tài)。3.3.errerr 指向包含錯誤代碼的變量的指針,返回值可能為下列幾種之一;OS_NO_ERROS_NO_ERR調(diào)用成功,信號量被刪除;OS_ERR_DEL_ISROS_ERR_DEL_ISR試圖在中斷服務(wù)子程序中刪除信號量;OS_ERR_INVALID_OPTOS_ERR_INVALID_OPT參數(shù)opt不是2種合法參數(shù)之一;OS_ERR_TASK_WAITINGOS_ERR_TASK_WAITING有任務(wù)在等待信號量;OS_ERR_PEVENT_TYPEOS_ERR_PEVENT_TYPE pevent不是指向信號量的指針;OS_ERR_PEVENT_NULLOS_ERR_

16、PEVENT_NULL 沒有可用的OS_EVENT數(shù)據(jù)結(jié)構(gòu)。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.3.2 6.1.3.2 返回值返回值 如果信號量已被刪除了,則返回空指針;若信號量沒有能被刪除,則返回pevent。后一種情況下,應(yīng)該查看出錯代碼,以查明原因。6.1.3.3 6.1.3.3 原理原理 基本原理:所謂刪除信號量其實(shí)質(zhì)就是將信號量所屬的ECB設(shè)置恢復(fù)到它在空閑ECB鏈表中的原始狀態(tài),并將這個ECB還給空閑ECB鏈表。 6.1.3.4 6.1.3.4 應(yīng)用要點(diǎn)應(yīng)用要點(diǎn)1.由于其它函數(shù)可能還會用到這個

17、信號量,所有在刪除信號量之前,必須首先刪除等待該信號量的所有任務(wù);2.當(dāng)掛起的任務(wù)進(jìn)入就緒狀態(tài)時,中斷是關(guān)閉的,這就是說中斷延遲與等待信號量的任務(wù)的數(shù)量密切有關(guān)。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.4 6.1.4 等待一個信號量,等待一個信號量,OSSemPendOSSemPend() () 6.1.4.1 6.1.4.1 函數(shù)原型函數(shù)原型void OSSemPend(OS_EVENTvoid OSSemPend(OS_EVENT * *peventpevent,INT16U timeoutINT16U

18、timeout,INT8U INT8U * *err) reentranterr) reentrant 一一功能:功能:OSSemPend()函數(shù)掛起當(dāng)前任務(wù)直到有其它的任務(wù)或中斷置位信號量或者信號量超出等待的預(yù)期時間。如果在預(yù)期的時鐘節(jié)拍內(nèi)信號量被置位,C/OS-默認(rèn)最高優(yōu)先級的任務(wù)取得信號量并恢復(fù)執(zhí)行。l當(dāng)一個任務(wù)需要請求一個信號量時,就需要使用OSSemPend()函數(shù)。l一個被OSTaskSuspend()函數(shù)掛起的任務(wù)也可以接受信號量,但這個任務(wù)將一直保持掛起狀態(tài),直到通過調(diào)用OSTaskResume()函數(shù)恢復(fù)任務(wù)的運(yùn)行。二二調(diào)用者:調(diào)用者:只能是任務(wù)。三三配置常量:配置常量:沒有

19、單獨(dú)的配置常量。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量四四 函數(shù)參數(shù):函數(shù)參數(shù):1. 1.peventpevent 是指向信號量的指針。該指針的值可以在建立該信號量時得到;2.2.timeouttimeout 指定的超時時鐘節(jié)拍數(shù)量,如果一個任務(wù)在經(jīng)過了timeout參數(shù)指定的時鐘節(jié)拍后還沒有得到需要的信號量時,就恢復(fù)運(yùn)行狀態(tài)。如果timeout為0,則表示任務(wù)將持續(xù)的等待信號量。最大的等待時間為65,535個時鐘節(jié)拍。這個時間長度并不是非常嚴(yán)格的,可能存在一個時鐘節(jié)拍的誤差,因?yàn)橹挥性谝粋€時鐘節(jié)拍結(jié)束后才會減少定

20、義的等待超時時鐘節(jié)拍。3.3.errerr 是指向包含錯誤碼的變量的指針。OSSemPend()函數(shù)返回的錯誤碼可能為下述幾種之一:OS_NO_ERR 信號量可用;OS_TIMEOUT 沒有在指定的時鐘節(jié)拍數(shù)內(nèi)得到信號量;OS_ERR_PEND_ISR 從中斷調(diào)用該函數(shù);OS_ERR_EVENT_TYPE pevent 不是指向信號量的指針。l當(dāng)任務(wù)調(diào)用OSSemPend()函數(shù)時,如果信號量的值大于零,OSSemPend()函數(shù)遞減該值并返回該值;如果調(diào)用時信號量等于零,OSSemPend()函數(shù)將任務(wù)加入該信號量的等待隊(duì)列,并掛起任務(wù),直到該任務(wù)收到信號量。6.1.4.2 6.1.4.2

21、返回值返回值OSSemPend()函數(shù)沒有返回值。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.4.3 6.1.4.3 原理與實(shí)現(xiàn)原理與實(shí)現(xiàn) 基本原理:就是從參數(shù)pevent指針?biāo)赶虻腅CB數(shù)據(jù)結(jié)構(gòu)中,獲取成員變量 . .OSEventCnt的信號量計數(shù)器值。若該值大于0,則得到一個信號量;若該值等于0,則掛起任務(wù),等待信號量直到 . .OSEventCnt = 1。程序清單程序清單6.5 OSSemPend6.5 OSSemPend() ()應(yīng)用范例應(yīng)用范例OS_EVENT *AdcSem; / 定義一個指向信

22、號量ECB的指針void Task(void *ppdata) reentrant INT8U err; ppdata = ppdata; for (;) . OSSemPend(AdcSem,0,&err); / 無限期等待信號量, / 只有得到信號量任務(wù)才能執(zhí)行 . 6.1.4.4 6.1.4.4 應(yīng)用范例應(yīng)用范例 OSSemPend()函數(shù)應(yīng)用范例如程序清單6.5所示,必須在建立信號量前定義一個OS_EVENT類型的全局變量,用于指向信號量ECB。嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.5 6.1

23、.5 發(fā)送一個信號量,發(fā)送一個信號量,OSSemPostOSSemPost() () 6.1.5.1 函數(shù)原型函數(shù)原型INT8U OSSemPost(OS_EVENT *pevent)reentrant一一功能:功能:OSSemPost()函數(shù)用于置位指定的信號量,或者說用于發(fā)送信號量。1.如果指定的信號量是0或大于0,無任務(wù)等待信號量,OSSemPost()函數(shù)使該信號量加1并返回。2.如果有任務(wù)在等待信號量,最高優(yōu)先級的任務(wù)將得到信號量并進(jìn)入就緒狀態(tài)。任務(wù)調(diào)度函數(shù)將進(jìn)行任務(wù)調(diào)度,決定當(dāng)前運(yùn)行的任務(wù)是否仍然為最高優(yōu)先級的任務(wù)。3.從中斷調(diào)用,不發(fā)生任務(wù)切換,這是因?yàn)楸仨毜鹊街袛嗲短椎淖钔鈱拥?/p>

24、ISR調(diào)用OSIntExit()函數(shù)后,任務(wù)切換才能發(fā)生。二二調(diào)用者:調(diào)用者:可以是任務(wù),也可以是中斷三三配置常量:配置常量:沒有單獨(dú)的配置常量。四四函數(shù)參數(shù):函數(shù)參數(shù):pevent 指向信號量的指針。該指針的值可以在建立該信號量時得到。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.5.2 6.1.5.2 返回值返回值 OSSemPost()函數(shù)的返回值有如下幾種:1.OS_NO_ERR 信號量成功置位,或者說成功發(fā)送;2.OS_SEM_OVF 信號量的值溢出;3.OS_ERR_EVENT_TYPE pevent

25、不是指向信號量的指針;4.OS_ERR_PEVENT_NULLpevent是空指針。6.1.5.3 6.1.5.3 原理與實(shí)現(xiàn)原理與實(shí)現(xiàn) 基本原理:從參數(shù)pevent指針?biāo)赶虻牡却蝿?wù)列表中查詢是否有任務(wù)正在等待信號量。若有,則將優(yōu)先級最高的任務(wù)置于就緒,并重新調(diào)度任務(wù);若無,則將信號量計數(shù)器的值加。6.1.5.4 6.1.5.4 應(yīng)用范例應(yīng)用范例 程序清單程序清單6.6 OSSemPost6.6 OSSemPost() ()應(yīng)用范例應(yīng)用范例OS_EVENT *AdcSem; / 定義一個指向信號量的ECB指針void Task(void *ppdata) reentrant INT8U e

26、rr; ppdata = ppdata; for (;) . err = OSSemPost(AdcSem); / 發(fā)送信號量 . 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.6 6.1.6 無等待地請求一個信號量,無等待地請求一個信號量,OSSemAcceptOSSemAccept() () 6.1.6.1 6.1.6.1 函數(shù)原型函數(shù)原型INT16U INT16U * *OSSemAcceptOSSemAccept(OS_EVENT OS_EVENT * *peventpevent)reentrantreent

27、rant一一功能:功能:OSSemAccept()函數(shù)用于查看資源是否可以使用或事件是否發(fā)生。與OSSemPend()函數(shù)不同,如果事件沒有發(fā)生,或者資源不可使用,OSSemAccept()函數(shù)不掛起任務(wù)。二二調(diào)用者:調(diào)用者:可以是任務(wù),也可以是中斷,由于中斷服務(wù)子程序不能等待,所以該函數(shù)常用于中斷調(diào)用。三三配置常量:配置常量:OS_SEM_ACCEPT_EN。四四函數(shù)參數(shù):函數(shù)參數(shù):peventpevent 指向需要查詢的信號量的指針。該指針的值可以在建立信號量時得到。6.1.6.2 6.1.6.2 返回值返回值1.當(dāng)調(diào)用OSSemAccept()函數(shù)時,如果信號量的值大于0,說明共享資源可

28、以使用,這個值被返回調(diào)用者,信號量的值減1;2.如果調(diào)用OSSemAccept()函數(shù)時,信號量的值等于0,說明共享資源不能使用,返回0。 嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.6.3 6.1.6.3 原理與實(shí)現(xiàn)原理與實(shí)現(xiàn) 函數(shù)的基本原理:通過直接查詢參數(shù)pevent 所指向的ECB中的成員變量 . .OSEventCnt的值來實(shí)現(xiàn)信號量的查詢。 程序清單程序清單6.8 OSSemAccept6.8 OSSemAccept() ()應(yīng)用范例應(yīng)用范例OS_EVENT *AdcSem; / 定義一個信號量ECB指

29、針void Task (void *ppdata) reentrant INT16U value; ppdata = ppdata; for (;) value = OSSemAccept(AdcSem);/ 查看共享資源是否可用或事件是否發(fā)生 if (value 0) . / 運(yùn)行處理代碼 . 6.1.6.4 6.1.6.4 應(yīng)用范例應(yīng)用范例OSSemAccept()函數(shù)應(yīng)用范例如程序清單6.8所示。嵌入式實(shí)時操作系統(tǒng)嵌入式實(shí)時操作系統(tǒng)C/OS-C/OS-教程教程 第六章第六章 信號量與互斥信號量信號量與互斥信號量6.1.7 6.1.7 查詢一個信號量的當(dāng)前狀態(tài),查詢一個信號量的當(dāng)前狀態(tài),O

30、SSemQuery()OSSemQuery() 6.1.7.1 6.1.7.1 函數(shù)原型函數(shù)原型INT8U OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA*ppdata) reentrant一一功能:功能:OSSemQuery()函數(shù)用于獲取指定信號量的信息。1.利用OSSemQuery()函數(shù)可以獲取信號量當(dāng)前計數(shù)值(.OSCnt)、.OSEventTbl和 .OSEventGrp,不查詢.OSEventType和.OSEventPtr。2.使用之前,應(yīng)用程序需要先建立類型為OS_SEM_DATA的數(shù)據(jù)結(jié)構(gòu),用來保存從信號量的事件控制塊中取得的數(shù)據(jù)。二二調(diào)用

31、者:調(diào)用者:可以是任務(wù),也可以是中斷。三三配置常量:配置常量:OS_SEM_QUERY_EN。四四函數(shù)參數(shù):函數(shù)參數(shù):1. 1.peventpevent 指向信號量的指針,該指針的值可以在建立信號量時得到;2.2.ppdatappdata 指向數(shù)據(jù)結(jié)構(gòu)OS_SEM_DATA的指針,該數(shù)據(jù)結(jié)構(gòu)包含下述成員:INT16U OSCntINT16U OSCnt 當(dāng)前信號量的計數(shù)值;INT8U OSEventTblOS_EVENT_TBL_SIZEINT8U OSEventTblOS_EVENT_TBL_SIZE 信號量等待隊(duì)列;INT8U OSEventGrpINT8U OSEventGrp 等待任務(wù)所在的組 嵌入式實(shí)時

溫馨提示

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

最新文檔

評論

0/150

提交評論