开发指导
使用场景
事件可应用于多种任务同步场景,在某些同步场景下可替代信号量。
功能
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,清除指定的事件类型。
 
平台差异性
无。