freeRTOS 事件標誌組

2022-09-14 04:21:08 字數 2444 閱讀 8172

任務需要與多個事件或任務進行同步時,需要用到事件標誌組。

乙個事件組就是一組的事件位, 事件組中的事件位通過位編號來訪問。

事件標誌組的資料型別為 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...