相关阅读嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm=1001.2014.3001.5482
在Keil中调试程序时,Memory窗口是一个很有用的工具(它们由调试器厂商提供并嵌入IDE),可以实时显示存储器中的数据值,本文将探讨其更新时机问题。
根据Keil官方的文档,Memory窗口在以下三种情况下会更新。
- 每当程序执行进入挂起状态时,这可能发生在程序执行遇到断点时,或者程序在全速运行时使用Stop按钮停止时,或者单步执行时。
- 当程序在全速运行时,且View->Periodic Window Update选项被打开,这会导致Memory窗口每隔一定时间进行更新(目前没有找到控制这个时间的方法)。
- 当程序处于挂起状态,点击了Toolbox->Update Windows时,会更新一次。
下面将分别对这三点进行实验,本文的所有实验使用Keil配合Jlink调试器。使用STM32F103单片机上的GPIO外设进行测试,开发板上有一个按键连接至该GPIO,所以当按键按下时,外设的输入寄存器值会发生改变。
程序挂起
在首先进行了GPIO的一系列初始化后,程序执行遇到断点,单步执行,使用Stop按钮停止,Memory窗口中输入寄存器处的值根据当前的按钮是否按下进行更新,结果如下。
按键按下前:
按键按下后:
需要注意的是,以上的三种情况,只会在挂起时更新一次,所以此后再改变按钮状态,无法被观察到更新。
Periodic Window Update
当开启了该选项后,程序在全速运行时会进行周期性更新,结果与程序挂起相同。
手动更新
当程序处于挂起状态,且点击了后,会强制进行一次更新,结果结果与程序挂起相同。
JMem.exe
JMem.exe是Jlink提供的观察Memory的软件,他可以设置的周期更新的时间,可以在在全速运行、程序挂起时都执行周期更新,如下图所示。