调试笔记--jlink 变量转实时波形小技巧
調試筆記–jlink 變量轉實時波形小技巧
上篇講了jlink RTT組件在RAM中開辟一段內存,將printf字符串存入然后通過jlink調試接口讀取RAM,將printf字符串在jlink-RTT Viewer組件上顯示出來。printf的字符串可以通過jlink的調試接口從RAM讀出,舉一反三,那么變量呢?變量也是可以。
本文參考:
安富萊嵌入式專題教程第6期
安富萊嵌入式專題教程第4期
安裝J-Scope軟件
安裝SEGGER軟件時,最好都不要有中文路徑,SEGGER的中文支持很差
軟件下載連接 https://www.segger.com/downloads/jlink/#JScope
方法一 通過Debug文件信息顯示變量波形
優點:不用修改代碼可以直接監視全局變量的實時波形
缺點:最多監視10個全局變量,每個變量采集頻率固定最高為1kHz(普通jlink)
本質上就是通過Debug文件信息獲取全局變量地址信息,然后jlink以固定頻率采集固定地址RAM內的數據繪制波形
這里沒有直接選擇芯片類型(Specify Target Device),可能因為驅動版本問題,選擇會閃退,后面再選
選擇芯片型號
常用操作
- 第三個組件框內為開始、停止和暫停,第六個組件框內為單片機程序運行、暫停、復位
- 鍵盤上的左右箭頭 為 x軸縮放快捷鍵
- 鍵盤上的加減符號 為 y軸縮放快捷鍵(使用之前需先選擇要縮放的變量)
其他操作可自行查閱手冊
方法二 通過RTT組件顯示波形
優點:速度比方法一快很多,而且采樣更加靈活
缺點:需要修改代碼,添加RTT組件
本質上就是程序中通過向RTT組件緩沖區寫入數據,然后jlink通過讀取RTT組件緩沖區內數據繪制波形
添加SEGGER - RTT中間件
參考博客向工程中添加jlink-RTT Viewer組件
初始化組件
和RTT打印功能不一樣(RTT通道0的緩沖區RTT組件已經自行創建了)
使用RTT組件上報波形需要用戶自行申請緩沖區,并對RTT通道進行初始化
- 通道號0已經被RTT printf默認占用了,可以用1-SEGGER_RTT_MAX_NUM_UP_BUFFERS(默認可用1-2)
- 通道名
通道名字不可以隨便起,J-Scope軟件會根據通道名格式提取RAM數據
例如: JScope_u2 : 表示數據包僅包含 16 位無符號數。
JScope_u4i4:表示數據包含兩個變量,一個無符號32位 一個有符號32位
- 緩沖區大小
默認用1KB即可,如果RAM緊湊,可以根據jlink速度和數據上報頻率自行計算合適的RAM大小
- 緩沖區滿怎么處理數據
初始化并上報數據
注意,上報數據的時候要按照緩沖區名字的順序上報,順序錯亂會導致波形錯亂
#include "SEGGER_RTT.h" uint32_t g_ulData; int32_t g_lData; void vTaskLED(void * pvParameters) {while(1){vTaskDelay(100);HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);g_ulData ++;g_lData --;//上報數據SEGGER_RTT_Write(1, &g_ulData, 4);SEGGER_RTT_Write(1, &g_lData, 4);} }/** jscop緩沖區大小 */ #define JSCOP_BUFF_SIZE 1024/** JSCOP 緩沖區 */ uint8_t g_ucJscopBuff[JSCOP_BUFF_SIZE];void SeggerRTTInit(void) {/* 配置上行通道 1,緩沖區g_ucJscopBuff *///#define SEGGER_RTT_MODE_NO_BLOCK_SKIP (0) // 如果緩沖區放不下當前幀數據,則舍棄當前幀//#define SEGGER_RTT_MODE_NO_BLOCK_TRIM (1) // 如果緩沖區放不下當前幀數據,則緩沖區能放幾個當前幀byte就放幾個//#define SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (2) // 如果緩沖區放不下當前幀數據,則堵塞直到緩沖區能放下當前幀所有數據SEGGER_RTT_ConfigUpBuffer(1, "JScope_u4i4", g_ucJscopBuff, JSCOP_BUFF_SIZE, SEGGER_RTT_MODE_NO_BLOCK_SKIP); }J-Scope軟件配置
J-Scope軟件配置為RTT模式,其他操作均和方法一一樣
總結
以上是生活随笔為你收集整理的调试笔记--jlink 变量转实时波形小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: freeRtos学习笔记 (9) 移植和
- 下一篇: C# 学习笔记(13)自己的串口助手