JNH官网

【ARM】MDK实现Logic Analyzer功能查看变量的变化情况

一、文档背景

对于工程中变量的变化情况,是大部分工程师在项目开发过程中经常需要注意的。而目前大部分的工程师的做法一般都是通过串口打印变量的值,通过打印出来的变量值的情况从而去判断变量的变化是否正常。这样的方式,只是展示当前时刻变量的值而已,而对于变量的变化情况并不直观。

Keil MDK的Logic Analyzer功能是一种强大的调试工具,允许开发者实时观察和分析嵌入式系统中的变量、寄存器和内存位置的变化情况。通过图形化的波形显示,开发者可以直观地查看数据随时间的变化,帮助识别代码运行中的逻辑问题和性能瓶颈。这种可视化的调试方式大大提高了开发和调试效率,尤其在处理复杂的嵌入式系统时,能更迅速地定位和解决问题,确保系统稳定高效运行。


二、 Logic Analyzer功能的实现

(一) 、软硬件环境:

1. 软件环境:Keil MDK 5.38a

2. 硬件环境:ULINK Pro、STM32F103开发板

3. 电脑环境:windows 11

(二) 、Logic Analyzer功能的使能:

1. 要想启动Logic Analyzer功能,需要使能仿真器的Trace功能(如图2-1)。

注意:Logic Analyzer功能在这里使用的SW接口进行调试,非ETM接口。Logic Analyzer功能使能Trace的时候勾选Trace Enable选项即可,和性能分析、代码覆盖率不一样,不需要芯片具备Trace数据端口。


图2-1


(三) 、Logic Analyzer功能的使用

1. Logic Analyzer窗口可以通过菜单中View->Analysis Windows->Logic Analyzer去打开(如图2-2),或者可以通过工具栏中System Analysis WIndows的图标去打开Logic Analyzer窗口(如图2-3)。


图2-2


图2-3



2. 想要将变量添加到Logic Analyzer窗口中,可以在代码中直接选中对应的变量,然后,右键选择Add ‘xxx’ to ...->Analyzer。然后,JNH官网就可以在Logic Analyzer窗口中看到变量被添加到进去了(如图2-4)。或者也可以通过watch窗口中去添加(如图2-5)。

图2-4


图2-5

3. 如果在前面的步骤中没有使能Trace功能的话,在添加变量到Logic Analyzer窗口时候就会提示“Cannot Add ‘xxx’ to Logic Analyzer”,并且在Command窗口中会提示“*** error 129: Trace is disabled!”(如图2-6)。

图2-6

4. 添加好变量到Logic Analyzer窗口后,运行程序后,就会显示出当前变量的变化情况了。(如图2-7)注意:这里不会实时显示波形,需要程序停止运行后,才会显示出波形。并且只能显示全局变量和静态变量的变化情况。

图2-7

三、Logic Analyzer窗口解析

图3-1

(一) 、上图就是整个Logic Analyzer窗口的。窗口中主要由工具栏和显示窗口组成的。

(二) 、工具栏包含以下的内容

1. Setup按钮:打开一个Setup Logic Analyzer对话框来定义用于记录和配置信号输出的变量。可以通过信号的上下文菜单更改一些配置设置。(如图3-2)

a) Current Logic Analyzer Signals:显示当前被添加到 Logic Analyzer 中的变量或者信号

b) Signal Display:配置信号波形的外观。

i) Display Type:设置信号显示输出模式为Analog(模拟量)、BIt(0或1)或状态量(信号转换)。根据数据的类型选择即可。

ii) Color:选择数据信号波形显示的颜色

iii) Hexadecimal Display:显示以HEX格式显示信号值。当禁用时,显示十进制值。

c) Display Range:显示类型模拟配置信号幅度范围。范围值可以用十六进制或十进制格式指定。

i) Max:波形显示的最大值

ii) Min:波形显示的 最小值

d) Display Formula(signal & Mask)>> Shift:显示信号值的特定位

i) And Mask:显示的信号值指定与掩码

ii) Shift Right:显示的信号值指定右移因子

e) Export/Import:

i) Export Signal Definitions:将当前的信号定义(不是信号记录)保存在一个“*. uvl”文件中。

ii) Import Signal Definitions:导入先前保存在“. uvl”文件中的信号定义。

f) Kill All:清除Logic Analyzer中的全部信号。


图3-2

2. Load:将之前记录并保存的信号导入到文件(*. UVLA)中。(如图3-3)

3. Save:将信号以专有格式(.UVLA)存储在一个文件中,或者以逗号分隔的文件格式(.CSV),或以制表符分隔的文件格式(*.TAB)存储,以便将来进行分析。(如图3-3)



图3-3


4. 时间字段显示(如图3-4)

a) Min Time:设置显示的信号记录缓冲区中的第一个时间戳。当µVision记录信号时,时间从零开始,并不断向前滚动。

b) Max Time:信号记录缓冲区的最后一个时间戳。它显示自信号记录开始的时间。

c) Grid:设置两条栅格线之间的时间间隔。

图3-4


5. Zoom缩放按钮改变显示的时间范围(如图3-5):

a) In:放大信号以获得参考线的详细视图。两条网格线之间的时间间隔变小了。

b) Out:将信号放大,以便更好地查看参考线。两条网格线之间的时间间隔变大。

c) All:显示了信号记录缓冲区的完整内容。



图3-5


6. Min/Max按钮配置显示的信号幅度范围(如图3-6)

a) Auto:根据信号记录缓冲数据自动配置信号幅度范围。

b) Undo:可恢复在单击“Auto”按钮之前存在的幅度范围设置。


图3-6


7. Update Screen按钮用于刷新、停止或清除屏幕内容。(如图3-7)

a) Start/Stop:Stop停止更新显示。µVision继续填充信号记录缓冲区。单击按钮时,该按钮将其样板文本更改为Start。Start用来自信号记录缓冲区和传入数据的数据更新显示。单击按钮时,该按钮将其样板文本更改为Stop。

b) Clear:清空屏幕和数据缓冲区。



图3-7


8. Transition按钮将参考线固定到下一个过渡点。(如图3-8)

a) Priv:将参考线移动到前一个过渡点。

b) Next:将参考线移动到后续的过渡点。

图3-8


9. Jump to按钮可导航到与鼠标光标对应的代码或跟踪数据。(如图3-9)

a) Code:打开导致信号转换的代码行处的反汇编或源代码窗口。当程序计数器值被记录时,该按钮处于活动状态。

b) Trace:打开“Trace Data”和“Trace Navigation”窗口。跟踪记录与逻辑分析器同步。



10. SIgnal Info:当鼠标悬停在信号点上时,信号信息启用信号细节。(如图3-10)

11. Show Cycles:启用周期信息,这些信息显示在时间戳轴中。(如图3-10)

12. Amplitude:启用参考振幅线,当Cursor启用时,也启用鼠标振幅线。(如图3-10)

13. Cursor:使鼠标光标行能够显示鼠标位置的信号值,并与参考行进行增量。(如图3-10)

14. Timestamps Enable:启用动态激活时间戳。(如图3-10)


(如图3-10)


四、讨论分析

1. Logic Analyzer可以添加什么信号或者变量?

可以添加静态变量和全局变量。可以添加在Symbol Windows的各个端口的值。


图4-1


2. 关于端口值的变化如何查看?

请参考:0101TEC20230814-Keil MDK-逻辑分析




五、结论

Keil MDK的Logic Analyzer功能,可以有效地降低客户在对于数据或者端口数据的检测的工作难度。通过Logic Analyzer功能,直观地通过波形就可以分析出变量的波动情况。确认是否存在数据异常的状态。还可以有参考性地根据时间戳判断异常发生的时间等信息。

jnh官网 jnh官网 jnh官网 jnh官网 金年会 金年会 金年会 金年会