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

本文档记录了在使用RT_Thread开发时对延时函数(us和ms),定时器功能(包括定时器控制块、超时回调和计数)以及获取和处理时钟节拍的方法的实践笔记,包括定时器示例和时间戳计算方法。
摘要由CSDN通过智能技术生成

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

持续更新中,欢迎收藏。

1. 延时函数

1. us延时函数

rt_hw_us_delay(rt_uint32_t us);//输如数据是us
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

/* 定时器的控制块 */
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); /* 启动定时器 */

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.应用范例

rt_tick_t start_time = 0;
start_time = rt_tick_get();

2. 毫秒转换为时分秒

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

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

HAL_GetTick();
应用:timestamp 时间戳
uint32_t timestamp = HAL_GetTick();

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

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

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))
{
    ....
}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rt_thread是一个功能丰富的线程管理模块,提供了许多函数来进行线程的创建、管理和控制。以下是一些常用的Rt_thread函数,但不限于以下函数: 1. rt_thread_t rt_thread_create(rt_thread_entry_t entry, void *parameter, const char *name, rt_uint8_t stack_size, rt_uint8_t priority, rt_uint32_t tick): 创建一个新的线程。 2. void rt_thread_startup(rt_thread_t thread): 启动一个已创建的线程。 3. rt_err_t rt_thread_delete(rt_thread_t thread): 删除一个指定的线程。 4. rt_err_t rt_thread_suspend(rt_thread_t thread): 暂停一个指定的线程。 5. rt_err_t rt_thread_resume(rt_thread_t thread): 恢复一个已暂停的线程。 6. void rt_thread_yield(void): 主动放弃当前线程的执行权,让出CPU时间片。 7. rt_err_t rt_thread_delay(rt_tick_t tick): 将当前线程延时指定的时间。 8. rt_thread_t rt_thread_self(void): 获取当前线程的句柄。 除了上述函数外,Rt_thread还提供了一系列函数来实现线程间的通信、同步和互斥操作,例如: - rt_sem_init(): 初始化一个信号量。 - rt_sem_take(): 获取一个信号量。 - rt_sem_release(): 释放一个信号量。 - rt_mutex_init(): 初始化一个互斥锁。 - rt_mutex_take(): 获取一个互斥锁。 - rt_mutex_release(): 释放一个互斥锁。 此外,Rt_thread还提供了一些与线程相关的查询函数,例如获取线程状态、获取线程优先级等。 总的来说,Rt_thread提供了丰富的函数来满足线程管理和控制的需求,可以根据具体的应用场景选择合适的函数进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值