




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、積件 12-9:COS-II信號(hào)量 ISR與任務(wù)同步 信號(hào)量的工作方式 123任務(wù)間同步 在中斷中獲得信號(hào)量資源同步 456積件 12-9:COS-II信號(hào)量 簡(jiǎn)介簡(jiǎn)介 信號(hào)量值大于信號(hào)量值大于0調(diào)用調(diào)用OSSemPost()信號(hào)量信號(hào)量值加信號(hào)量值加1 在實(shí)時(shí)多任務(wù)系統(tǒng)中,信號(hào)量被廣泛用于:任務(wù)間對(duì)共享資源的互斥、任務(wù)和中斷服務(wù)程序之間的同步、任務(wù)之間的同步。 信號(hào)量值減信號(hào)量值減1調(diào)用調(diào)用OSSemPend()信號(hào)量當(dāng)任務(wù)調(diào)用OSSemPost()函數(shù)發(fā)送信號(hào)量時(shí); 當(dāng)信號(hào)量值大于0,任務(wù)調(diào)用OSSemPend()函數(shù)接收信號(hào)量時(shí); 積件 12-9:COS-II信號(hào)量 信號(hào)量值等于信號(hào)量值
2、等于0延時(shí)等待信號(hào)量延時(shí)等待信號(hào)量注意:C/OS-II不允許在中斷服務(wù)程序中等待信號(hào)量。信號(hào)量信號(hào)量到來(lái),正常信號(hào)量到來(lái),正常返回返回 信號(hào)量值等于信號(hào)量值等于0延時(shí)等待信號(hào)量延時(shí)等待信號(hào)量延時(shí)到,無(wú)信號(hào)量延時(shí)到,無(wú)信號(hào)量,返回超時(shí)錯(cuò)誤,返回超時(shí)錯(cuò)誤調(diào)用調(diào)用OSSemPend()調(diào)用調(diào)用OSSemPend()當(dāng)信號(hào)量值等于0,任務(wù)調(diào)用OSSemPend()函數(shù)接收信號(hào)量時(shí)。 簡(jiǎn)介簡(jiǎn)介 積件 12-9:COS-II信號(hào)量 前面章節(jié)我們學(xué)習(xí)了互斥信號(hào)量,下面對(duì)計(jì)數(shù)信號(hào)量與互斥信號(hào)量做一個(gè)對(duì)比。取值能否用于資源同步以實(shí)現(xiàn)對(duì)共享資源的獨(dú)占能否解決優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題能否實(shí)現(xiàn)任務(wù)間以及中斷與任務(wù)間的同步實(shí) 現(xiàn)
3、 同 步時(shí) 能 否 傳遞數(shù)據(jù)互斥信號(hào)量互斥信號(hào)量0或1能能不能不能計(jì)數(shù)信號(hào)量計(jì)數(shù)信號(hào)量065535能不能能不能簡(jiǎn)介簡(jiǎn)介 積件 12-9:COS-II信號(hào)量 信號(hào)量的工作方式信號(hào)量的工作方式 在 實(shí) 際 的 應(yīng) 用 中 , 常 用 信 號(hào) 量 實(shí) 現(xiàn) 任 務(wù) 間 的 同 步 ,OSSemPend()和OSSemPost()會(huì)出現(xiàn)在不同任務(wù)的不同函數(shù)中,但不一定成對(duì)出現(xiàn)。 1.任務(wù)間同步注意:在實(shí)際的應(yīng)用中,還有多對(duì)多、一對(duì)多信號(hào)量操作的情況,但很不常見(jiàn),建議讀者不要設(shè)計(jì)出這樣的操作方式,因?yàn)檫@樣會(huì)帶來(lái)很多的麻煩。 任務(wù)任務(wù)3中斷中斷1任務(wù)任務(wù)2任務(wù)任務(wù)1任務(wù)任務(wù)2任務(wù)任務(wù)1 信號(hào)量1信號(hào)量信號(hào)量
4、信號(hào)量信號(hào)量信號(hào)量1信號(hào)量信號(hào)量一對(duì)一同步一對(duì)一同步多對(duì)一同步多對(duì)一同步積件 12-9:COS-II信號(hào)量 在嵌入式系統(tǒng)中,經(jīng)常使用信號(hào)量訪問(wèn)共享資源來(lái)實(shí)現(xiàn)資源同步。在使用時(shí),注意發(fā)送信號(hào)量函數(shù)OSSemPost()與等待信號(hào)量函數(shù)OSSemPend()必須成對(duì)出現(xiàn)在同一個(gè)任務(wù)調(diào)用的函數(shù)中,才能實(shí)現(xiàn)資源同步。2.資源同步信號(hào)量的工作方式信號(hào)量的工作方式 積件 12-9:COS-II信號(hào)量 ISR與任務(wù)同步與任務(wù)同步 下面以示例來(lái)說(shuō)明如何現(xiàn)實(shí)ISR與任務(wù)間同步。假設(shè)定時(shí)器1中斷服務(wù)程序發(fā)送信號(hào)量,任務(wù)完成了信號(hào)量的創(chuàng)建并在接收到信號(hào)量后讓蜂鳴器響一聲。處理流程如下。積件 12-9:COS-II信
5、號(hào)量 void Timer1_Exception (void) T1IR = 0 x01; VICVectAddr = 0; OSSemPost (sem);更新中斷優(yōu)先級(jí)清除中斷標(biāo)志發(fā)送信號(hào)量 中斷服務(wù)程序ISR示例代碼如下。ISR與任務(wù)同步與任務(wù)同步 積件 12-9:COS-II信號(hào)量 void TaskBeep (void *pdata) sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定時(shí)器1(省略) */ /* 目標(biāo)板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL();
6、 while (1) OSSemPend(sem, 0, &err); IO0CLR = BEEP; OSTimeDly(60); IO0SET = BEEP; OSTimeDly(60); 創(chuàng)建信號(hào)量初始化工作蜂鳴器響延時(shí)60個(gè)節(jié)拍蜂鳴器滅延時(shí)60個(gè)節(jié)拍進(jìn)入臨界段退出臨界段等待信號(hào)量讀者補(bǔ)出相應(yīng)的代碼 蜂鳴器報(bào)警任務(wù)示例代碼如下。ISR與任務(wù)同步與任務(wù)同步 積件 12-9:COS-II信號(hào)量 發(fā)送信號(hào)量信號(hào)量信號(hào)量任務(wù)間同步任務(wù)間同步 收到信號(hào)量.等待信號(hào)量.任務(wù)1任務(wù)2任務(wù)優(yōu)先級(jí)足夠高任務(wù)同步 在嵌入式系統(tǒng)中,經(jīng)常使用信號(hào)量來(lái)實(shí)現(xiàn)多個(gè)任務(wù)之間的同步。而用來(lái)實(shí)現(xiàn)任務(wù)間同步的信號(hào)量在創(chuàng)
7、建時(shí)初始值可以為0或者1,這是由OSSemCreate()函數(shù)來(lái)實(shí)現(xiàn)的。積件 12-9:COS-II信號(hào)量 讓一個(gè)LED以0.5Hz的頻率閃耀,每按鍵一次,LED閃耀一次。我們通過(guò)此例來(lái)說(shuō)明如何使用信號(hào)量實(shí)現(xiàn)任務(wù)間同步,假設(shè)TaskLED為高優(yōu)先級(jí)的任務(wù)。兩個(gè)任務(wù)處理流程如下。任務(wù)間同步任務(wù)間同步 積件 12-9:COS-II信號(hào)量 TaskKEY任務(wù)主要代碼如下。void TaskKEY (void *pdata) while (1) while (IO0PIN & KEY1) != 0) OSTimeDly(1); OSSemPost (sem); while (IO0PIN &a
8、mp; KEY1) = 0) OSTimeDly(1); 延時(shí)1個(gè)節(jié)拍,用于任務(wù)切換延時(shí)1個(gè)節(jié)拍,用于任務(wù)切換等待按健按下等待按健釋放初始化代碼發(fā)送信號(hào)量任務(wù)間同步任務(wù)間同步 積件 12-9:COS-II信號(hào)量 void TaskLED (void *pdata) sem = OSSemCreate(0); while (1) OSSemPend(sem, 0, &err); IO0CLR = LED1; OSTimeDly(OS_TICKS_PER_SEC); IO0SET = LED1; OSTimeDly(OS_TICKS_PER_SEC); 創(chuàng)建信號(hào)量,初始化為0初始化工作LE
9、D亮延時(shí)1sLED滅延時(shí)1s TaskLED任務(wù)主要代碼如下。等待消息任務(wù)間同步任務(wù)間同步 積件 12-9:COS-II信號(hào)量 資源同步資源同步 為了說(shuō)明使用信號(hào)量訪問(wèn)共享資源實(shí)現(xiàn)資源同步,設(shè)計(jì)兩個(gè)任務(wù),它們以不同的頻率讓LED點(diǎn)亮30個(gè)時(shí)鐘節(jié)拍,然后熄滅60個(gè)時(shí)鐘節(jié)拍,要求這兩個(gè)任務(wù)不會(huì)互相干擾。假設(shè)TaskLED0為高優(yōu)先級(jí)任務(wù),下面是兩個(gè)任務(wù)的處理流程。積件 12-9:COS-II信號(hào)量 void LED (void) INT8U err; OSSemPend(sem, 0, &err); IO0CLR = LED1; OSTimeDly(30); IO0SET = LED1;
10、OSTimeDly(60); OSSemPost(sem);等待信號(hào)量LED亮延時(shí)30個(gè)節(jié)拍延時(shí)60個(gè)節(jié)拍 為了實(shí)現(xiàn)資源同步,我們需要保證OSSemPost()與OSSemPend()成對(duì)在同一個(gè)任務(wù)函數(shù)中調(diào)用,所以我們編寫(xiě)一個(gè)庫(kù)函數(shù)LED()供兩個(gè)任務(wù)調(diào)用,代碼如下。LED滅發(fā)送信號(hào)量資源同步資源同步 積件 12-9:COS-II信號(hào)量 void TaskLED0 (void *pdata) sem = OSSemCreate(1); while (1) LED(); OSTimeDly(1000); 初始化工作void TaskLED1 (void *pdata) pdata = pdat
11、a; while (1) LED(); OSTimeDly(2000); 調(diào)用LED函數(shù)延時(shí)1000個(gè)節(jié)拍防止編譯器報(bào)警調(diào)用LED函數(shù)延時(shí)2000個(gè)節(jié)拍 下面給出兩個(gè)LED任務(wù)的主要處理代碼。創(chuàng)建信號(hào)量用來(lái)實(shí)現(xiàn)資源同步的信號(hào)量在創(chuàng)建時(shí)初始值為相同資源的數(shù)目,不過(guò)嵌入式系統(tǒng)中極少出現(xiàn)完全等同的資源,所以一般初始化為1。LED()函數(shù)已包含互斥資源同步資源同步 積件 12-9:COS-II信號(hào)量 void TaskPost (void *pdata) sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定時(shí)器1(省略) */ /* 目標(biāo)板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL(); while (1) OSTimeDly(OS_TICKS_PER_SEC * 5/3); OSSemPost (sem); 創(chuàng)建信號(hào)量初始化工作發(fā)送信號(hào)量進(jìn)入臨界段退出臨界段延時(shí)5/3秒讀者補(bǔ)出相應(yīng)的代碼 發(fā)送信號(hào)量任務(wù)主要代碼如下。在中斷中獲得信號(hào)量在中斷中獲得信號(hào)量積件 12-9:COS-II信號(hào)量 void Timer1_Exception (void) T1IR
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湛江市重點(diǎn)中學(xué)2024-2025學(xué)年初三下學(xué)期第二學(xué)段模塊考試英語(yǔ)試題試卷含答案
- 上海出版印刷高等專科學(xué)校《Unix系統(tǒng)原理與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東女子學(xué)院《機(jī)能實(shí)驗(yàn)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江東方職業(yè)技術(shù)學(xué)院《綜合商務(wù)英語(yǔ)技能訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 昆明學(xué)院《幼兒舞蹈與編創(chuàng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 鄭州軟件職業(yè)技術(shù)學(xué)院《電影技術(shù)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州信息科技職業(yè)學(xué)院《紀(jì)錄片創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶三峽職業(yè)學(xué)院《現(xiàn)代生物醫(yī)藥研究進(jìn)展》2023-2024學(xué)年第二學(xué)期期末試卷
- 佳木斯職業(yè)學(xué)院《數(shù)據(jù)分析與語(yǔ)言》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西機(jī)電職業(yè)技術(shù)學(xué)院《精神病護(hù)理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 農(nóng)貿(mào)市場(chǎng)計(jì)量管理制度(3篇)
- 拼音bpmfdtnl課件教學(xué)課件最新
- 一級(jí)建造師《港口與航道工程管理與實(shí)務(wù)》課件專業(yè)工程技術(shù)
- 國(guó)家開(kāi)放大學(xué)《社會(huì)心理學(xué)》形考任務(wù)1-4參考答案
- 《工程制圖》期末考試試卷附答案
- 重癥患者的容量管理課件
- 二年級(jí)下冊(cè)道德與法治 課件-9 小水滴的訴說(shuō) 部編版 (共16張PPT)
- 生產(chǎn)設(shè)備點(diǎn)檢記錄表
- 轉(zhuǎn)化膜與著色技術(shù)
- DL∕T 1286-2021 火電廠煙氣脫硝催化劑檢測(cè)技術(shù)規(guī)范
- 水利工程管理單位定崗標(biāo)準(zhǔn)(試點(diǎn))
評(píng)論
0/150
提交評(píng)論