事件基础学习

本文介绍了事件作为一种任务间通信机制,强调其在一对多或多对多同步中的优势,以及事件控制块、接口函数如创建、删除、置位、等待和清除事件的使用。
摘要由CSDN通过智能技术生成

事件的基本概念

事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。

与信号量的不同点:它可以实现一对多,多对多的同步。

事件的应用场景

事件可使用于多种场合,它能够在一定程度上替代信号量,用于任务与任务间,中断与任务间的
同步。
在某些场合,可能需要多个事件发生了才能进行下一步操作。

事件控制块与接口函数

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() 函数用于清除事件组指定的位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值