五月色综合_娇妻卧室含辱迎接领导h_美女ppp_亚洲欧美aaa_天天在线综合_91午夜激情_裸体裸乳免费看_国产精品无码99re_日韩午夜视频在线观看_色爽 av_欧美大奶子视频_美女被爆操_国内久久_日本免费福利视频_苏语棠在线电视剧在线高清在线观看

【ARM】使用Event Recorder記錄函數執行時間

一、文檔背景

所有的軟件都是為了完成某些功能,當我們在設計一個項目產品功能的時候,勢必要考慮系統的反應速度。在硬件固定的情況下,軟件的時效性就決定著系統的反應速度了。我們大部分任務都采用一種輪詢或者是監控的狀態,如果一個任務占據了太長的 CPU 時間,就會帶來整個系統的延時,特別是在多任務的 RTOS 系統中,如果有時候任務時間太長,就導致總系統達不到我們的預期,那么我們就需要非常清楚地知道我們的任務到底運行了多少時間。


二、 實現 記錄函數執行時間的思路

事件記錄器為應用程序代碼中的事件注釋提供了API接口(函數調用)。這些功能不僅記錄事件本身,還記錄了時間戳和附加信息。數據存儲在目標硬件的RAM中的事件緩沖區中。

1. 添加Event Recorder組件

本次使用的是CMSIS-View組件,不是采用的compiler。在Keil MDK中,可以通過管理運行時環境來啟用EventRecorder功能。

2. 配置Event Recorder組件

在EventRecorderConf.h文件中進行以下配置:

○ EVENT_RECORD_COUNT設置記錄數量。

○ EVENT_TIMESTAMP_SOURCE選擇時間戳來源。

○ EVENT_TIMESTAMP_FREQ設定時鐘頻率。

○ 內存設置

為Event Recorder組件分配所需的內存。所需RAM大小計算公式為:164 + 16 * <記錄數>。此外,還需將EventRecorder信息數據段之外的內存初始化為0。

○ 在代碼中集成Event Recorder

在代碼中添加以下相關函數調用:

○ EventRecorderInitialize(uint32_t recording, uint32_t start):初始化事件記錄器。

○ EventStartA(slot)開始記錄事件。

○ EventStopA(slot)停止記錄事件。

通過在函數的開始位置調用EventStartA(slot),并在結束位置調用EventStopA(slot),可以記錄函數的執行時間。

○ 編譯與調試工程

編譯完成后,進入調試界面,找到“Event Statistics”視圖,查看函數執行時間的平均值、最小值、最大值、開始時間和結束時間。

三、 如何在STM32F746實現記錄函數執行時間

1. 選用STM32F746 中自帶的 Blink 示例進行測試。

編譯例程,并下載到目標板中,測試 LED 燈可以正常閃爍,保證程序編譯和下載都可以正確執行。

2. 添加Event Recorder 組件。

如圖 1 所示,打開 Manage Run-time Enviroment ,展開 CMSIS-View勾選 Event Recorder 并點擊 OK

圖 1

如圖 2 所示,可以看到工程中添加了EventRecorder.c 和 EventRecorderConf.h 兩個文件。

圖 2

3. 配置Event Recorder

如圖 3 所示,打開EventRecorderConf.h 文件,點擊底部的 Configuration Wizard。

在圖形界面中點擊 Expand All,展開Event Recorder 的配置參數。

這里我們只更改一下 Time Stamp Clock Frequency,如圖 4 更改為 216000000

圖 3


圖 4

4. 內存設置

如圖 5,點擊 Option for Taget ... ,選擇 Target 標簽,在 RAM 設置區域,更改為圖中所示內容。

圖 5


5. 添加Event Recorder 相關代碼

在 main.c 中包含 EventRecorder.h 頭文件

圖 6

在 main 函數中對EventRecorder 進行初始化

圖 7

在 Blinky.c中包含 EventRecorder.h 頭文件

圖 8

在thrLED 函數中增加EventStartA(0);EventStopA(0);

圖 9

6. 編譯下載

按 F7 進行編譯,可以看到沒有任何錯誤。下載到目標板上。

圖 10


五、討論分析

1. 修改函數內的時間,查看分析結果。


EventStopA(0);

圖 13

2. 多個函數進行測量時間。

EventStartB(0);

osThreadFlagsSet (tid_thrLED, 1U); // Set flag to thrLED

EventStopB(0);

圖 14

六、結論

1. 通過EventRecorder,我們能夠精準地測量函數的執行時間,從而為性能分析提供堅實的數據支持。

2. EventRecorder不僅限于單一函數的時間測量,它同樣擅長同時監控多個函數的執行時長,使得復雜的應用場景下的性能評估變得游刃有余。

3. 更令人稱道的是,這項技術并不依賴于繁瑣的跟蹤機制;僅需借助STLINK仿真器即可輕松實現,極大地簡化了開發流程中的調試步驟。

4. 以極其精簡的內存開銷作為代價,EventRecorder卻能為我們帶來詳盡而深入的應用程序執行時間分析報告,堪稱是軟件優化過程中不可或缺的利器。

如有任何問題或建議,請聯系相關負責人或技術支持團隊。

主站蜘蛛池模板: 天祝| 桃江县| 伊金霍洛旗| 无锡市| 错那县| 如东县| 金堂县| 静乐县| 郴州市| 桃园市| 普兰店市| 琼海市| 阿合奇县| 瓦房店市| 沂水县| 东兰县| 镇原县| 冀州市| 宁海县| 胶南市| 平舆县| 阳朔县| 云南省| 彰化县| 凤山市| 尉犁县| 哈巴河县| 宜兰县| 喀喇| 南投县| 松桃| 金昌市| 永昌县| 巍山| 咸阳市| 庆城县| 马龙县| 邵阳县| 临朐县| 营口市| 丰原市|