找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2827|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

任務(wù)行為同步

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:60266 發(fā)表于 2014-8-19 23:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
系統(tǒng)的整體功能是通過各個(gè)任務(wù) 和ISR的協(xié)同運(yùn)行來實(shí)現(xiàn)的。運(yùn)行步驟的協(xié)調(diào)就是行為同步。
一 .用于行為同步的通信手段
1. 任務(wù)之間的動(dòng)作配合和協(xié)調(diào)關(guān)系稱為行為同步。
體現(xiàn)在:
任務(wù)之間的運(yùn)行按照某種預(yù)定的順序來進(jìn)行。在一次同步過程中,一個(gè)任務(wù)(ISR)為控制方,使用OS的通信手段發(fā)出控制信息;另一個(gè)任務(wù)為被控制方,通過通信手段得到控制信息后就進(jìn)入就緒狀態(tài),根據(jù)優(yōu)先級(jí)高低,或立即進(jìn)入運(yùn)行態(tài),或隨后進(jìn)入運(yùn)行態(tài)。
被控制方的運(yùn)行狀態(tài)由控制方發(fā)出的信息來控制。
2.實(shí)現(xiàn)行為同步的通信手段
  • 二值信號(hào)量
取值只能為01的信號(hào)量稱為二值信號(hào)量。 表示某種事件是否發(fā)生。
使用范圍:被控制方總能夠及時(shí)響應(yīng)控制方發(fā)出的信號(hào),完成響應(yīng)處理任務(wù)。并在下一次信號(hào)到來之前進(jìn)入等待狀態(tài)。
直接使用 :計(jì)數(shù)信號(hào)量或消息郵箱作為二值信號(hào)量。


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

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

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

  • 兩個(gè)以上任務(wù)同步一個(gè)任務(wù)
采用事件標(biāo)志組。采用邏輯與或者邏輯或。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表