开发指导
使用场景
事件可应用于多种任务同步场景,在某些同步场景下可替代信号量。
功能
Huawei LiteOS 的事件模块为用户提供下面几种功能,接口详细信息可以查看API参考。
功能分类 |
接口名 |
描述 |
---|---|---|
初始化事件 |
LOS_EventInit |
初始化一个事件控制块 |
读/写事件 |
LOS_EventRead |
读取指定事件类型,超时时间为相对时间:单位为Tick |
LOS_EventWrite |
写指定的事件类型 |
|
清除事件 |
LOS_EventClear |
清除指定的事件类型 |
校验事件掩码 |
LOS_EventPoll |
根据用户传入的事件ID、事件掩码及读取模式,返回用户传入的事件是否符合预期 |
销毁事件 |
LOS_EventDestroy |
销毁指定的事件控制块 |
Event错误码
对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。
序号 |
定义 |
实际值 |
描述 |
参考解决方案 |
---|---|---|---|---|
1 |
LOS_ERRNO_EVENT_SETBIT_INVALID |
0x02001c00 |
写事件时,将事件ID的第25个bit设置为1。这个比特位OS内部保留,不允许设置为1 |
事件ID的第25bit置为0 |
2 |
LOS_ERRNO_EVENT_READ_TIMEOUT |
0x02001c01 |
读事件超时 |
增加等待时间或者重新读取 |
3 |
LOS_ERRNO_EVENT_EVENTMASK_INVALID |
0x02001c02 |
入参的事件ID是无效的 |
传入有效的事件ID参数 |
4 |
LOS_ERRNO_EVENT_READ_IN_INTERRUPT |
0x02001c03 |
在中断中读取事件 |
启动新的任务来获取事件 |
5 |
LOS_ERRNO_EVENT_FLAGS_INVALID |
0x02001c04 |
读取事件的mode无效 |
传入有效的mode参数 |
6 |
LOS_ERRNO_EVENT_READ_IN_LOCK |
0x02001c05 |
任务锁住,不能读取事件 |
解锁任务,再读取事件 |
7 |
LOS_ERRNO_EVENT_PTR_NULL |
0x02001c06 |
传入的参数为空指针 |
传入非空入参 |
8 |
LOS_ERRNO_EVENT_READ_IN_SYSTEM_TASK |
0x02001c07 |
在系统任务中读取事件,如idle和软件定时器 |
启动新的任务来获取事件 |
9 |
LOS_ERRNO_EVENT_SHOULD_NOT_DESTORY |
0x02001c08 |
事件链表上仍有任务,无法被销毁 |
先检查事件链表是否为空 |
错误码定义见错误码简介。8~15位的所属模块为事件模块,值为0x1c。
开发流程
使用事件模块的典型流程如下:
- 执行make menuconfig命令,进入Kernel ---> Enable Event菜单,完成事件模块的配置。
配置项
含义
取值范围
默认值
依赖
LOSCFG_BASE_IPC_EVENT
事件功能的裁剪开关
YES/NO
YES
无
LOSCFG_BASE_IPC_EVENT_LIMIT
最大支持的事件控制块数量
无
1024
LOSCFG_BASE_IPC_EVENT
- 调用事件初始化LOS_EventInit接口,初始化事件等待队列。
- 写事件LOS_EventWrite,写入指定的事件类型。
- 读事件LOS_EventRead,可以选择读取模式。
- 清除事件LOS_EventClear,清除指定的事件类型。
平台差异性
无。