介绍软件定时器使用基础:单次触发和自动重载定时器。
1、头文件声明
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "supporting_functions.h"
// 定义定时器相关时间
#define mainONE_SHOT_TIMER_PERIOD ( pdMS_TO_TICKS( 3333UL ) )
#define mainAUTO_RELOAD_TIMER_PERIOD ( pdMS_TO_TICKS( 500UL ) )
// 定时器回调函数
static void prvOneShotTimerCallback( TimerHandle_t xTimer );
static void prvAutoReloadTimerCallback( TimerHandle_t xTimer );
2、创建和启动软件定时器
int main( void )
{
TimerHandle_t xAutoReloadTimer, xOneShotTimer;
BaseType_t xTimer1Started, xTimer2Started;
// 创建软件定时器:单次执行
software timer in xOneShotTimer. */
xOneShotTimer = xTimerCreate( "OneShot", // 名字
mainONE_SHOT_TIMER_PERIOD, // 多久开始执行
pdFALSE, // 设置为单次执行
0,
prvOneShotTimerCallback ); // 回调函数
// 创建软件定时器:自动重载
xAutoReloadTimer = xTimerCreate( "AutoReload", // 名字
mainAUTO_RELOAD_TIMER_PERIOD, // 重载需要时间
pdTRUE, // 重载模式
0,
prvAutoReloadTimerCallback ); // 回调函数
if( ( xOneShotTimer != NULL ) && ( xAutoReloadTimer != NULL ) )
{
// 启动定时器
xTimer1Started = xTimerStart( xOneShotTimer, 0 );
xTimer2Started = xTimerStart( xAutoReloadTimer, 0 );
if( ( xTimer1Started == pdPASS ) && ( xTimer2Started == pdPASS ) )
{
// 开始调度
vTaskStartScheduler();
}
}
for( ;; );
return 0;
}
3、定时器回调函数
static void prvOneShotTimerCallback( TimerHandle_t xTimer )
{
static TickType_t xTimeNow;
xTimeNow = xTaskGetTickCount();
vPrintStringAndNumber( "One-shot timer callback executing", xTimeNow );
}
static void prvAutoReloadTimerCallback( TimerHandle_t xTimer )
{
static TickType_t xTimeNow;
xTimeNow = xTaskGetTickCount();
vPrintStringAndNumber( "Auto-reload timer callback executing", xTimeNow );
}