FreeRTOS整体知识框架可以参考下文:
FreeRTOS整体知识框架
一. FreeRTOS定时器
FreeRTOS定时器
博文路径
FreeRTOS提供了一种软件定时器,用来快速实现一些周期性的操作,并且节约了硬件定时器。不过尽量还是不要做过多的操作,以免影响其他定时器的准度。
demo
演示了定时器定义,回调函数会每一秒进入一次,等到10次之后,定时器被销毁。
TimerHandle_t xTimerUser; // 定义句柄// 定时器回调函数格式
void vTimerCallback( TimerHandle_t xTimer )
{// do something no block// 获取溢出次数static unsigned int ulCount =0;ulCount= ( unsigned int ) pvTimerGetTimerID( xTimer );// 累积溢出次数++ulCount; // 更新溢出次数vTimerSetTimerID( xTimer, ( void * ) ulCount );printf("get timer ulCount:%d\n",ulCount);if(ulCount == 10) {// 停止定时器xTimerStop( xTimer, 0 );}
}void app_main()
{// 申请定时器, 配置xTimerUser = xTimerCreate("Timer's name",/*调试用, 系统不用*/1000 / portTICK_PERIOD_MS, /*定时溢出周期, 单位是任务节拍数*/ pdTRUE,/*是否自动重载, 此处设置周期性执行*/( void * ) 0,/*记录定时器溢出次数, 初始化零, 用户自己设置*/vTimerCallback);/*回调函数*/if( xTimerUser != NULL ) {// 启动定时器, 0 表示不阻塞xTimerStart( xTimerUser, 0 );}
}
主要函数
定时器创建
TimerHandle_t xTimerCreate(const char * const pcTimerName,const TickType_t xTimerPeriodInTicks,const UBaseType_t uxAutoReload,void * const pvTimerID,TimerCallbackFunction_t pxCallbackFunction )
定时器启动
BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait )
定时器停止
BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait )
定时器删除
BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait )
定时器周期修改
BaseType_t xTimerChangePeriod( TimerHandle_t xTimer, TickType_t xNewPeriod, TickType_t xTicksToWait )
定时器重启
BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait )
还有一系列的中断中使用的函数