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;
}