安富莱电子 www.armfly.com
安富莱_STM32-V5开发板_FreeRTOS教程(V1.0)
#define configUSE_TIMERS 1
因为使能了 FreeRTOS 的定时器组任务,定时器组的其它宏定义也做一下配置,配置如下:
#define configTIMER_TASK_PRIORITY ( 2 )
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
FreeRTOS 定时器组创建:
/*
*********************************************************************************************************
* 函 数 名: AppObjCreate
* 功能说明: 创建任务通信机制
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void AppObjCreate (void)
{
uint8_t i;
const TickType_t xTimerPer[2] = {100, 100};
/*
1. 创建定时器,如果在 RTOS 调度开始前初始化定时器,那么系统启动后才会执行。
2. 统一初始化两个定时器,他们使用共同的回调函数,在回调函数中通过定时器 ID 来区分
是那个定时器的时间到。当然,使用不同的回调函数也是没问题的。
*/
for(i = 0; i < 2; i++)
{
xTimers[i] = xTimerCreate("Timer", /* 定时器名字 */
xTimerPer[i], /* 定时器周期,单位时钟节拍 */
pdTRUE, /* 周期性 */
(void *) i, /* 定时器 ID */
vTimerCallback); /* 定时器回调函数 */
if(xTimers[i] == NULL)
{
/* 没有创建成功,用户可以在这里加入创建失败的处理机制 */
}
else
{
/* 启动定时器,系统启动后才开始工作 */
if(xTimerStart(xTimers[i], 100) != pdPASS)
{
/* 定时器还没有进入激活状态 */
}
}
}
}
定时器组回调函数的实现:
/*
*********************************************************************************************************
* 函 数 名: vTimerCallback
* 功能说明: 定时器回调函数
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void vTimerCallback(xTimerHandle pxTimer)
{
uint32_t ulTimerID;
configASSERT(pxTimer);
/* 获取那个定时器时间到 */
ulTimerID = (uint32_t)pvTimerGetTimerID(pxTimer);
/* 处理定时器 0 任务 */
if(ulTimerID == 0)
{
bsp_LedToggle(1);
}
/* 处理定时器 1 任务 */
if(ulTimerID == 1)
{
bsp_LedToggle(2);
}
}
网友评论