RT-Thread内核入门(4)--时钟管理

本文详细介绍了嵌入式系统中硬件和软件定时器的工作原理及区别,包括单次触发和周期触发两种机制。讲解了RT-Thread操作系统中定时器的初始化、创建、删除等操作,并探讨了如何利用定时器实现高精度延时。同时,提到了在Cortex-M3上基于SysTick的精确延时实现方法。
摘要由CSDN通过智能技术生成

定时器管理

硬件定时器:由外部晶振提供给芯片输入时钟
软件定时器:由操作系统提供,以时钟节拍的时间长度为单位,定时数值必须是时钟节拍的整数倍。系统的时钟节拍为10ms,软定时器的时间设置必须为20ms,30ms等。

两种定时器机制:
单次触发定时器:只执行一次定时器事件,之后定时器自动停止
周期触发定时器:周期性触发定时器事件,直道用户手工停止

HAED_TIMER模式(默认模式)
该模式下的定时器超时函数在中断上下文环境中执行,可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_HARD_TIMER 来指定。

SOFT_TIMER模式
通过宏定义 RT_USING_TIMER_SOFT 来决定是否启用该模式。该模式被启用后,系统会在初始化时创建一个 timer 线程,然后 SOFT_TIMER 模式的定时器超时函数在都会在 timer 线程的上下文环境中执行。可以在初始化 / 创建定时器时使用参数 RT_TIMER_FLAG_SOFT_TIMER 来指定设置 SOFT_TIMER 模式。

定时器控制块:

struct rt_timer
typedef struct rt_timer *rt_timer_t

定时器管理方式:
初始化定时器:

void rt_system_timer_init(void);

SOFT_TIMER初始化:

void rt_system_timer_thread_init(void);

定时器的创建:

rt_timer_t rt_timer_create()

定时器的删除(释放内存)

rt_err_t rt_timer_delete(rt_timer_t timer);

定时器的初始化:

rt_timer_init() 

定时器的脱离:(不释放内存)

rt_err_t rt_timer_detach(rt_timer_t timer);

启动定时器:

rt_err_t rt_timer_start(rt_timer_t timer);

停止定时器:

rt_err_t rt_timer_stop(rt_timer_t timer);

控制定时器函数接口:
可以根据命令类型的参数来查看修改定时器的设置

rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void* arg);
参数:timer,定时器句柄
cmd	用于控制定时器的命令,当前支持四个命令,分别是设置定时时间,查看定时时间,设置单次触发,设置周期触发
arg	与 cmd 相对应的控制命令参数 比如,cmd 为设定超时时间时,就可以将超时时间参数通过 arg 进行设定

cmd命令:
#define RT_TIMER_CTRL_SET_TIME 0x0 /* 设置定时器超时时间 /
#define RT_TIMER_CTRL_GET_TIME 0x1 /
获得定时器超时时间 /
#define RT_TIMER_CTRL_SET_ONESHOT 0x2 /
设置定时器为单次定时器 /
#define RT_TIMER_CTRL_SET_PERIODIC 0x3 /
设置定时器为周期型定时器 */

高精度延时
使用定时器延时因为每次的延时时间都是时钟节拍的整数倍,如果需要更加精确的延时,就需要使用读取硬件定时器的计数或直接使用硬件定时器

在 Cortex-M 系列中,SysTick 已经被 RT-Thread 用于作为 OS Tick 使用,它被配置成 1/RT_TICK_PER_SECOND 秒后触发一次中断的方式,中断处理函数使用 Cortex-M3 默认的 SysTick_Handler 名字。在 Cortex-M3 的 CMSIS(Cortex Microcontroller Software Interface Standard)规范中规定了 SystemCoreClock 代表芯片的主频,所以基于 SysTick 以及 SystemCoreClock,我们能够使用 SysTick 获得一个精确的延时函数,如下例所示,Cortex-M3 上的基于 SysTick 的精确延时(需要系统在使能 SysTick 后使用):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值