FreeRTOS-cpu利用率統計
阿新 • • 發佈:2020-10-09
目錄
前言
本筆記基於 stm32+FreeRTOS。
主要參考野火、安富萊。
概念
簡單概要:
-
各任務cpu利用率:
打印出各任務在某段時間內站用cpu時長的比例。 -
原理很簡單:
- 開啟一個高精度的定時器
- 讓一個全域性變數(如:ulCpuTraceTick)不斷往上累加
- 每次切換任務時,記錄上一個任務佔用了多少個高精度定時器的tick
- 累加到該表示該任務的變數中(如:ulCpuTraceTaskATick)
- 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
- 自定義心跳值,高頻累加即可。