MS-RTOS 软件定时器

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

MS-RTOS 软件定时器

本章将介绍 MS-RTOS 软件定时器的使用。

软件定时器相关数据类型

类型描述
ms_timer_status_t软件定时器的运行状态类型
ms_timer_opt_t软件定时器的选项类型
ms_timer_callback_t软件定时器的回调函数指针类型
ms_timer_stat_t软件定时器的状态信息结构类型

ms_timer_status_t

软件定时器的运行状态为以下的宏:

含义
MS_TIMER_STATUS_UNUSED软件定时器已经被销毁
MS_TIMER_STATUS_STOP软件定时器已经停止
MS_TIMER_STATUS_RUNNING软件定时器正在运行

ms_timer_opt_t

软件定时器的选项为以下的宏:

含义
MS_TIMER_OPT_ONE_SHOT只启动一次
MS_TIMER_OPT_PERIODIC周期性启动

ms_timer_callback_t

软件定时器回调函数指针类型无返回值,有一个 ms_ptr_t 类型参数:

typedef void (*ms_timer_callback_t)(ms_ptr_t arg);

以下是一个软件定时器回调函数定义的示例:

static void xxx_timer(ms_ptr_t arg)
{
    // do some thing
}

ms_timer_stat_t

软件定时器的状态信息结构类型:

typedef struct {
    ms_tick_t          remain; 
    ms_timer_status_t  status; 
} ms_timer_stat_t;
参数说明
remain软件定时器的到期剩余时间(以嘀嗒为单位)
status软件定时器的工作状态

软件定时器相关 API

下表展示了软件定时器相关的 API 在两个权限空间下是否可用:

API用户空间内核空间
ms_timer_create
ms_timer_destroy
ms_timer_start
ms_timer_stop
ms_timer_stat

ms_timer_create()

  • 描述 创建一个软件定时器

  • 函数原型

ms_err_t ms_timer_create(const char *name, ms_timer_callback_t callback, ms_ptr_t arg, 
                         ms_handle_t *timerid);
			   
  • 参数
输入/输出参数描述
[in]name软件定时器的名字,不能为空指针
[in]callback回调函数指针,不能为空指针
[in]arg回调函数参数,可以为空指针
[out]timerid软件定时器的 ID,不能为空指针
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

static ms_handle_t timer_id;

static void timer_callback(ms_ptr_t arg)
{
    // do some thing
}

int main(int argc, char *argv[])
{
    ms_timer_create("timer", timer_callback, MS_NULL, &timer_id);

    // do some thing

    return 0;
}

ms_timer_destroy()

  • 描述 销毁一个软件定时器

  • 函数原型

ms_err_t ms_timer_destroy(ms_handle_t timerid);
  • 参数
输入/输出参数描述
[in]timerid软件定时器的 ID
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

static ms_handle_t timer_id;

static void timer_callback(ms_ptr_t arg)
{
    // do some thing
}

int main(int argc, char *argv[])
{
    ms_timer_create("timer", timer_callback, MS_NULL, &timer_id);

    // do some thing

    ms_timer_destroy(timer_id);
    
    return 0;
}

ms_timer_start()

  • 描述 启动一个软件定时器
  • 函数原型
ms_err_t ms_timer_start(ms_handle_t timerid, ms_tick_t delay, ms_tick_t period, 
                          ms_timer_opt_t opt);
  • 参数
输入/输出参数描述
[in]timerid软件定时器的 ID
[in]delay首先延时多少个嘀嗒(单次触发定时器如果 delay > 0,将会忽略 period)
[in]period软件定时器的周期启动时间(以嘀嗒为单位)
[in]opt软件定时器的选项
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

static ms_handle_t timer_id;

static void timer_callback(ms_ptr_t arg)
{
    ms_printf("in timer\n");
}

int main(int argc, char *argv[])
{
    ms_timer_create("timer", timer_callback, MS_NULL, &timer_id);

    ms_timer_start(timer_id, 0U, 2000U, MS_TIMER_OPT_PERIODIC);

    ms_thread_sleep_s(10);

    // do some thing

    ms_timer_destroy(timer_id);
    
    return 0;
}

ms_timer_stop()

  • 描述 停止一个软件定时器

  • 函数原型

ms_err_t ms_timer_stop(ms_handle_t timerid);
  • 参数
输入/输出参数描述
[in]timerid软件定时器的 ID
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

static ms_handle_t timer_id;

static void timer_callback(ms_ptr_t arg)
{
    ms_printf("in timer\n");
}

int main(int argc, char *argv[])
{
    ms_timer_create("timer", timer_callback, MS_NULL, &timer_id);

    ms_timer_start(timer_id, 0U, 2000U, MS_TIMER_OPT_PERIODIC);

    ms_thread_sleep_s(10);

    ms_timer_stop(timer_id);

    // do some thing

    ms_timer_destroy(timer_id);
    
    return 0;
}

ms_timer_stat()

  • 描述 获得软件定时器的状态信息

  • 函数原型

ms_err_t ms_timer_stat(ms_handle_t timerid, ms_timer_stat_t *stat);
  • 参数
输入/输出参数描述
[in]timerid软件定时器的 ID
[out]stat软件定时器的状态信息
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核锁定期间调用

  • 示例

static ms_handle_t timer_id;

static void timer_callback(ms_ptr_t arg)
{
    ms_printf("in timer\n");
}

int main(int argc, char *argv[])
{
    ms_timer_stat_t stat;

    ms_timer_create("timer", timer_callback, MS_NULL, &timer_id);

    ms_timer_start(timer_id, 0U, 2000U, MS_TIMER_OPT_PERIODIC);

    ms_thread_sleep_s(10);

    ms_timer_stat(timer_id, &stat);

    ms_printf("timer remain time %d\n", stat.remain);

    // do some thing

    ms_timer_destroy(timer_id);
    
    return 0;
}
文档内容是否对您有所帮助?
有帮助
没帮助