1. 程式人生 > 實用技巧 >FreeRTOS-cpu利用率統計

FreeRTOS-cpu利用率統計

目錄


前言

本筆記基於 stm32+FreeRTOS。
主要參考野火安富萊


概念

簡單概要:

  • 各任務cpu利用率:
    打印出各任務在某段時間內站用cpu時長的比例。

  • 原理很簡單:

    1. 開啟一個高精度的定時器
    2. 讓一個全域性變數(如:ulCpuTraceTick)不斷往上累加
    3. 每次切換任務時,記錄上一個任務佔用了多少個高精度定時器的tick
    4. 累加到該表示該任務的變數中(如:ulCpuTraceTaskATick
    5. ulCpuTraceTaskATick/ulCpuTraceTick 即可計算出該任務的CPU佔用率。

作用

 闊以清晰地看出各個任務的cpu利用率,驗證一個系統好壞的方法之一。
 如,一個系統總任務cpu利用率經常 大於80%,會造成一些緊急事件無法及時得到響應,同時,峰值可能超出100%,導致任務滯後。
 又如,一個系統總任務cpu利用率經常 小於 10%,導致資源浪費。
 再如,闊以監測各個任務 cup 佔用率,發現某些任務經常 大於70%,便去優化優化該任務。
注:以上數值標準均為個人習慣,並非標準答案!

必看點

  • 影響
     該功能在除錯時啟用,在產品釋出時務必關閉
     因為監測cpu利用率也是消耗cpu資源的。

  • 時鐘精度
     一般為系統時鐘節拍的 10-20 倍
     如,當前系統節拍為 1000 Hz,那麼定時器節拍則為 10000-20000 Hz。按20000 Hz 計算,即 50us 計算一次。由於FreeRTOS沒有對其進行溢位保護,所以最大支援計數時間為:2^32 * 50us / 3600s = 59.6 分鐘

    。超出後結果將不準確。

實現

新增幾個巨集定義

原始碼

FreeRTOS
/*
 * 當前檔案為 FreeRTOSConfig.h
*/

#define configUSE_TRACE_FACILITY	1      /* cpu task */

/* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS                1      /* cpu task */
#define configUSE_STATS_FORMATTING_FUNCTIONS         1      /* cpu task */
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()     (ulCpuTraceTick = 0ul)
#define portGET_RUN_TIME_COUNTER_VALUE()             ulCpuTraceTick
STM32 定時器

(待寫)

簡要說明

  • configUSE_TRACE_FACILITY

    • 啟用FreeRTOS視覺化追蹤除錯功能
  • configGENERATE_RUN_TIME_STATS

    • 啟用FreeRTOS執行時間統計功能
  • configUSE_STATS_FORMATTING_FUNCTIONS

    • 啟用FreeRTOS格式化函式功能
  • portCONFIGURE_TIMER_FOR_RUN_TIME_STATS

    • 重置自定義心跳值
  • portGET_RUN_TIME_COUNTER_VALUE

    • 巨集定義自定義心跳變數
  • ulCpuTraceTick

    • 自定義心跳值,高頻累加即可。