美文网首页
FreeRTOS操作系统例程(7):定时器组

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

作者: 闵许可 | 来源:发表于2019-05-28 10:25 被阅读0次

    安富莱电子 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):定时器组

          本文链接:https://www.haomeiwen.com/subject/heigzqtx.html