当前位置:   article > 正文

RT_Thread 调试笔记:时间相关,时钟管理函数,延时,定时器、 毫秒转换为时分秒 等_rtthread us延时

rtthread us延时

说明:记录日常使用 RT_Thread 开发时做的笔记。

持续更新中,欢迎收藏。

1. 延时函数

1. us延时函数

  1. rt_hw_us_delay(rt_uint32_t us);//输如数据是us
  2. rt_hw_us_delay(200);//输入数据是us

2. ms延时函数

rt_thread_mdelay(1000);//输入数据是ms

2. 定时器函数

官网资料:https://www.rt-thread.org/document/site/programming-manual/timer/timer/#_14

  1. /* 定时器的控制块 */
  2. static struct rt_timer timer1;
  3. static int cnt = 0;
  4. /* 定时器 1 超时函数 */
  5. static void timeout1(void* parameter)
  6. {
  7. rt_kprintf("定时器触发 第 %d 次\n",cnt);
  8. /* 运行 10 次 */
  9. if (cnt++>= 9)
  10. {
  11. rt_timer_stop(&timer1); /*关闭定时器*/
  12. }
  13. }
  14. int timer_static_sample(void)
  15. {
  16. /* 初始化定时器 */
  17. rt_timer_init(&timer1, "timer1", /* 定时器名字是 timer1 */
  18. timeout1, /* 超时时回调的处理函数 */
  19. RT_NULL, /* 超时函数的入口参数 */
  20. 1000, /* 定时长度,以 OS Tick 为单位,即 10 个 OS Tick */
  21. RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER ); /* 周期性定时器|软件定时器 */
  22. /* 启动定时器 */
  23. rt_timer_start(&timer1);
  24. return 0;
  25. }
  26. INIT_APP_EXPORT(timer_static_sample);
  27. /*以下是其他应用记录:在运行过程中根据需求变更定时器时间*/
  28. uint32_t timeout;
  29. rt_timer_control(&uvled_off_time, RT_TIMER_CTRL_SET_TIME, &timeout);/* 20210924 新增:设置定时器时间 */
  30. rt_timer_start(&uvled_off_time); /* 启动定时器 */

3. 获取时钟节拍 rt_tick_t rt_tick_get(void);

        由于全局变量 rt_tick 在每经过一个时钟节拍时,值就会加 1,通过调用 rt_tick_get 会返回当前 rt_tick 的值,即可以获取到当前的时钟节拍值。

        此接口可用于记录系统的运行时间长短,或者测量某任务运行的时间。接口函数如下:

rt_tick_t rt_tick_get(void);

下表描述了 rt_tick_get() 函数的返回值:

返回

描述

rt_tick

当前时钟节拍值

1.应用范例

  1. rt_tick_t start_time = 0;
  2. start_time = rt_tick_get();

2. 毫秒转换为时分秒

  1. uint32_t sys_time,sys_hour,sys_minute,sys_second;
  2. sys_time = rt_tick_get(); /* 获取时钟节拍 */
  3. sys_second = sys_time/1000;
  4. sys_hour = sys_second / 3600; /* 开机运行时间 小时 */
  5. sys_minute = sys_second % 3600 / 60; /* 开机运行时间 分 */
  6. sys_second = sys_second % 60; /* 开机运行时间 秒 */
  7. rt_kprintf("> 开机 %d 时 %d 分 %d 秒 \r\n",sys_hour,sys_minute,sys_second);

3. 获取时钟节拍(ST库函数)

  1. HAL_GetTick();
  2. 应用:timestamp 时间戳
  3. uint32_t timestamp = HAL_GetTick();

4. 计算 x 毫秒是多少时钟节拍 rt_tick_from_millisecond(timeout)

在用时钟节拍作为定时的场合下应用

rt_tick_from_millisecond(timeout)  这个函数把多少 ms 计算成系统对应的时钟节拍

如下应用案例

  1. rt_tick_t start_time = 0;
  2. start_time = rt_tick_get();
  3. if (rt_tick_get() - start_time > rt_tick_from_millisecond(timeout))
  4. {
  5. ....
  6. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/478606
推荐阅读
相关标签
  

闽ICP备14008679号