在使用Keil进行仿真调试时,会经常需要实时查看某个变量(全局变量、局部变量等)值的变化情况,以此来判断程序是否正常运行或者变量值变化是否正常。 但是,对于全局变量和局部变量,其仿真调试的方法是不一样的,本文进行介绍。 1、全局变量 这里的全局变量包括基本数据类型(整型、浮点型等)和复杂数据类型(结构体、联合体等),也包括数组。
§ 如果需要在全速运行程序期间实时监控变量的数据变化,需要勾选“Periodic Window Update”, 如下图: 打开窗口“Watch Windows”用于存放需要监控的变量: 打开后如下: 会显示变量名称、当前值和变量数据类型; 双击“<Enter expression>”即可将变量拷贝到窗口里,比如如果需要监控main程序是否正常运行,那就可以将自定义的全局变量gRunCount放入窗口里,如下图:
注意:需要暂停运行程序才能执行拷贝操作。 默认显示制式为十六进制,如下图: 去掉勾选即可显示十进制,如下图: 重新运行程序后,当前值填充绿色,说明其值在实时更新,如下图: 如果需要监控全局结构体变量,直接拷贝到窗口里,就可以看到所有成员变量的当前值,如下图: 制式模式对浮点数据类型的设置无效。 如果需要监控全局数组,直接将数组名拷贝到窗口里即可,如下图所示: 如果需要在全速运行程序期间通过修改某个变量(该变量值不会实时更新)的值来调试程序的运行情况,则可以直接通过输入新值到“Value”窗口里实现(不需要暂停运行程序)。比如需要修改变量WEIGHT_RANGE_MAX的值为20,则可以双击“Value”框后输入新值并按回车键即可: 2、局部变量 这里的局部变量也包括基本数据类型(整型、浮点型等)和复杂数据类型(结构体、联合体等),还包括静态变量(static)。 如果需要在程序运行期间监控局部变量的数据变化,则必须通过设置断点(Breakpoint)进行单步调试的方式执行,即不能在全速运行程序时实时查看局部变量的值变化情况。
如果将局部变量放入监控窗口里,在全速运行程序时,其值会报错,如下图: 当你在变量被使用的代码位置设置一个断点后再运行一次程序,程序运行到断点位置后,就可以看到变量的当前值: 因此,如果真的需要监控函数内部的局部变量的实时变化情况,可以将其临时更改为全局变量,待程序验证无误后再改回去即可。
|