FreeRTOS操作系統例程(5):系統時鐘和時間管理

安富萊電子 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;

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ## 可重入函數 ### 可重入性的理解 若一個程序或子程序可以安全的被并行執行,則稱其為可重入的;即當該子程序正...
    夏至亦韻閱讀 726評論 0 0
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,878評論 0 38
  • 1.設計模式是什么? 你知道哪些設計模式,并簡要敘述?設計模式是一種編碼經驗,就是用比較成熟的邏輯去處理某一種類型...
    龍飝閱讀 2,187評論 0 12
  • 1. Object-c的類可以多重繼承么?可以實現多個接口么?Category是什么?重寫一個類的方式用繼承好還是...
    失憶的程序員閱讀 651評論 0 1
  • 轉:http://www.cocoachina.com/programmer/20151019/13746.htm...
    Style_偉閱讀 1,330評論 0 3