关于RT_thread延时函数的分析

一.RT_TICK_PER_SENCOND 对rt_thread_mdelay延时的影响

 

  1. 一些基本的定义

    任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等。时钟节拍是特定的周期性中断,这个中断可以看做是系统心跳,中断之间的时间间隔取决于不同的应用,一般是 1ms–100ms,时钟节拍率越快,系统的实时响应越快,但是系统的额外开销(耗电量)就越大,从系统启动开始计数的时钟节拍数称为系统时间。

RT-Thread 中,时钟节拍的长度根据 RT_TICK_PER_SECOND 的定义来调整,等于 1/RT_TICK_PER_SECOND 秒。

由于全局变量 rt_tick 在每经过一个时钟节拍时,值就会加 1,通过调用 rt_tick_get 会返回当前 rt_tick 的值,即可以获取到当前的时钟节拍值。此接口可用于记录系统的运行时间长短,或者测量某任务运行的时间。接口函数如下:

rt_tick_t rt_tick_get(void);

  1. rt_thread_mdelay()函数的实现如下图:

 

转定义 rt_tick_from_millisecond();

 

以rt_thread_mdelay(1),rt_thread_mdelay(9)为例判断其在RT_TICK_PER_SECOND = 100情况下延时是否相等?

将1和9分别带入到rt_tick_from_millisecond()函数中

Tick = 100*(1/1000)             //tick = 0

Tick+=(100*(1%1000)+999)/1000;   //tick = (100+999)/1000 = 1099/1000 =1

Tick = 100*(9/1000)             //tick = 0

Tick+=(100*(9%1000)+999)/1000;   //tick = (900+999)/1000 = 1899/1000 =1

所以return的值都为1;

将tick=1带入到相同的return  rt_thread_sleep(tick);

 

可以得出结论:RT_TICK_PER_SECOND 代表了rt_thread的时钟节拍,以及延时的精度 ,当RT_TICK_PER_SECOND = 100时 rt_thread_mdelay的延时精度为最小为10ms。

实测验证:

实验环境:GD32f303RCT6,

实验步骤:

1.将RT_TICK_PER_SECOND = 10 设置控制LED的引脚翻转时常为1ms

 

2.将RT_TICK_PER_SECOND = 1000 设置控制LED的引脚翻转时常为1ms.

 

实验现象:

步骤1实验现象为能明显观察到LED的亮灭;

步骤2实验现象为LED常亮。

已知;人眼能够识别LED亮灭的最小时间为20ms,小于这个时间人眼观察到的就为常亮。

将延时时间改为20ms,实验现象为微微能够有亮灭的感觉。

实验结论:RT_TICK_PER_SECOND决定着RT_thread的延时的精度。

目录

一.RT_TICK_PER_SENCOND 对rt_thread_mdelay延时的影响


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rt_thread是一个实时操作系统(RTOS)中的线程管理模块,常用于嵌入式系统开发。下面是一些常用的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): 该函数用于创建一个新的线程。参数包括线程入口函数(entry)、传递给线程的参数(parameter)、线程名称(name)、线程堆栈大小(stack_size)、线程优先级(priority)和时间片轮转周期(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中常用的函数,通过它们可以实现线程的创建、启动、挂起、恢复、延时等操作。需要根据具体的应用场景和需求选择合适的函数进行使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值