定时器概述
定时器运行过程
定时器就像一个闹钟,它有超时时间、函数、是否为周期性这三个部分。
- 超时时间:什么时候到时间,就像闹钟响起
- 函数:闹钟响起,要干什么
- 是否为周期性:这个闹钟只响一次(单次触发)还是每天都响(周期性触发)
定时器的简化运行过程如下图:
- (t1)使用定时器,需要先创建一个定时器,创建时会规定以上的三个部分,但这时定时器并不会开始计时。
- (t2)之后需要开启定时器,并基于该时刻进行计时。
- (t2->t3过程)FreeRTOS有一个tick中断,每次进入中断,都会在中断中判断是否有定时器超时,如果超时就进行定时器的触发。
- (t3)当定时器触发之后,会唤醒一个任务(守护任务)来去执行创建定时器时传入的函数。至此一次定时完成,如果设置为了周期性触发,之后就会重复上述过程,如果设置为单次触发,之后将不会再触发。
定时器的状态转换
定时器只有两种状态:Dormant(休眠态)、Running(运行态),下面是定时器的状态转换过程
- 当创建定时器时,定时器进入的是休眠态,这时定时器不进行计时。
- 当开启定时器、复位定时器、重置定时器周期时,定时器从休眠态转换到了运行态,这时定时器开始计时。
- 当计时完成之后,如果