嵌入式第四章總結(jié)_第1頁(yè)
嵌入式第四章總結(jié)_第2頁(yè)
嵌入式第四章總結(jié)_第3頁(yè)
嵌入式第四章總結(jié)_第4頁(yè)
嵌入式第四章總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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)介

4.任務(wù)的同步與通信同步:多個(gè)任務(wù)共同協(xié)作完成一件事情,其間存在的直接制約關(guān)系叫做任務(wù)同步。任務(wù)同步的主要工作就是對(duì)多個(gè)相關(guān)任務(wù)在執(zhí)行次序上進(jìn)行調(diào)協(xié)調(diào),以使并發(fā)執(zhí)行的豬任務(wù)之間能有效的共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。任務(wù)間單向同步的過(guò)程:一個(gè)任務(wù)進(jìn)行I/O操作并等待信號(hào)回應(yīng),當(dāng)I/O操作完成時(shí),中斷服務(wù)程序或另一個(gè)任務(wù)發(fā)出信號(hào),該任務(wù)得到信號(hào)后繼續(xù)往下執(zhí)行。任務(wù)之間雙向同步的過(guò)程:運(yùn)行到某處的第一個(gè)任務(wù)發(fā)信號(hào)給第二個(gè)任務(wù),然后等待信號(hào)返回,通用地,當(dāng)?shù)诙€(gè)任務(wù)運(yùn)行到某處時(shí),發(fā)信號(hào)給第一個(gè)任務(wù)并等待返回信號(hào)。

互斥:每個(gè)進(jìn)程在進(jìn)入臨界區(qū)之前,應(yīng)先對(duì)要訪問(wèn)的臨界資源進(jìn)行檢查,看他是否正在被訪問(wèn),如果此刻該臨界資源未被訪問(wèn),進(jìn)程便可進(jìn)入臨界區(qū),對(duì)該資源進(jìn)行訪問(wèn),并設(shè)置它正在被訪問(wèn)的標(biāo)志,如果此刻該臨界資源正在被某個(gè)其他進(jìn)程訪問(wèn),則本進(jìn)程不能進(jìn)入臨界區(qū),這就是任務(wù)之間互斥的概念。通信:任務(wù)之間任務(wù)與中斷服務(wù)程序之間僅有同步是不夠的,他們之間還需要通信,所謂任務(wù)之間的通信是指任務(wù)之間或者任務(wù)與中斷服務(wù)程序之間的信息交互。在μC/OSⅡ中,這通過(guò)事件控制塊及其操作實(shí)現(xiàn)。事件:任務(wù)間通信所使用的信息載體,統(tǒng)稱為事件,主要有信號(hào)量、互斥型信號(hào)量、消息郵箱、消息隊(duì)列等。即用于通訊的數(shù)據(jù)結(jié)構(gòu)叫做事件控制塊對(duì)事件控制塊進(jìn)行的一些通用操作如下所述:OS_EventWaitListInit():初始化一個(gè)事件控制塊OS_EventTaskRdy():使一個(gè)任務(wù)進(jìn)入就緒狀態(tài)OS_EventWait():使一個(gè)任務(wù)進(jìn)入事件的等待隊(duì)列OS_EventTO():因?yàn)榈却瑫r(shí)而使一個(gè)任務(wù)進(jìn)入就緒狀態(tài)ECB初始化:1.建立空閑事件控制鏈表2.獲取一個(gè)空閑的事件控制塊鏈表3.初始化事件控制塊的任務(wù)等待隊(duì)列將一個(gè)任務(wù)掛載到就緒隊(duì)列將一個(gè)任務(wù)加入時(shí)間的等待隊(duì)列使等待超時(shí)的任務(wù)進(jìn)入就緒狀態(tài)信號(hào)量機(jī)制μC/OSⅡ中的信號(hào)量由兩部分組成,一部分是信號(hào)量的計(jì)數(shù)值,(它是一個(gè)16位的無(wú)符號(hào)整數(shù)),另一部分是由等待該信號(hào)量的任務(wù)組成的等任務(wù)等待隊(duì)列。用于同步的信號(hào)量,其初始值在信號(hào)量創(chuàng)建石質(zhì)為0,表明所同步的事件尚未發(fā)生用于互斥的信號(hào)量初始值為1,表明當(dāng)前沒(méi)有任務(wù)獲取該信號(hào)量,而用于資源管理的計(jì)數(shù)信號(hào)量,其初始值為N表明需要管理的最大資源數(shù)為N創(chuàng)建信號(hào)量:OS_EVENT*OSSemCreate(INT16Ucnt)刪除信號(hào)量:OS_EVENT*OSSemDel(OS_EVENT*pevent,INT8Uopt,INT8U*err)獲取信號(hào)量:OS_EVENT*OSSemPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)釋放信號(hào)量:INT8UOSSemPost(OS_EVENT*pevent)無(wú)等待請(qǐng)求一個(gè)信號(hào)量:INT16UOSSemAccept(OS_EVENT*pevent)查詢信號(hào)量當(dāng)前狀態(tài):INT8UOSSemQuery(OS_EVENT*pevent,OS_SEM_DATA*p_sem_data)重置信號(hào)量的值:voidOAAemSet(OS_EVENT&pevent,INT16Ucnt,INT8U*err)使用互斥信號(hào)量可能會(huì)出現(xiàn)的問(wèn)題:1、死鎖問(wèn)題:當(dāng)系統(tǒng)中的多個(gè)任務(wù)共享系統(tǒng)資源,而共享資源的數(shù)量不足以滿足各任務(wù)的需要時(shí),會(huì)引起各任務(wù)對(duì)資源的競(jìng)爭(zhēng)而產(chǎn)生死鎖。通常使用互斥信號(hào)量來(lái)完成對(duì)共享資源的互斥訪問(wèn),但如果使用不當(dāng)仍然會(huì)發(fā)生死鎖。

2、優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題:當(dāng)有多個(gè)任務(wù)需要使用共享資源時(shí),可能會(huì)出現(xiàn)高優(yōu)先級(jí)任務(wù)被低優(yōu)先級(jí)任務(wù)阻塞,并等待低優(yōu)先級(jí)任務(wù)執(zhí)行的現(xiàn)象。高優(yōu)先級(jí)任務(wù)需要等待低優(yōu)先級(jí)任務(wù)釋放共享資源,而低優(yōu)先級(jí)任務(wù)又在等待中等優(yōu)先級(jí)任務(wù)的現(xiàn)象被稱為優(yōu)先級(jí)反轉(zhuǎn)互斥鎖互斥所也叫做互斥型信號(hào)量任務(wù),可以用互斥型信號(hào)量實(shí)現(xiàn)對(duì)共享資源的獨(dú)占式處理。互斥型信號(hào)量也稱為mutex,可以在應(yīng)用程序代碼中用于解決優(yōu)先級(jí)問(wèn)題。μC/OSⅡ的互斥型信號(hào)量由三個(gè)元素組成:標(biāo)志,優(yōu)先級(jí),任務(wù)列表注意:中斷服務(wù)程序不可調(diào)動(dòng)互斥鎖創(chuàng)建互斥鎖:OS_EVENT*OSMutexCreate(INT8Uprio,INT8U*err)刪除互斥鎖:OS_EVENT*OSMutexDel(OS_EVENT*pevent,INT8Uopt,INT8U*err)(opt:刪除互斥鎖方式)等待獲取互斥鎖:voidOSMutexPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)(timeout:最大等待時(shí)間)釋放互斥鎖:INT8UOSMutexPost(OS_EVENT*pevent)查詢互斥鎖的狀態(tài):INT8UOSMutexQUERY(OS_EVENT*pevent,OS_MUTEX_DATA*p_mutex-data)無(wú)等待地獲取互斥鎖:INT8UOSMutexAccept(OS_EVENT*pevent,INT8U*err)郵箱機(jī)制郵箱作為μC/OSⅡ的一種事件類型,是用于實(shí)現(xiàn)μC/OSⅡ中任務(wù)之間或者任務(wù)與中斷服務(wù)程序之間的一種通信機(jī)制,它可以使一個(gè)任務(wù)或者中斷服務(wù)程序向另一個(gè)任務(wù)發(fā)送一個(gè)指針類型的變量。該指針指向一個(gè)包含了特定“消息”的數(shù)據(jù)結(jié)構(gòu)。中斷服務(wù)程序只能向郵箱發(fā)送消息,但是不能從郵箱獲取信息,其原因是防止中斷服務(wù)程序被消息阻塞建立一個(gè)郵箱:OS_EVENT*OSMboxCreate(OS_EVENT*pevent,void*msg)(中斷服務(wù)程序不能創(chuàng)建郵箱)刪除郵箱:OS_EVENT*OSMboxDel(OS_EVENT*pevent,INT8Uopt,INT8U*err)(opt:刪除方式;err:錯(cuò)誤返回參數(shù))從郵箱中獲取一條消息:OS_EVENT*OSMboxPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)發(fā)送一個(gè)消息到郵箱:INT8UOSMboxPost(OS_EVENT*pevent,void*msg)無(wú)等待的從郵箱中得到一個(gè)消息:void*OSMboxAccept(OS_EVENT*pevent,void*msg)查詢一個(gè)郵箱的狀態(tài):INT8UOSMboxQuery(OS_EVENT*pevent,OS_MBOX_DATA*p_mbox_data)消息隊(duì)列μC/OSⅡ?qū)崿F(xiàn)任務(wù)之間通信的另一種機(jī)制,它可以使一個(gè)任務(wù)或者中斷服務(wù)程序向另一個(gè)任務(wù)發(fā)送以指針?lè)绞蕉x的變量。每個(gè)指針指向的數(shù)據(jù)結(jié)構(gòu)變量,應(yīng)具體的應(yīng)用不同也會(huì)有所不同。建立消息隊(duì)列:OS_EVENT*OSQCreate(void**start,INT16Usize)(start:首地址;size:可容納的消息最大值)刪除消息隊(duì)列:OS_EVENT*OSQDel(os_EVENT*pevent,INT8Uopt,INT8U*err)(opt:刪除方式)從消息隊(duì)列中獲取一條消息:void*OSQPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)以FIFO(先進(jìn)先出,OSQPost()函數(shù)向向消息隊(duì)列發(fā)送的消息插入隊(duì)尾)方式像消息隊(duì)列發(fā)送一

溫馨提示

  • 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)論