赞
踩
说明:记录日常使用 RT_Thread 开发时做的笔记。
持续更新中,欢迎收藏。
- rt_hw_us_delay(rt_uint32_t us);//输如数据是us
- rt_hw_us_delay(200);//输入数据是us
rt_thread_mdelay(1000);//输入数据是ms
官网资料:https://www.rt-thread.org/document/site/programming-manual/timer/timer/#_14
- /* 定时器的控制块 */
- static struct rt_timer timer1;
- static int cnt = 0;
-
- /* 定时器 1 超时函数 */
- static void timeout1(void* parameter)
- {
- rt_kprintf("定时器触发 第 %d 次\n",cnt);
- /* 运行 10 次 */
- if (cnt++>= 9)
- {
- rt_timer_stop(&timer1); /*关闭定时器*/
- }
- }
-
- int timer_static_sample(void)
- {
- /* 初始化定时器 */
- rt_timer_init(&timer1, "timer1", /* 定时器名字是 timer1 */
- timeout1, /* 超时时回调的处理函数 */
- RT_NULL, /* 超时函数的入口参数 */
- 1000, /* 定时长度,以 OS Tick 为单位,即 10 个 OS Tick */
- RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER ); /* 周期性定时器|软件定时器 */
- /* 启动定时器 */
- rt_timer_start(&timer1);
-
- return 0;
- }
- INIT_APP_EXPORT(timer_static_sample);
-
- /*以下是其他应用记录:在运行过程中根据需求变更定时器时间*/
- uint32_t timeout;
- rt_timer_control(&uvled_off_time, RT_TIMER_CTRL_SET_TIME, &timeout);/* 20210924 新增:设置定时器时间 */
- rt_timer_start(&uvled_off_time); /* 启动定时器 */
由于全局变量 rt_tick 在每经过一个时钟节拍时,值就会加 1,通过调用 rt_tick_get 会返回当前 rt_tick 的值,即可以获取到当前的时钟节拍值。
此接口可用于记录系统的运行时间长短,或者测量某任务运行的时间。接口函数如下:
rt_tick_t rt_tick_get(void);
下表描述了 rt_tick_get() 函数的返回值:
返回 | 描述 |
rt_tick | 当前时钟节拍值 |
- rt_tick_t start_time = 0;
- start_time = rt_tick_get();
- uint32_t sys_time,sys_hour,sys_minute,sys_second;
-
- sys_time = rt_tick_get(); /* 获取时钟节拍 */
- sys_second = sys_time/1000;
- sys_hour = sys_second / 3600; /* 开机运行时间 小时 */
- sys_minute = sys_second % 3600 / 60; /* 开机运行时间 分 */
- sys_second = sys_second % 60; /* 开机运行时间 秒 */
- rt_kprintf("> 开机 %d 时 %d 分 %d 秒 \r\n",sys_hour,sys_minute,sys_second);
- HAL_GetTick();
- 应用:timestamp 时间戳
- uint32_t timestamp = HAL_GetTick();
在用时钟节拍作为定时的场合下应用
rt_tick_from_millisecond(timeout) 这个函数把多少 ms 计算成系统对应的时钟节拍
如下应用案例
- rt_tick_t start_time = 0;
- start_time = rt_tick_get();
- if (rt_tick_get() - start_time > rt_tick_from_millisecond(timeout))
- {
- ....
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。