一、文檔背景
對(duì)于工程中變量的變化情況,是大部分工程師在項(xiàng)目開發(fā)過程中經(jīng)常需要注意的。而目前大部分的工程師的做法一般都是通過串口打印變量的值,通過打印出來的變量值的情況從而去判斷變量的變化是否正常。這樣的方式,只是展示當(dāng)前時(shí)刻變量的值而已,而對(duì)于變量的變化情況并不直觀。
Keil MDK的Logic Analyzer功能是一種強(qiáng)大的調(diào)試工具,允許開發(fā)者實(shí)時(shí)觀察和分析嵌入式系統(tǒng)中的變量、寄存器和內(nèi)存位置的變化情況。通過圖形化的波形顯示,開發(fā)者可以直觀地查看數(shù)據(jù)隨時(shí)間的變化,幫助識(shí)別代碼運(yùn)行中的邏輯問題和性能瓶頸。這種可視化的調(diào)試方式大大提高了開發(fā)和調(diào)試效率,尤其在處理復(fù)雜的嵌入式系統(tǒng)時(shí),能更迅速地定位和解決問題,確保系統(tǒng)穩(wěn)定高效運(yùn)行。
二、 Logic Analyzer功能的實(shí)現(xiàn)
(一) 、軟硬件環(huán)境:
1. 軟件環(huán)境:Keil MDK 5.38a
2. 硬件環(huán)境:ULINK Pro、STM32F103開發(fā)板
3. 電腦環(huán)境:windows 11
(二) 、Logic Analyzer功能的使能:
1. 要想啟動(dòng)Logic Analyzer功能,需要使能仿真器的Trace功能(如圖2-1)。
注意:Logic Analyzer功能在這里使用的SW接口進(jìn)行調(diào)試,非ETM接口。Logic Analyzer功能使能Trace的時(shí)候勾選Trace Enable選項(xiàng)即可,和性能分析、代碼覆蓋率不一樣,不需要芯片具備Trace數(shù)據(jù)端口。

圖2-1
(三) 、Logic Analyzer功能的使用
1. Logic Analyzer窗口可以通過菜單中View->Analysis Windows->Logic Analyzer去打開(如圖2-2),或者可以通過工具欄中System Analysis WIndows的圖標(biāo)去打開Logic Analyzer窗口(如圖2-3)。

圖2-2

圖2-3
2. 想要將變量添加到Logic Analyzer窗口中,可以在代碼中直接選中對(duì)應(yīng)的變量,然后,右鍵選擇Add ‘xxx’ to ...->Analyzer。然后,我們就可以在Logic Analyzer窗口中看到變量被添加到進(jìn)去了(如圖2-4)?;蛘咭部梢酝ㄟ^watch窗口中去添加(如圖2-5)。

圖2-4

圖2-5
3. 如果在前面的步驟中沒有使能Trace功能的話,在添加變量到Logic Analyzer窗口時(shí)候就會(huì)提示“Cannot Add ‘xxx’ to Logic Analyzer”,并且在Command窗口中會(huì)提示“*** error 129: Trace is disabled!”(如圖2-6)。

圖2-6
4. 添加好變量到Logic Analyzer窗口后,運(yùn)行程序后,就會(huì)顯示出當(dāng)前變量的變化情況了。(如圖2-7)注意:這里不會(huì)實(shí)時(shí)顯示波形,需要程序停止運(yùn)行后,才會(huì)顯示出波形。并且只能顯示全局變量和靜態(tài)變量的變化情況。

圖2-7
三、Logic Analyzer窗口解析

圖3-1
(一) 、上圖就是整個(gè)Logic Analyzer窗口的。窗口中主要由工具欄和顯示窗口組成的。
(二) 、工具欄包含以下的內(nèi)容
1. Setup按鈕:打開一個(gè)Setup Logic Analyzer對(duì)話框來定義用于記錄和配置信號(hào)輸出的變量??梢酝ㄟ^信號(hào)的上下文菜單更改一些配置設(shè)置。(如圖3-2)
a) Current Logic Analyzer Signals:顯示當(dāng)前被添加到 Logic Analyzer 中的變量或者信號(hào)
b) Signal Display:配置信號(hào)波形的外觀。
i) Display Type:設(shè)置信號(hào)顯示輸出模式為Analog(模擬量)、BIt(0或1)或狀態(tài)量(信號(hào)轉(zhuǎn)換)。根據(jù)數(shù)據(jù)的類型選擇即可。
ii) Color:選擇數(shù)據(jù)信號(hào)波形顯示的顏色
iii) Hexadecimal Display:顯示以HEX格式顯示信號(hào)值。當(dāng)禁用時(shí),顯示十進(jìn)制值。
c) Display Range:顯示類型模擬配置信號(hào)幅度范圍。范圍值可以用十六進(jìn)制或十進(jìn)制格式指定。
i) Max:波形顯示的最大值
ii) Min:波形顯示的 最小值
d) Display Formula(signal & Mask)>> Shift:顯示信號(hào)值的特定位
i) And Mask:顯示的信號(hào)值指定與掩碼
ii) Shift Right:顯示的信號(hào)值指定右移因子
e) Export/Import:
i) Export Signal Definitions:將當(dāng)前的信號(hào)定義(不是信號(hào)記錄)保存在一個(gè)“*. uvl”文件中。
ii) Import Signal Definitions:導(dǎo)入先前保存在“. uvl”文件中的信號(hào)定義。
f) Kill All:清除Logic Analyzer中的全部信號(hào)。

圖3-2
2. Load:將之前記錄并保存的信號(hào)導(dǎo)入到文件(*. UVLA)中。(如圖3-3)
3. Save:將信號(hào)以專有格式(.UVLA)存儲(chǔ)在一個(gè)文件中,或者以逗號(hào)分隔的文件格式(.CSV),或以制表符分隔的文件格式(*.TAB)存儲(chǔ),以便將來進(jìn)行分析。(如圖3-3)

圖3-3
4. 時(shí)間字段顯示(如圖3-4)
a) Min Time:設(shè)置顯示的信號(hào)記錄緩沖區(qū)中的第一個(gè)時(shí)間戳。當(dāng)μVision記錄信號(hào)時(shí),時(shí)間從零開始,并不斷向前滾動(dòng)。
b) Max Time:信號(hào)記錄緩沖區(qū)的最后一個(gè)時(shí)間戳。它顯示自信號(hào)記錄開始的時(shí)間。
c) Grid:設(shè)置兩條柵格線之間的時(shí)間間隔。

圖3-4
5. Zoom縮放按鈕改變顯示的時(shí)間范圍(如圖3-5):
a) In:放大信號(hào)以獲得參考線的詳細(xì)視圖。兩條網(wǎng)格線之間的時(shí)間間隔變小了。
b) Out:將信號(hào)放大,以便更好地查看參考線。兩條網(wǎng)格線之間的時(shí)間間隔變大。
c) All:顯示了信號(hào)記錄緩沖區(qū)的完整內(nèi)容。

圖3-5
6. Min/Max按鈕配置顯示的信號(hào)幅度范圍(如圖3-6)
a) Auto:根據(jù)信號(hào)記錄緩沖數(shù)據(jù)自動(dòng)配置信號(hào)幅度范圍。
b) Undo:可恢復(fù)在單擊“Auto”按鈕之前存在的幅度范圍設(shè)置。

圖3-6
7. Update Screen按鈕用于刷新、停止或清除屏幕內(nèi)容。(如圖3-7)
a) Start/Stop:Stop停止更新顯示。μVision繼續(xù)填充信號(hào)記錄緩沖區(qū)。單擊按鈕時(shí),該按鈕將其樣板文本更改為Start。Start用來自信號(hào)記錄緩沖區(qū)和傳入數(shù)據(jù)的數(shù)據(jù)更新顯示。單擊按鈕時(shí),該按鈕將其樣板文本更改為Stop。
b) Clear:清空屏幕和數(shù)據(jù)緩沖區(qū)。

圖3-7
8. Transition按鈕將參考線固定到下一個(gè)過渡點(diǎn)。(如圖3-8)
a) Priv:將參考線移動(dòng)到前一個(gè)過渡點(diǎn)。
b) Next:將參考線移動(dòng)到后續(xù)的過渡點(diǎn)。

圖3-8
9. Jump to按鈕可導(dǎo)航到與鼠標(biāo)光標(biāo)對(duì)應(yīng)的代碼或跟蹤數(shù)據(jù)。(如圖3-9)
a) Code:打開導(dǎo)致信號(hào)轉(zhuǎn)換的代碼行處的反匯編或源代碼窗口。當(dāng)程序計(jì)數(shù)器值被記錄時(shí),該按鈕處于活動(dòng)狀態(tài)。
b) Trace:打開“Trace Data”和“Trace Navigation”窗口。跟蹤記錄與邏輯分析器同步。
10. SIgnal Info:當(dāng)鼠標(biāo)懸停在信號(hào)點(diǎn)上時(shí),信號(hào)信息啟用信號(hào)細(xì)節(jié)。(如圖3-10)
11. Show Cycles:啟用周期信息,這些信息顯示在時(shí)間戳軸中。(如圖3-10)
12. Amplitude:啟用參考振幅線,當(dāng)Cursor啟用時(shí),也啟用鼠標(biāo)振幅線。(如圖3-10)
13. Cursor:使鼠標(biāo)光標(biāo)行能夠顯示鼠標(biāo)位置的信號(hào)值,并與參考行進(jìn)行增量。(如圖3-10)
14. Timestamps Enable:啟用動(dòng)態(tài)激活時(shí)間戳。(如圖3-10)

(如圖3-10)
四、討論分析
1. Logic Analyzer可以添加什么信號(hào)或者變量?
可以添加靜態(tài)變量和全局變量??梢蕴砑釉赟ymbol Windows的各個(gè)端口的值。

圖4-1
2. 關(guān)于端口值的變化如何查看?
請(qǐng)參考:0101TEC20230814-Keil MDK-邏輯分析
五、結(jié)論
Keil MDK的Logic Analyzer功能,可以有效地降低客戶在對(duì)于數(shù)據(jù)或者端口數(shù)據(jù)的檢測的工作難度。通過Logic Analyzer功能,直觀地通過波形就可以分析出變量的波動(dòng)情況。確認(rèn)是否存在數(shù)據(jù)異常的狀態(tài)。還可以有參考性地根據(jù)時(shí)間戳判斷異常發(fā)生的時(shí)間等信息。