从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(二十一)软件定时器 NO.2 函数接口讲解
目录
一、软件定时器创建函数 xTimerCreate()
xTimerCreate()用于创建一个软件定时器,并返回一个句柄。 要想使用该函数函数必须在头文件FreeRTOSConfig.h中把宏configUSE_TIMERS 和configSUPPORT_DYNAMIC_ALLOCATION 均定义为 1(configSUPPORT_DYNAMIC_ALLOCATION 在 FreeRTOS.h 中默认定义为 1) , 并且需要把 FreeRTOS/source/times.c 这个 C 文件添加到工程中。
软件定时器在创建成功后是处于休眠状态的, 可以使用 xTimerStart()、 xTimerReset()、xTimerStartFromISR() 、 xTimerResetFromISR() 、 xTimerChangePeriod() 和xTimerChangePeriodFromISR()这些函数将其状态转换为活跃态。
static TimerHandle_t Swtmr1_Handle =NULL; /* 软件定时器句柄 */
static TimerHandle_t Swtmr2_Handle =NULL; /* 软件定时器句柄 */
/* 周期模式的软件定时器 1,定时器周期 1000(tick)*/
Swtmr1_Handle=xTimerCreate((const char*)"AutoReloadTimer",
(TickType_t)1000,/* 定时器周期 1000(tick) */
(UBaseType_t)pdTRUE,/* 周期模式 */
(void* )1,/* 为每个计时器分配一个索引的唯一 ID */
(TimerCallbackFunction_t)Swtmr1_Callback); /* 回调函数 */
if (Swtmr1_Handle != NULL)
{
/********************************************************************
* xTicksToWait:如果在调用 xTimerStart()时队列已满,则以 tick 为单位指定调用任务应保持
* 在 Blocked(阻塞)状态以等待 start 命令成功发送到 timer 命令队列的时间。
* 如果在启动调度程序之前调用 xTimerStart(),则忽略 xTicksToWait。在这里设置等待时间为 0.
**********************************************************************/
xTimerStart(Swtmr1_Handle,0); //开启周期定时器
}
/* 单次模式的软件定时器 2,定时器周期 5000(tick)*/
Swtmr2_Handle=xTimerCreate((const char* )"OneShotTimer",
(TickType_t)5000,/* 定时器周期 5000(tick) */
(UBaseType_t )pdFALSE,/* 单次模式 */
(void*)2,/* 为每个计时器分配一个索引的唯一 ID */
(TimerCallbackFunction_t)Swtmr2_Callback);
if (Swtmr2_Handle != NULL)
{
xTimerStart(Swtmr2_Handle,0); //开启单次定时器
}
static void Swtmr1_Callback(void* parameter)
{
/* 软件定时器的回调函数,用户自己实现 */
}
static void Swtmr2_Callback(v