MS-RTOS 事件标志组
本章将介绍 MS-RTOS 事件标志组的使用。
事件标志组相关数据类型
类型 | 描述 |
---|---|
ms_eventset_post_opt_t | 事件标志组的发送选项类型 |
ms_eventset_wait_opt_t | 事件标志组的等待选项类型 |
ms_eventset_stat_t | 事件标志组的状态信息结构类型 |
ms_eventset_post_opt_t
事件标志组的发送选项为以下的宏:
宏 | 含义 |
---|---|
MS_EVENTSET_OPT_SET | 设置事件 |
MS_EVENTSET_OPT_CLEAR | 清除事件 |
MS_EVENTSET_OPT_SET
与 MS_EVENTSET_OPT_CLEAR
互斥使用;
ms_eventset_wait_opt_t
事件标志组的等待选项为以下的宏的组合:
宏 | 含义 |
---|---|
MS_EVENTSET_OPT_ALL | 等待所指定的事件标志集合全部得到满足 |
MS_EVENTSET_OPT_ANY | 等待所指定的事件标志集合任意一个得到满足 |
MS_EVENTSET_OPT_CONSUME | 消费掉获取的事件 |
MS_EVENTSET_OPT_ALL
与 MS_EVENTSET_OPT_ANY
互斥使用;
ms_eventset_stat_t
事件标志组的状态信息结构类型:
typedef struct {
ms_uint32_t value;
} ms_eventset_stat_t;
参数 | 说明 |
---|---|
value | 事件标志组的当前值 |
事件标志组相关 API
下表展示了事件标志组相关的 API 在两个权限空间下是否可用:
API | 用户空间 | 内核空间 |
---|---|---|
ms_eventset_create | ● | ● |
ms_eventset_destroy | ● | ● |
ms_eventset_wait | ● | ● |
ms_eventset_trywait | ● | ● |
ms_eventset_post | ● | ● |
ms_eventset_stat | ● | ● |
ms_eventset_set | ● | ● |
ms_eventset_clear | ● | ● |
ms_eventset_reset | ● | ● |
ms_eventset_create()
描述 创建一个事件标志组
函数原型
ms_err_t ms_eventset_create(const char *name, ms_uint32_t init_value,
ms_ipc_opt_t opt, ms_handle_t *eventsetid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | name | 事件标志组的名字,不能为空指针 |
[in] | init_value | 事件标志组的初始值 |
[in] | opt | 事件标志组的选项 |
[out] | eventsetid | 事件标志组的 ID,不能为空指针 |
opt 参数可以取如下的值:
宏 | 含义 |
---|---|
MS_WAIT_TYPE_PRIO | 按优先级高低规则等待 |
MS_WAIT_TYPE_FIFO | 按先来先服务规则等待 |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例
static ms_handle_t eventset_id;
int main(int argc, char *argv[])
{
ms_eventset_create("eventset", 0U, MS_WAIT_TYPE_PRIO, &eventset_id);
return 0;
}
ms_eventset_destroy()
描述 销毁一个事件标志组
函数原型
ms_err_t ms_eventset_destroy(ms_handle_t eventsetid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例
static ms_handle_t eventset_id;
int main(int argc, char *argv[])
{
ms_eventset_create("eventset", 0U, MS_WAIT_TYPE_PRIO, &eventset_id);
ms_thread_sleep_s(1U);
ms_eventset_destroy(eventset_id);
return 0;
}
ms_eventset_wait()
描述 等待一个事件标志组
函数原型
ms_err_t ms_eventset_wait(ms_handle_t eventsetid, ms_uint32_t eventset,
ms_eventset_wait_opt_t opt, ms_tick_t timeout,
ms_uint32_t *result);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
[in] | eventset | 等待的事件标志集合 |
[in] | opt | 事件标志组的等待选项 |
[in] | timeout | 等待的超时时间 |
[out] | result | 事件标志组结果,如果不关心,可以为空指针 |
返回值 MS-RTOS 内核错误码
注意事项 中断中或内核锁定期间调用,timeout 必须为
MS_TIMEOUT_NO_WAIT
,不能在内核启动前调用示例
static ms_handle_t eventset_id;
int main(int argc, char *argv[])
{
ms_eventset_create("eventset", 0U, MS_WAIT_TYPE_PRIO, &eventset_id);
ms_eventset_wait(eventset_id, MS_BIT(0U), MS_EVENTSET_OPT_ALL, 1000U, MS_NULL);
return 0;
}
ms_eventset_trywait()
描述 尝试等待一个事件标志组
函数原型
ms_err_t ms_eventset_trywait(ms_handle_t eventsetid, ms_uint32_t eventset,
ms_eventset_wait_opt_t opt, ms_uint32_t *result);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
[in] | eventset | 尝试等待的事件标志集合 |
[in] | opt | 事件标志组的等待选项 |
[out] | result | 事件标志组结果,如果不关心,可以为空指针 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_eventset_post()
描述 发送一个事件标志组
函数原型
ms_err_t ms_eventset_post(ms_handle_t eventsetid, ms_uint32_t eventset,
ms_eventset_post_opt_t opt);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
[in] | eventset | 发送的事件标志集合 |
[in] | opt | 事件标志组的发送选项 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例
static ms_handle_t test_tid;
static ms_handle_t eventset_id;
static void test_thread(void *arg)
{
ms_eventset_wait(eventset_id, MS_BIT(0U), MS_EVENTSET_OPT_ALL, MS_TIMEOUT_FOREVER,
MS_NULL);
// event 0 come
// do some thing
}
int main(int argc, char *argv[])
{
ms_eventset_create("eventset", 0U, MS_WAIT_TYPE_PRIO, &eventset_id);
ms_thread_create("test", test_thread, MS_NULL,
1024U, 16U, 0U,
MS_THREAD_OPT_USER, &test_tid);
ms_thread_sleep_s(1U);
// post event 0
ms_eventset_post(eventset_id, MS_BIT(0U), MS_EVENTSET_OPT_SET);
ms_thread_sleep_s(1U);
return 0;
}
ms_eventset_stat()
描述 获得事件标志组的状态信息
函数原型
ms_err_t ms_eventset_stat(ms_handle_t eventsetid, ms_eventset_stat_t *stat);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
[out] | stat | 事件标志组的状态信息 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例
static ms_handle_t eventset_id;
int main(int argc, char *argv[])
{
ms_eventset_stat_t stat;
ms_eventset_create("eventset", MS_BIT(0U), MS_WAIT_TYPE_PRIO, &eventset_id);
ms_eventset_stat(eventset_id, &stat);
// do some thing
return 0;
}
ms_eventset_set()
- 描述 设置事件标志组中的指定事件,等价于以下操作:
ms_eventset_post(eventsetid, eventset, MS_EVENTSET_OPT_SET)
- 函数原型
ms_err_t ms_eventset_set(ms_handle_t eventsetid, ms_uint32_t eventset);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
[in] | eventset | 需要设置的事件标志集合 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_eventset_clear()
- 描述 清除事件标志组中的指定事件,等价于以下操作:
ms_eventset_post(eventsetid, eventset, MS_EVENTSET_OPT_CLEAR)
- 函数原型
ms_err_t ms_eventset_clear(ms_handle_t eventsetid, ms_uint32_t eventset);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
[in] | eventset | 需要清除的事件标志集合 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_eventset_reset()
- 描述 复位事件标志组(清除事件标志组中的所有事件),等价于以下操作:
ms_eventset_post(eventsetid, ((ms_uint32_t)-1), MS_EVENTSET_OPT_CLEAR)
- 函数原型
ms_err_t ms_eventset_reset(ms_handle_t eventsetid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | eventsetid | 事件标志组的 ID |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无