【RTOS】定时器的理论和使用


一、定时器理论

1.1 实现原理

定时器是一种允许在特定时间间隔后或在将来的某个时间点触发一个超时事件。定时器分为硬件定时器软件定时器

硬件定时器: 由外部晶振提供给芯片输入时钟,我们可以通过配置寄存器来设置定时器的计数方向、定时模式、中断触发等
软件定时器: 是由操作系统提供的一类系统接口,构建在硬件定时器基础之上,软件定时器在 FreeRTOS 的任务调度机制之上运行。 当软件定时器指定时间到达后,FreeRTOS 将调用用户定义的回调函数来处理
软件定时器内部有一个结构体

struct {
   
	函数指针(回调函数)
	超时时间
	属性(一次性/周期性)
}

所以软件定时器有一个链表,系统新激活的定时器会以超时时间升序的方式插入到链表中,在sysTick中断中处理链表,判断是否超时来处理链表中的定时器任务

在这里插入图片描述
其他操作系统是直接在硬件中断里面处理回调函数,而在FreeRTOS中考虑到回调函数效率问题,当发现有超时定时器,他会把定时器写入一个TimerQueue,单独用一个定时器任务来处理定时器

1.2 定时器创建和使用

回调函数pxCallbackFunction可以使用pvTimerID分辨是哪个定时器
返回值: 成功则返回TimerHandle_t, 否则返回NULL

TimerHandle_t xTimerCreate( const char * const pcTimerName,
const TickType_t xTimerPeriodInTicks,
const UBaseType_t uxAutoReload,
void * const pvTimerID,
TimerCallbackFunction_t pxCallbackFunction );

在RTOS中,每隔一个固定的时间产生中断,中断函数里面可以去判断定时器时间有没有超时,超时后就唤醒守护任务去执行回调函数

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值