RT-Thread API参考手册  3.1.1
嵌入式实时操作系统

事件接口 更多...

结构体

struct  rt_event
 事件控制块 更多...
 

宏定义

#define RT_EVENT_FLAG_AND   0x01
 逻辑与参数
 
#define RT_EVENT_FLAG_OR   0x02
 逻辑或参数
 
#define RT_EVENT_FLAG_CLEAR   0x04
 清除参数
 

类型定义

typedef struct rt_eventrt_event_t
 事件类型指针定义
 

函数

rt_err_t rt_event_init (rt_event_t event, const char *name, rt_uint8_t flag)
 初始化事件集 更多...
 
rt_err_t rt_event_detach (rt_event_t event)
 脱离事件集 更多...
 
rt_event_t rt_event_create (const char *name, rt_uint8_t flag)
 创建事件集 更多...
 
rt_err_t rt_event_delete (rt_event_t event)
 删除事件集 更多...
 
rt_err_t rt_event_send (rt_event_t event, rt_uint32_t set)
 发送事件 更多...
 
rt_err_t rt_event_recv (rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_int32_t timeout, rt_uint32_t *recved)
 接收事件 更多...
 

详细描述

事件接口

事件主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。 事件另外一个特性是,接收线程可等待多种事件,即多个事件对应一个线程或多个线程。 同时按照线程等待的参数,可选择是 “逻辑或” 触发还是 “逻辑与” 触发。

RT-Thread 定义的事件有以下特点:

函数说明

rt_err_t rt_event_init ( rt_event_t  event,
const char *  name,
rt_uint8_t  flag 
)

初始化事件集

该函数将初始化事件集对象,并加入到系统对象容器中进行管理。

参数
event事件集对象的句柄
name事件集的名称
flag事件集的标志,它可以取值:RT_IPC_FLAG_FIFO或RT_IPC_FLAG_PRIO
返回
RT_EOK
示例:
event_sample.c.
rt_err_t rt_event_detach ( rt_event_t  event)

脱离事件集

该函数将把一个事件从内核管理器中脱离

参数
event事件对象的句柄
返回
RT_EOK
rt_event_t rt_event_create ( const char *  name,
rt_uint8_t  flag 
)

创建事件集

调用该函数接口时,系统会从对象管理器中分配事件对象,然后进行对象的初始化, IPC对象初始化,并把set设置成0。

参数
name事件集的名称
flag事件集的标志,它可以取值:RT_IPC_FLAG_FIFO或RT_IPC_FLAG_PRIO
返回
返回创建的事件对象的句柄,创建失败返回 RT_NULL
rt_err_t rt_event_delete ( rt_event_t  event)

删除事件集

系统不再使用rt_event_create() 创建的事件集对象时,通过调用该函数删除事件集对象 控制块来释放系统资源。

参数
event事件集对象的句柄
返回
RT_EOK
rt_err_t rt_event_send ( rt_event_t  event,
rt_uint32_t  set 
)

发送事件

使用该函数接口时,通过参数 set 指定的事件标志来设定 event 事件集对象的事件标志值, 然后遍历等待在event事件集对象上的等待线程链表,判断是否有线程的事件激活要求与当前 event对象事件标志值匹配,如果有,则唤醒该线程。

参数
event事件集对象的句柄
set发送的一个或多个事件的标志值
返回
RT_EOK
示例:
event_sample.c.
rt_err_t rt_event_recv ( rt_event_t  event,
rt_uint32_t  set,
rt_uint8_t  option,
rt_int32_t  timeout,
rt_uint32_t recved 
)

接收事件

当用户调用这个接口时,系统首先根据set参数和接收选项option来判断它要接收的事件是否发生, 如果已经发生,则根据参数option上是否设置有 RT_EVENT_FLAG_CLEAR 来决定是否重置事件的相应 标志位,然后返回(其中recved参数返回收到的事件);如果没有发生,则把等待的set和option 参数填入线程本身的结构中,然后把线程挂起在此事件上,直到其等待的事件满足条件或等待时间 超过指定的超时时间。如果超时时间设置为零,则表示当线程要接受的事件没有满足其要求时就不 等待,而直接返回-RT_ETIMEOUT。

参数
event事件集对象的句柄
set接收线程感兴趣的事件
option接收选项,应设置接收选项RT_EVENT_FLAG_AND或RT_EVENT_FLAG_OR。
timeout指定超时时间
recved指向收到的事件,如果不感兴趣,可以设置为 RT_NULL。
返回
RT_EOK 成功;-RT_ETIMEOUT 超时;-RT_ERROR 错误
示例:
event_sample.c.