FreeRTOS软件定时器使用
0、引入timers.h头文件
引入freeRTOS文件夹下timers.h头文件
1、FreeRTOSConfig.h文件中配置
//软件定时器相关宏定义
//启用软件定时器
#define configUSE_TIMERS 1
//软件定时器优先级
#define configTIMER_TASK_PRIORITY 5
//软件定时器队列长度
#define configTIMER_QUEUE_LENGTH 10
//软件定时器任务堆栈大小
#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) //256字
configMINIMAL_STACK_SIZE:空闲任务使用的堆栈大小
2、创建软件定时器句柄,声明回调函数
TimerHandle_t xTimerSendNetHeart_Handle; // 定义软件定时器句柄
void SendNetHeartBeatCallback(TimerHandle_t xTimer);
3、申请定时器
xTimerSendNetHeart_Handle = xTimerCreate
/*调试用, 系统不用*/
("NetHeartBeat",
/*定时溢出周期, 单位是任务节拍数*/
30000, //30s
/*是否自动重载, 此处设置周期性执行*/
pdTRUE, //周期性执行
/*记录定时器溢出次数, 初始化零, 用户自己设置*/
( void * ) 1,
/*回调函数*/
SendNetHeartBeatCallback);
关于任务节拍数:
FreeRTOSConfig.h文件中
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
//时钟节拍频率,这里设置为1000,周期就是1ms
4、启动定时器,停止定时器,重启定时器
1)、启动软件定时器
//任务级
if(xTimerStart(xTimerSendNetHeart_Handle,1000) == pdPASS) //如果启动软件定时器成功
{
LOG_STRING("心跳包软件定时器创建成功\r\n");
}
2)、停止软件定时器
//任务级
if(xTimerSendNetHeart_Handle != NULL) //如果软件定时器已经创建成功
{
xTimerStop(xTimerSendNetHeart_Handle,1000); //停止软件定时器
}
3)、复位软件定时器
//任务级
//释放个信号,表示有数据传输,待完善
if(xTimerSendNetHeart_Handle != NULL)
{
xTimerReset(xTimerSendNetHeart_Handle,0);
}