定时器
创建定时器
使用动态分配内存的方法创建定时器
1 | TimerHandle_t xTimerCreate( const char * const pcTimerName, |
pcTimerName:定时器名字,用处不大,尽在调试时用到
xTimerPeriodInTicks:周期,以Tick为单位
uxAutoReload:类型,pdTRUE表示自动加载,pdFALSE表示一次性
pvTimerID:回调函数可以使用此参数,比如分辨是哪个定时器
pxCa11backFunction:回调函数
返回值:成功则返回TimerHandle_t,否则返回NULL
Tick中断
FreeRTOS中存在一个Tick中断,软件定时器基于Tick来运行,在Tick中断里,它会判断定时器是否超时,超时了就进入回调函数。
守护任务:创建了一个prvTimerTask任务。开启后需要对这个任务进行配置(优先级、栈大小、队列)。
守护任务队列的作用:在执行定时器函数时,本质是操作数据发送到队列中,。
在开启宏定义功能模块后,自定义了函数:
1
2
3
4
5
6
7
8
9
10 StackType_t xIdleTimerStack[100];
StaticTask_t xTimerTask;
void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
StackType_t ** ppxTimerTaskStackBuffer,
uint32_t * pulTimerTaskStackSize )
{
*ppxTimerTaskTCBBuffer = &xTimerTask;
*ppxTimerTaskStackBuffer = xIdleTimerStack;
*pulTimerTaskStackSize = 100;
}
编写定时器回调函数
1 | void Timer1CallbackFunction() |
定时器回调函数会以设定时间进行运行,可选择是否循环运行或者运行单次
定时器的运用:按键消抖
通过定时器的不循环模式,设定消抖时间,在按键中断抖动时,进入定时器,中断回调函数一直在reset定时器,就能实现按键抖动啦。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1186703947@qq.com