FreeRTOS操作系统例程(7):定时器组

安富莱电子 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);

    }

}

你可能感兴趣的:(FreeRTOS操作系统例程(7):定时器组)