打印
[其他]

Keil开发实操指南:变量仿真调试的基本方法

[复制链接]
96|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-7-30 16:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在使用Keil进行仿真调试时,会经常需要实时查看某个变量(全局变量、局部变量等)值的变化情况,以此来判断程序是否正常运行或者变量值变化是否正常。
但是,对于全局变量和局部变量,其仿真调试的方法是不一样的,本文进行介绍。
1、全局变量  
这里的全局变量包括基本数据类型(整型、浮点型等)和复杂数据类型(结构体、联合体等),也包括数组。

§ 如果需要在全速运行程序期间实时监控变量的数据变化,需要勾选“Periodic Window Update”, 如下图:
打开窗口“Watch Windows”用于存放需要监控的变量:
打开后如下:
会显示变量名称、当前值和变量数据类型;
双击“<Enter expression>”即可将变量拷贝到窗口里,比如如果需要监控main程序是否正常运行,那就可以将自定义的全局变量gRunCount放入窗口里,如下图:

注意:需要暂停运行程序才能执行拷贝操作。
默认显示制式为十六进制,如下图:
去掉勾选即可显示十进制,如下图:
重新运行程序后,当前值填充绿色,说明其值在实时更新,如下图:
如果需要监控全局结构体变量,直接拷贝到窗口里,就可以看到所有成员变量的当前值,如下图:
制式模式对浮点数据类型的设置无效。
如果需要监控全局数组,直接将数组名拷贝到窗口里即可,如下图所示:
如果需要在全速运行程序期间通过修改某个变量(该变量值不会实时更新)的值来调试程序的运行情况,则可以直接通过输入新值到“Value”窗口里实现(不需要暂停运行程序)。比如需要修改变量WEIGHT_RANGE_MAX的值为20,则可以双击“Value”框后输入新值并按回车键即可:
2、局部变量  
这里的局部变量也包括基本数据类型(整型、浮点型等)和复杂数据类型(结构体、联合体等),还包括静态变量(static)。
如果需要在程序运行期间监控局部变量的数据变化,则必须通过设置断点(Breakpoint)进行单步调试的方式执行,即不能在全速运行程序时实时查看局部变量的值变化情况。

如果将局部变量放入监控窗口里,在全速运行程序时,其值会报错,如下图:
当你在变量被使用的代码位置设置一个断点后再运行一次程序,程序运行到断点位置后,就可以看到变量的当前值:
因此,如果真的需要监控函数内部的局部变量的实时变化情况,可以将其临时更改为全局变量,待程序验证无误后再改回去即可。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1102

帖子

20

粉丝