任務需要與多個事件或任務進行同步時,需要用到事件標誌組。
乙個事件組就是一組的事件位, 事件組中的事件位通過位編號來訪問。
事件標誌組的資料型別為 eventgrouphandle_t。
事件標誌組中的所有事件位都儲存在乙個無符號的 eventbits_t 型別的變數中。
typedef ticktype_t eventbits_t;#if( configuse_16_bit_ticks == 1 )typedef uint16_t ticktype_t;
#define portmax_delay ( ticktype_t ) 0xffff
#else
typedef uint32_t ticktype_t;
#define portmax_delay ( ticktype_t ) 0xfffffffful
#define porttick_type_is_atomic 1
#endif
eventbits_t 型別的變數可以儲存(32-8=24個)(或16-8=8個)事件位,另外高 8 位另有他用。
建立eventgrouphandle_t xeventgroupcreate( void
) eventgrouphandle_t xeventgroupcreatestatic( staticeventgroup_t *pxeventgroupbuffer )
設定eventbits_t xeventgroupclearbits( eventgrouphandle_t xeventgroup,
const
eventbits_t uxbitstoclear ); 返回事件清零之前的狀態
basetype_t xeventgroupclearbitsfromisr( eventgrouphandle_t xeventgroup,
const
eventbits_t uxbitstoset ); 返回成功或失敗
eventbits_t xeventgroupsetbits( eventgrouphandle_t xeventgroup,
const
eventbits_t uxbitstoset );
basetype_t xeventgroupsetbitsfromisr( eventgrouphandle_t xeventgroup,
const eventbits_t uxbitstoset, basetype_t * pxhigherprioritytaskwoken );
用法://事件標誌組控制代碼
extern eventgrouphandle_t eventgrouphandler;
//中斷服務函式
void exti3_irqhandler(void)
}__hal_gpio_exti_clear_it(gpio_pin_3); //清除中斷標誌位}獲取
eventbits_t xeventgroupgetbits( eventgrouphandle_t xeventgroup )
eventbits_t xeventgroupgetbitsfromisr( eventgrouphandle_t xeventgroup )
等待eventbits_t xeventgroupwaitbits( eventgrouphandle_t xeventgroup,
const eventbits_t uxbitstowaitfor,
const basetype_t xclearonexit,
const basetype_t xwaitforallbits,
const ticktype_t xtickstowait );
uxbitstowaitfor: 要等待 bit0和(或)bit2的時候此引數就是 0x05,如果要等待 bit0 和(或)bit1 和(或)bit2 的時候此引數就是 0x07,以此類推。
xclearonexit: 此引數要是為 pdtrue 的話,那麼在退出此函式之前由引數 uxbitstowaitfor所設定的這些事件位就會清零。
xwaitforallbits: 此引數如果設定為 pdtrue 的話, 當 uxbitstowaitfor 所設定的這些事件位都置 1, 或者指定的阻塞時間到的時候函式 xeventgroupwaitbits()才會返回。
當此函式為 pdfalse 的話,只要 uxbitstowaitfor 所設定的這些事件位其中的任意乙個置1,或者指定的阻塞時間到的話函式xeventgroupwaitbits()就會返回。
返回值:
返回當所等待的事件位置 1 以後的事件標誌組的值,或者阻塞時間到。
根據這個值我們就知道哪些事件位置 1 了。
如果函式因為阻塞時間到而返回
的話那麼這個返回值就不代表任何的含義。
函式的**在 event_groups.c/.h 裡面
留白
FreeRTOS 事件標誌組
訊號量同步只能與單個的事件或任務進行同步。事件標誌組與多個事件或任務進行同步 事件位用來表明某個事件是否發生,事件組是一組事件位 動態方法建立事件標誌組 eventgrouphandle t xeventgroupcreate void 設定事件位 eventbits t xeventgroupse...
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...