美文网首页
FreeRTOS操作系统例程(5):系统时钟和时间管理

FreeRTOS操作系统例程(5):系统时钟和时间管理

作者: 闵许可 | 来源:发表于2019-05-23 09:44 被阅读0次

    安富莱电子 www.armfly.com

    安富莱_STM32-V5开发板_FreeRTOS教程(V1.0)

    FreeRTOS 时间相关的函数主要有以下 4 个:

     vTaskDelay ()

     vTaskDelayUntil ()

     xTaskGetTickCount()

     xTaskGetTickCountFromISR()

    FreeRTOS 的系统时钟节拍可以在配置文件 FreeRTOSConfig.h 里面设置:

    #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )//配置系统时钟1KHz,即 1ms

    二、使用例程

    1.vTaskDelay 

    函数 vTaskDelay 用于任务的延迟。使用举例:vTaskDelay(200);

    static void vTaskMsgPro(void *pvParameters)

    {

    TickType_t xDelay, xNextTime;

    const TickType_t xFrequency = 200;

    /* 获取 xFrequency 个时钟节拍后的时间 */

    xNextTime = xTaskGetTickCount() + xFrequency;

    while(1)

    {

    bsp_LedToggle(3);

    /* 用 vTaskDelay 实现 vTaskDelayUntil() */

    xDelay = xNextTime - xTaskGetTickCount();

    xNextTime += xFrequency;

    if(xDelay <= xFrequency)

    {

    vTaskDelay(xDelay);

    }

    }

    }

    2.vTaskDelayUntil

    函数 vTaskDelayUntil 用于周期性延迟,使用此函数需要在 FreeRTOSConfig.h 配置文件中配置如下宏定义为 1

    #define INCLUDE_vTaskDelayUntil 1

    /* vTaskDelayUntil 是绝对延迟,vTaskDelay 是相对延迟。*/

    vTaskDelayUntil(&xLastWakeTime, xFrequency);

    static void vTaskLED(void *pvParameters)

    {

    TickType_t xLastWakeTime;

    const TickType_t xFrequency = 200;

    /* 获取当前的系统时间 */

    xLastWakeTime = xTaskGetTickCount();

    while(1)

    {

    bsp_LedToggle(2);

    /* vTaskDelayUntil 是绝对延迟,vTaskDelay 是相对延迟。*/

    vTaskDelayUntil(&xLastWakeTime, xFrequency);

    }

    }

    3.xTaskGetTickCount

    函数 xTaskGetTickCount 用于获取系统当前运行的时钟节拍数。此函数用于在任务代码里面调用,如果在中断服务程序里面调用的话,需要使用函数xTaskGetTickCountFromISR,这两个函数切不可混用。

    printf("当前的系统时钟节拍数 = %d\r\n", xTaskGetTickCount());

    4.xTaskGetTickCountFromISR

    /*

    *********************************************************************************************************

    *  函 数 名: TIM6_IRQHandler

    *  功能说明: TIM6 中断服务程序。

    *  形 参: 无

    *  返 回 值: 无

    *********************************************************************************************************

    */

    void TIM6_IRQHandler( void )

    {

        TickType_t xTickCount;

        xTickCount = xTaskGetTickCountFromISR;

    }

    相关文章

      网友评论

          本文标题:FreeRTOS操作系统例程(5):系统时钟和时间管理

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