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 )
还有一系列的中断中使用的函数