总目录
FreeRTOS学习—“任务”篇
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 )
参数 |
含义 |
pcTimerName |
定时器名称 |
xTimerPeriodInTicks |
定时器触发周期,以tick为单位,可以通过使用portTICK_PERIOD_MS配置毫秒 |
uxAutoReload |
定时器超时溢出后,自动重载 |
pvTimerID |
定时器ID |
pxCallbackFunction |
定时器溢出后,执行的回调函数 |
返回值 |
NULL 表示没有足够的堆空间分配给定时器而导致创建失败。 |
|
非 NULL 值表示定时器创建成功。此返回值应当保存下来,以作为操作此定时器的句柄。 |
定时器启动
BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 |
含义 |
xTimer |
定时器句柄,由xTimerCreate创建。 |
xTicksToWait |
阻塞时间,表示经过阻塞多久之后,定时器启动消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。 |
返回值 |
启动成功返回pdPASS;启动失败返回pdFAIL |
定时器停止
BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 |
含义 |
xTimer |
定时器句柄,由xTimerCreate创建。 |
xTicksToWait |
阻塞时间,表示经过阻塞多久之后,定时器停止消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。 |
返回值 |
停止成功返回pdPASS;停止失败返回pdFAIL |
定时器删除
BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 |
含义 |
xTimer |
定时器句柄,由xTimerCreate创建。 |
xTicksToWait |
阻塞时间,表示经过阻塞多久之后,定时器删除消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。 |
返回值 |
删除成功返回pdPASS;删除失败返回pdFAIL |
定时器修改周期
BaseType_t xTimerChangePeriod( TimerHandle_t xTimer,
TickType_t xNewPeriod,
TickType_t xTicksToWait )
参数 |
含义 |
xTimer |
定时器句柄,由xTimerCreate创建。 |
xNewPeriod |
新的周期,以tick为单位,可以通过使用portTICK_PERIOD_MS配置毫秒 |
xTicksToWait |
阻塞时间,表示经过阻塞多久之后,定时器修改消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。 |
返回值 |
修改成功返回pdPASS;修改失败返回pdFAIL |
定时器重启
BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait )
参数 |
含义 |
xTimer |
定时器句柄,由xTimerCreate创建。 |
xTicksToWait |
阻塞时间,表示经过阻塞多久之后,定时器重启消息被发往定时器消息队列,如果在scheduler启动之前调用xTimerStart,该值会被忽略。 |
返回值 |
重启成功返回pdPASS;重启失败返回pdFAIL |
还有一系列的中断中使用的函数
FreeRTOS学习—“任务”篇
FreeRTOS学习—“消息队列”篇
FreeRTOS学习—“信号量”篇
FreeRTOS学习—“事件组”篇
FreeRTOS学习—“定时器”篇