青青av-亚洲激情一区二区-欧洲色综合-看片网址国产福利av中文字幕-成人精品毛片-亚洲黄色免费观看-国产夫妻在线观看-69av电影-久久性片-中文字幕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卻能為我們帶來詳盡而深入的應用程序執行時間分析報告,堪稱是軟件優化過程中不可或缺的利器。

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

主站蜘蛛池模板: 克山县| 米脂县| 三门县| 丹阳市| 安康市| 巢湖市| 周口市| 阿拉善左旗| 海阳市| 凉城县| 修文县| 卓资县| 城市| 监利县| 威海市| 黑水县| 垦利县| 加查县| 昂仁县| 晴隆县| 高平市| 凤冈县| 古田县| 大埔区| 惠来县| 尖扎县| 柳河县| 晋江市| 吉隆县| 都江堰市| 麦盖提县| 巴南区| 昌都县| 化州市| 休宁县| 思茅市| 蒲城县| 高雄县| 庆城县| 淄博市| 宁蒗|