標題: 任務(wù)行為同步 [打印本頁]

作者: heise    時間: 2014-8-19 23:09
標題: 任務(wù)行為同步
系統(tǒng)的整體功能是通過各個任務(wù) 和ISR的協(xié)同運行來實現(xiàn)的。運行步驟的協(xié)調(diào)就是行為同步
一 .用于行為同步的通信手段
1. 任務(wù)之間的動作配合和協(xié)調(diào)關(guān)系稱為行為同步。
體現(xiàn)在:
任務(wù)之間的運行按照某種預(yù)定的順序來進行。在一次同步過程中,一個任務(wù)(ISR)為控制方,使用OS的通信手段發(fā)出控制信息;另一個任務(wù)為被控制方,通過通信手段得到控制信息后就進入就緒狀態(tài),根據(jù)優(yōu)先級高低,或立即進入運行態(tài),或隨后進入運行態(tài)。
被控制方的運行狀態(tài)由控制方發(fā)出的信息來控制。
2.實現(xiàn)行為同步的通信手段
取值只能為01的信號量稱為二值信號量。 表示某種事件是否發(fā)生。
使用范圍:被控制方總能夠及時響應(yīng)控制方發(fā)出的信號,完成響應(yīng)處理任務(wù)。并在下一次信號到來之前進入等待狀態(tài)。
直接使用 :計數(shù)信號量或消息郵箱作為二值信號量。


使用范圍:被控制方不能保證在下一次信號來到之前處理完本次控制方發(fā)出的信號,但總體上可以響應(yīng)所有信號。
如果被控制方總能夠及時響應(yīng)控制方發(fā)出的信號,完成響應(yīng)任務(wù),并在下一次信號來之前進入等待狀態(tài),則計數(shù)信號量=二值信號量。
OSSemPost()
函數(shù)使 處于等待該信號量的任務(wù) 從等待狀態(tài)進入就緒狀態(tài)(不一定運行,要看任務(wù)優(yōu)先級),信號量不加1,如果沒有等待的任務(wù),則信號量加1
OSSemPend()
調(diào)用它來獲取信號量。
如果當(dāng)前信號量為0,則調(diào)用后任務(wù)掛起,等待控制方發(fā)送的信號量。
如果當(dāng)前信號量不為0,則調(diào)用后,將信號量-1,然后繼續(xù)運行,
可以實現(xiàn)多個任務(wù)包括ISR協(xié)同控制一個任務(wù),當(dāng)哥哥先關(guān)任務(wù)先后發(fā)出自己的信號后(是事件標準組的對應(yīng)標志有效),預(yù)定的邏輯運算結(jié)果有效,觸發(fā)被控制的任務(wù)(使其進入就緒狀態(tài))。
既提供同步的時刻,又向被控制方提供內(nèi)容。
消息郵箱里只能存放一條信息,在用消息郵箱進行同步控制需要滿足條件:任何時候消息的生產(chǎn)速度都比消息的消費速度慢。即,被控制任務(wù)總是在等待消息,這和二值信號量類似。
消息郵箱可以放任何類型消息。
消息郵箱可以當(dāng)二值信號量來用(void *)0表沒發(fā)生 (void*1)表示發(fā)生。
有四個函數(shù)
OSMbosCreat(void *msg)
msg為指向初始消息的指針。 當(dāng)作為行為同步時 msg應(yīng)設(shè)為(void *)0,表示郵箱為空。
OSMbosPost(OS_EVENT *pevent,void *msg)
pevent消息郵箱指針。msg為指向消息的指針。郵箱只存msg。
若有若干任務(wù)正在等待該郵箱中的消息,該函數(shù)會使等待消息的優(yōu)先級最高的任務(wù)進入就緒態(tài)。此時消息已被直接消費,所以msg不再放入郵箱中。
OSMbosPostOpt(OS_EVENT *pevent,void *msg,INT8U opt)
opt為消息分發(fā)方式。通常是廣播方式。若有若干任務(wù)正字等待該郵箱中的消息,則會使所有任務(wù)從等待態(tài)進入就緒態(tài),此時msg不再放入郵箱中。
OSMbosPend(OS_EVENT *pevent,INT16U timeout,INT8U* err)
函數(shù)返回值為指向消息的指針,通過這個指針就可以讀取郵箱傳遞的消息內(nèi)容。
消息隊列可以存放對個消息,能夠解決消息的臨時堆積問題。滿足條件。消息的平均生產(chǎn)時間比消息的平均消費時間長;否則再長的消息隊列也會溢出。
用一個指針數(shù)組來構(gòu)建消息隊列。
OSQ(void**start INT16U size)
start是消息隊列的初始位置。指針數(shù)組的起始地址。 size是消息隊列的長度
小結(jié):通信手段選擇
不需傳輸內(nèi)容:信號類   二值信號量 計數(shù)信號量  事件標志組
需要傳遞內(nèi)容:消息類  消息郵箱,消息隊列
任何時候生產(chǎn)速度比消費速度慢  簡單通信手段  二值信號量  事件標志組  消息郵箱
非周期性同步信息 有緩沖功能的通信手段   計數(shù)信號量 消息隊列
是多個信號的邏輯運算結(jié)果 事件標志組
合理安排同步點和任務(wù)優(yōu)先級時獲得預(yù)期效果的關(guān)鍵。
A:ISR和任務(wù)之間同步

注意:與ISR相關(guān)聯(lián)的任務(wù)的優(yōu)先級要足夠高。
B:兩個任務(wù)之間的單向同步

一般用左圖 掛起點為尾部  延時函數(shù)的時間要大于低優(yōu)先級任務(wù)處理事件的時間。
可以使用消息郵箱的分發(fā)功能,使一個事件同時觸發(fā)兩個任務(wù)。
C:兩個任務(wù)直接的雙向同步
通信雙方相互制約。生產(chǎn)者必須得到消費者的回復(fù)才能進行下一個消息的生產(chǎn)。能確認通信每次都成功,沒有遺漏。

采用事件標志組。采用邏輯與或者邏輯或。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1