除錯筆記–keil 測量周期小技巧
本文參考安富萊專題教程第7期 http://www.armbbs.cn/forum.php?mod=viewthread&tid=87176&extra=page%3D1
- cortex-m內核的單片機,內核內除了systick定時器外,還有一個用于除錯的WDT定時器,可以在keil中協助測量代碼運行周期,
WDT定時器默認是給除錯器用的,自己最好不要使用,
直接看keil的狀態欄計時器
-
一定要確保時鐘周期和單片機內核一致

-
在要測量代碼前后打上斷點
例如要測GPIO翻轉函式所需時間,在翻轉函式前后打上斷點,然后右鍵將t2清零,再點擊運行到下一個斷點處,然后觀察t2時間戳
t0代表從函式上電后開始計時到當前的時間(不用擔心WDT溢位問題,keil會自動計算)
t1和t2是兩個時間戳,用戶可以用這兩個時間戳互相配合,實作自己想要的功能

使用keil的Event Recorder中間件測量
Event Recorder中間件支持時間和功耗測量,printf列印,及keil其他中間件的除錯,是keil專門用于除錯的組件,其原理簡單來說就是將一些除錯資訊以固定的格式存放在RAM中,然后通過除錯器找到并讀取RAM中固定格式的資料,通過keil的界面組件顯示出來,因此使用Event Recorder中間件需要修改代碼,并且需要占用一定的RAM空間,
- keil添加組件
如果網不好,可以通過 http://www.armbbs.cn/forum.php?mod=viewthread&tid=96992&highlight=pack 鏡像下載后,自行安裝

- 工程添加組件

- 初始化組件

并添加一下代碼進行初始化組件
#include "EventRecorder.h"
/* 初始化 EventRecorder 并開啟 */
EventRecorderInitialize(EventRecordAll, 1U);
- 呼叫計時API函式
計時API其實就是將DWT計時器的時鐘數以固定格式存放到RAM中
//引數 slot范圍 0-15 共16個計時通道
EventStartA(slot);
/* 要測量的代碼 */
EventStopA(slot);

ps:這個功能受除錯器功能影響,雖然dap、jlink都可以用,但是實測發現dap有時不能實時檢測,不過Event Recorder中間件還帶printf功能,并且keil其他中間件例如RTX5或者FREERTOS都有配套的Event Recorder檔案,非常方便除錯OS(可以獲取OS堆疊情況,任務切換情況等資訊)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287231.html
標籤:其他
上一篇:【STM32F407的DSP教程】第32章 STM32F407的實數FFT的逆變換(支持單精度和雙精度)
下一篇:ubuntu下c語言除錯串口
