实现_事件 - 图1

运作机制

接收成功,使用xClearOnExit 选项来清除已接收到的事件类型。

读取模式

用 户可以自 定义通过传入 参数 xWaitForAllBits 选择读取模式,是等待所有感兴趣的事件还是等待感兴趣的任意一个事件

设置事件

对指定事件写入指定的事件类型,设置事件集合的对应事件位为 1,可 以一次同时写多个事件类型,设置事件成功可能会触发任务调度。
image.png

事件唤醒

image.png

事件控制块

  1. typedef struct xEventGroupDefinition {
  2. EventBits_t uxEventBits;
  3. List_t xTasksWaitingForBits;
  4. #if( configUSE_TRACE_FACILITY == 1 )
  5. UBaseType_t uxEventGroupNumber;
  6. #endif
  7. #if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) \ && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  8. uint8_t ucStaticallyAllocated;
  9. #endif
  10. } EventGroup_t;

事件函数

实现_事件 - 图4

事件创建函数 xEventGroupCreate()

image.png

(1)因为事件标志组是 FreeRTOS 的内部资源,也是需要 RAM 的,所以,在创建的时候,会向系统申请一块内存,大小是事件控制块大小 sizeof( EventGroup_t )。

(2):如果分配内存成功,那么久对事件控制块的成员变量进行初始化, 事件标志组变量清零,因为现在是创建事件,还没有事件发生,所以事件集合中所有位都 为 0,然后调用 vListInitialise()函数将事件控制块中的等待事件列表进行初始化,该列表用 于记录等待在此事件上的任务

事件删除函数 vEventGroupDelete()

image.png

事件组置位函数 xEventGroupSetBits()(任务)

image.png
image.png
image.png
image.png

事件组置位函数 xEventGroupSetBitsFromISR()(中断)

image.png
image.png

等待事件函数 xEventGroupWaitBits()

image.png
image.png

xEventGroupClearBits()与 xEventGroupClearBitsFromISR()

image.png
image.png