使用情況
當任務需要與多個事件的發生同步,可以使用事件標誌組。有兩種情況:
或同步——等待多個事件發生,任何乙個事件發生,任務就發生(同步)
與同步——等待多個事件發生,當所有事件都發生,任務就發生(同步)
使用方法
事件標誌組服務函式的實現**在os_flag.c檔案中,在編譯時,將os_cfg.h檔案中的配置常數os_cfg_flag+en設為1就可啟用這些服務函式。
常用的事件標誌組的服務函式有:
void osflagcreate(os_flag_grp *p_grp,
指向事件標誌組的指標
cpu_char
*p_name,
字串——事件標誌組的名字
os_flags
flags,
事件標誌組的初始值
os_err
err)
該函式返回的錯誤碼
os_flags osflagpend(os_flag_grp *p_grp,
指向事件標誌組的指標
os_flags
flags,
等待事件標誌組的哪一位
os_tick
timeout, 指定等待事件標誌組的超時時間(時鐘節拍數)
os_opt
opt,
cpu_ts
*p_ts,
指向時間戳
os_err
*p_err)
該函式返回的錯誤碼
opt 決定任務等待的條件
os_opt_pend_flag_clr_all
等待標誌組所有的標誌清零
os_opt_pend_flag_clr_any
等待標誌組任意乙個標誌清零
os_opt_pend_flag_set_all
等待標誌組所有的標誌置位
os_opt_pend_flag_set_any
等待標誌組任意乙個標誌置位
輔助選項
+os_opt_pend_flag_consume
等待條件滿足後將對應的標誌清零
+os_opt_pend_blocking (os_opt_pend_non_blocking)
在標誌組不滿足條件時,任務選擇掛起(不掛起)
os_flags osflagpost(os_flag_grp
*p_grp,
指向事件標誌組的指標
os_flags
flags,
決定對哪些標誌位進行置位或清零
os_opt
opt,
os_err
*p_err)
函式返回錯誤碼
opt
os_opt_post_flag_set 置位 os_opt_post_flag_clr 清零
使用例項
#define task1 (os_flags)0x0003
#define task2 (os_flags)0x0001
#define task3 (os_flags)0x0002
static os_flag_grp myflaggrp;
int main (void)
}}}
實驗結果
C OSIII 任務同步和通訊(一)
使用情況 任務間通常涉及傳送和接收,但是傳送速度和接收速度要匹配,不然就出問題了,為了解決這個問題在通訊的同時加上流量控制 同步 使用方法 用乙個訊號量和訊息佇列,模型如下 通訊傳送 等待接收完成訊號 傳送訊息 通訊接收 等待傳送訊息 傳送接收完成訊號 使用例項static os q my q st...
FreeRTOS 事件標誌組
訊號量同步只能與單個的事件或任務進行同步。事件標誌組與多個事件或任務進行同步 事件位用來表明某個事件是否發生,事件組是一組事件位 動態方法建立事件標誌組 eventgrouphandle t xeventgroupcreate void 設定事件位 eventbits t xeventgroupse...
ucos iii 事件標誌組
建立事件標誌組 osflagcreate os cfg flag en os flag grp enginestatus os err err osflagcreate enginestatus,engine status os flags 0,err 刪除事件標誌組 osflagdel os cf...