電子與信息技術(shù)專業(yè)ppt課件_第1頁
電子與信息技術(shù)專業(yè)ppt課件_第2頁
電子與信息技術(shù)專業(yè)ppt課件_第3頁
電子與信息技術(shù)專業(yè)ppt課件_第4頁
電子與信息技術(shù)專業(yè)ppt課件_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 電子與信息技術(shù)專業(yè)電子與信息技術(shù)專業(yè)ARM嵌入式技術(shù)課程嵌入式技術(shù)課程積件 12-9:COS-II信號量 制造教師:謝利民全國職業(yè)教育電子與信息技術(shù)專業(yè)數(shù)字化資源共建共享江蘇無錫機電高等職業(yè)技術(shù)學(xué)校WUXI MACHINERY AND ELECTRON HIGER PROFESSIONAL AND TECHNIAL SCHOOL 積件 12-9:COS-II信號量 簡介 ISR與義務(wù)同步 信號量的任務(wù)方式 123義務(wù)間同步 在中斷中獲得信號量資源同步 456 積件 12-9:COS-II信號量 簡介簡介 信號量值大于信號量值大于0調(diào)用調(diào)用OSSemPost()信號量信號量值加信號量值加1 在

2、實時多義務(wù)系統(tǒng)中,信號量被廣泛用于:義務(wù)間對共享資源的互斥、義務(wù)和中斷效力程序之間的同步、義務(wù)之間的同步。 信號量值減信號量值減1調(diào)用調(diào)用OSSemPend()信號量當義務(wù)調(diào)用OSSemPost()函數(shù)發(fā)送信號量時; 當信號量值大于0,義務(wù)調(diào)用OSSemPend()函數(shù)接納信號量時; 積件 12-9:COS-II信號量 信號量值等于信號量值等于0延時等待信號量延時等待信號量留意:C/OS-II不允許在中斷效力程序中等待信號量。信號量信號量到來,正常信號量到來,正常前往前往 信號量值等于信號量值等于0延時等待信號量延時等待信號量延時到,無信號量延時到,無信號量,前往超時錯誤,前往超時錯誤調(diào)用調(diào)用

3、OSSemPend()調(diào)用調(diào)用OSSemPend()當信號量值等于0,義務(wù)調(diào)用OSSemPend()函數(shù)接納信號量時。 簡介簡介 積件 12-9:COS-II信號量 前面章節(jié)我們學(xué)習(xí)了互斥信號量,下面對計數(shù)信號量與互斥信號量做一個對比。取值能否用于資源同步以實現(xiàn)對共享資源的獨占能否解決優(yōu)先級反轉(zhuǎn)問題能否實現(xiàn)任務(wù)間以及中斷與任務(wù)間的同步實 現(xiàn) 同 步時 能 否 傳遞數(shù)據(jù)互斥信號量互斥信號量0或1能能不能不能計數(shù)信號量計數(shù)信號量065535能不能能不能簡介簡介 積件 12-9:COS-II信號量 信號量的任務(wù)方式信號量的任務(wù)方式 在 實 踐 的 運 用 中 , 常 用 信 號 量 實 現(xiàn) 義 務(wù)

4、間 的 同 步 ,OSSemPend()和OSSemPost()會出如今不同義務(wù)的不同函數(shù)中,但不一定成對出現(xiàn)。 1.義務(wù)間同步留意:在實踐的運用中,還有多對多、一對多信號量操作的情況,但很不常見,建議讀者不要設(shè)計出這樣的操作方式,由于這樣會帶來很多的費事。 義務(wù)義務(wù)3中斷中斷1義務(wù)義務(wù)2義務(wù)義務(wù)1義務(wù)義務(wù)2義務(wù)義務(wù)1 信號量1信號量信號量信號量信號量信號量1信號量信號量一對一同步一對一同步多對一同步多對一同步 積件 12-9:COS-II信號量 在嵌入式系統(tǒng)中,經(jīng)常運用信號量訪問共享資源來實現(xiàn)資源同步。在運用時,留意發(fā)送信號量函數(shù)OSSemPost()與等待信號量函數(shù)OSSemPend()必

5、需成對出如今同一個義務(wù)調(diào)用的函數(shù)中,才干實現(xiàn)資源同步。2.資源同步信號量的任務(wù)方式信號量的任務(wù)方式 積件 12-9:COS-II信號量 ISR與義務(wù)同步與義務(wù)同步 下面以例如來闡明如何現(xiàn)實ISR與義務(wù)間同步。假設(shè)定時器1中斷效力程序發(fā)送信號量,義務(wù)完成了信號量的創(chuàng)建并在接納到信號量后讓蜂鳴器響一聲。處置流程如下。 積件 12-9:COS-II信號量 void Timer1_Exception (void) T1IR = 0 x01; VICVectAddr = 0; OSSemPost (sem);更新中斷優(yōu)先級去除中斷標志發(fā)送信號量 中斷效力程序ISR例如代碼如下。ISR與義務(wù)同步與義務(wù)同步

6、 積件 12-9:COS-II信號量 void TaskBeep (void *pdata) sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定時器1(省略) */ /* 目的板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL(); while (1) OSSemPend(sem, 0, &err); IO0CLR = BEEP; OSTimeDly(60); IO0SET = BEEP; OSTimeDly(60); 創(chuàng)建信號量初始化任務(wù)蜂鳴器響延時60個節(jié)拍蜂鳴器滅延時

7、60個節(jié)拍進入臨界段退出臨界段等待信號量讀者補出相應(yīng)的代碼 蜂鳴器報警義務(wù)例如代碼如下。ISR與義務(wù)同步與義務(wù)同步 積件 12-9:COS-II信號量 發(fā)送信號量信號量信號量義務(wù)間同步義務(wù)間同步 收到信號量.等待信號量.義務(wù)1義務(wù)2義務(wù)優(yōu)先級足夠高義務(wù)同步 在嵌入式系統(tǒng)中,經(jīng)常運用信號量來實現(xiàn)多個義務(wù)之間的同步。而用來實現(xiàn)義務(wù)間同步的信號量在創(chuàng)建時初始值可以為0或者1,這是由OSSemCreate()函數(shù)來實現(xiàn)的。 積件 12-9:COS-II信號量 讓一個LED以0.5Hz的頻率閃耀,每按鍵一次,LED閃耀一次。我們經(jīng)過此例來闡明如何運用信號量實現(xiàn)義務(wù)間同步,假設(shè)TaskLED為高優(yōu)先級的義

8、務(wù)。兩個義務(wù)處置流程如下。義務(wù)間同步義務(wù)間同步 積件 12-9:COS-II信號量 TaskKEY義務(wù)主要代碼如下。void TaskKEY (void *pdata) while (1) while (IO0PIN & KEY1) != 0) OSTimeDly(1); OSSemPost (sem); while (IO0PIN & KEY1) = 0) OSTimeDly(1); 延時1個節(jié)拍,用于義務(wù)切換延時1個節(jié)拍,用于義務(wù)切換等待按健按下等待按健釋放初始化代碼發(fā)送信號量義務(wù)間同步義務(wù)間同步 積件 12-9:COS-II信號量 void TaskLED (void *

9、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)建信號量,初始化為0初始化任務(wù)LED亮延時1sLED滅延時1s TaskLED義務(wù)主要代碼如下。等待音訊義務(wù)間同步義務(wù)間同步 積件 12-9:COS-II信號量 資源同步資源同步 為了闡明運用信號量訪問共享資源實現(xiàn)資源同步,設(shè)計兩個義務(wù),它們以不同的頻率讓LED點亮30個時鐘節(jié)拍,然后

10、熄滅60個時鐘節(jié)拍,要求這兩個義務(wù)不會相互關(guān)擾。假設(shè)TaskLED0為高優(yōu)先級義務(wù),下面是兩個義務(wù)的處置流程。 積件 12-9:COS-II信號量 void LED (void) INT8U err; OSSemPend(sem, 0, &err); IO0CLR = LED1; OSTimeDly(30); IO0SET = LED1; OSTimeDly(60); OSSemPost(sem);等待信號量LED亮延時30個節(jié)拍延時60個節(jié)拍 為了實現(xiàn)資源同步,我們需求保證OSSemPost()與OSSemPend()成對在同一個義務(wù)函數(shù)中調(diào)用,所以我們編寫一個庫函數(shù)LED()供兩個

11、義務(wù)調(diào)用,代碼如下。LED滅發(fā)送信號量資源同步資源同步 積件 12-9:COS-II信號量 void TaskLED0 (void *pdata) sem = OSSemCreate(1); while (1) LED(); OSTimeDly(1000); 初始化任務(wù)void TaskLED1 (void *pdata) pdata = pdata; while (1) LED(); OSTimeDly(2000); 調(diào)用LED函數(shù)延時1000個節(jié)拍防止編譯器報警調(diào)用LED函數(shù)延時2000個節(jié)拍 下面給出兩個LED義務(wù)的主要處置代碼。創(chuàng)建信號量用來實現(xiàn)資源同步的信號量在創(chuàng)建時初始值為一樣資源

12、的數(shù)目,不過嵌入式系統(tǒng)中極少出現(xiàn)完全等同的資源,所以普通初始化為1。LED()函數(shù)已包含互斥資源同步資源同步 積件 12-9:COS-II信號量 在中斷中獲得信號量在中斷中獲得信號量 建立一個義務(wù),它每53 秒發(fā)送一次信號量。定時器1每1秒鐘產(chǎn)生一次中斷,在中斷效力程序中獲得信號量,假設(shè)有,那么翻轉(zhuǎn)LED。以此例如來闡明如何在中斷中獲得信號量,運用函數(shù)OSSemAccept()實現(xiàn)。兩個義務(wù)處置流程如下。 積件 12-9:COS-II信號量 void TaskPost (void *pdata) sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定時器1(省略) */ /* 目的板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL(); while (1) OSTimeDly(OS_TICKS_PER_SEC * 5/3); OSSemPost (sem); 創(chuàng)建信號量初始化任務(wù)發(fā)送信號量進入臨界段退出臨界段延時5/3秒讀者補出相應(yīng)的代碼 發(fā)送信號量義務(wù)主要代碼如下。在中斷中獲得信號量在中斷中獲得信號量 積件 12-9:COS-II信號量 void Timer1_Except

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論