事件的基本概念
事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。
与信号量的不同点:它可以实现一对多,多对多的同步。
事件的应用场景
事件可使用于多种场合,它能够在一定程度上替代信号量,用于任务与任务间,中断与任务间的
同步。
在某些场合,可能需要多个事件发生了才能进行下一步操作。
事件控制块与接口函数
1 typedef struct {
2 const char *name; //事件名
3 uint32_t attr_bits; //FreeRTOS 未使用到
4 void *cb_mem; //控制块 (静态创建) 内存
5 uint32_t cb_size; //控制块 (静态创建) 大小
6 } osEventFlagsAttr_t;
事件创建函数
osEventFlagsId_t osEventFlagsNew (const osEventFlagsAttr_t *attr); attr 描述事件组属性的结构体
事件删除函数
osStatus_t osEventFlagsDelete (osEventFlagsId_t ef_id); ef_id事件组id
事件组置位函数
xEventGroupSetBits() 用于置位事件组中指定的位
uint32_t osEventFlagsSet (osEventFlagsId_t ef_id, uint32_t flags);
事件等待函数
等待指定事件的函数——osEventFlagsWait(),通过这个函数,任务可以知道事件标志组中的哪些位,有什么事件发生了,然后通过“逻辑与”、“逻辑或”等操作对感兴趣的事件进行获取,并且这个函数实现了等待超时机制,当且仅当任务等待的事件发生时,任务才能获取到事件信息。
清楚事件函数
osEventFlagsClear() 函数用于清除事件组指定的位