从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(二十)软件定时器 NO.1 基本概念
目录
一、软件定时器的基本概念:
二、软件定时器应用场景:
三、软件定时器的精度:
四、软件定时器的运作机制:
五、软件定时器控制块:
① 硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。
② 软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务。
③ 使用硬件定时器时,每次在定时时间到达之后就会自动触发一个中断,用户在中断中处理信息;而使用软件定时器时,需要我们在创建软件定时器时指定时间到达后要调用的函数(即回调函数),在回调函数中处理信息。两次触发回调函数的时间间隔xTimerPeriodInTicks叫定时器的定时周期
④ FreeRTOS操作系统提供软件定时器功能,软件定时器的使用相当于扩展了定时器的数量,允许创建更多的定时业务。FreeRTOS软件定时器功能上支持:
单次模式:当用户创建了定时器并启动了定时器后,定时时间到了,只执行一次回调函数之后就将该定时器删除,不再重新执行。
周期模式:这个定时器会按照设置的定时时间循环执行回调函数,直到用户将定时器删除,具体见下图:
硬件定时器受硬件的限制,数量上不足以满足用户的实际需求,无法提供更多的定时器,那么可以采用软件定时器来完成。
软件定时器更适用于对时间精度要求不高的任务。
在操作系统中,通常软件定时器是以系统节拍周期为计时单位。
由于节拍定义了系统中定时器能够分辨的精确度,系统可以根据实际系统CPU的处理能力和实时性需求设置合适的数值,系统节拍周期的值越小,精度越高,但是系统开销也将越大。
① 软件定时器的运作:
软件定时器是可选的系统资源,在创建定时器的时候会分配一块内存空间。当用户创建并启动一个软件定时器时, FreeRTOS会根据当前系统时间及用户设置的定时确定该定时器唤醒时间,并将该定时器控制块挂入软件定时器列表,FreeRTOS中采用两个定时器列表维护软件定时器,pxCurrentTimerList与pxOverflowTimerList是列表指针,在初始化的时候分别指向xActiveTimerList1与xActiveTimerList2。
② 定时器的通信:
FreeRTOS的软件定时器还有采用消息队列进行通信,利用“定时器命令队列”向软件定时器任务发送一些命令,任务在接收到命令就会去处理命令对应的程序,比如启动定时器,停止定时器等。
xTimerQueue:定时器命令队列。
③ 软件定时器列表:
④ 软件定时器注意事项:
软件定时器创建函数:xTimerCreate() 与 xTimerCreateStatic()
创建成功后是处于休眠状态。
TimerHandle_t xTimerCreate( const char * const pcTimerName, 软件定时器名
const TickType_t xTimerPeriodInTicks, 软件定时器的周期
const UBaseType_t uxAutoReload, 软件定时器是否自动重置
void * const pvTimerID, 软件定时器 ID
TimerCallbackFunction_t pxCallbackFunction );软件定时器的回调函数
回调函数的类型:typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer );