MS-RTOS 事件标志组

更新时间:
2023-08-09
下载文档

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_SETMS_EVENTSET_OPT_CLEAR 互斥使用;

ms_eventset_wait_opt_t

事件标志组的等待选项为以下的宏的组合:

含义
MS_EVENTSET_OPT_ALL等待所指定的事件标志集合全部得到满足
MS_EVENTSET_OPT_ANY等待所指定的事件标志集合任意一个得到满足
MS_EVENTSET_OPT_CONSUME消费掉获取的事件

MS_EVENTSET_OPT_ALLMS_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 内核错误码

  • 注意事项

  • 示例

文档内容是否对您有所帮助?
有帮助
没帮助