【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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM