打印
[应用方案]

Keil MDK5 硬件仿真之查看变量的值

[复制链接]
1472|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1988020566|  楼主 | 2023-5-29 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  • 将光标移动到需要观察值的变量处,并不需要选中这个变量,只需要保证光标在变量内部就行,然后单击右键,如图:
  • 在弹出来的选项框中选择Add ‘temp’ to…然后在右侧弹出的选项中选择加入到Watch1或者Watch2中,这里笔者选择的是加入Watch1,如图:

    单击添加之后会在下方出现一个Watch1窗口,如图:

    我们可以把不需要的其他窗口关闭,然后拖动Watch1窗口上部的蓝色的地方,将之放置到合适的位置,如图:
  • 单击左上角的运行按钮,使程序按照自己希望的方式运行,这样右侧的Watch1窗口的变量的值就会随着程序的运行而改变,笔者这里是将temp变量自增,在执行一行程序之后,该变量的值变为了1,如图所示:

    此时这里是以十六进制显示的这个变量,我们可以在右侧Watch1窗口中这个变量名称的那个灰色的栏目处右键单击,单击那个显示对号的Hexadecimal Display按钮,将那个显示对号的Hexadecimal Display按钮的对号去掉,如图:

    去掉之后就是以十进制显示变量的值了:

    注意: 这个Watch窗口只能直接查看全局变量的值,函数内的局部变量或者是用static修饰的变量是无法值显示值的需要多进行一步操作:如下图所示,当将函数内的局部变量或者用static修饰的变量添加到watch窗口后显示cannot evaluate

    笔者初步判断是因为程序没有运行到定义这个变量的地方,所以如果是局部变量的话只要在定义这个变量的地方打一个断点,如果是static修饰的全局变量的话则在定义这个全局变量的文件内任何一处打一个断点,点击运行程序按钮,就能正确显示变量的值,同时可以修改这个变量的值:

    之后再取消断点就可以正常显示了:
  • 如果在程序运行时变量的值不会刷新,则点击状态栏中的View按钮,在弹出来的窗口中查看最下部的Periodic Window Update前面是否有对号,如果没有对号则单击这个按钮,使之启用,此时Watch窗口中的变量的值就可以随着程序的运行实时刷新了。

    此外,如果我们想恢复到最开始窗口显示的式样,则可以点击状态栏上的Window按钮,在弹出来的下拉列表中单击Reset View to Defaults之后在弹出来的选项中选择Reset按钮,如图1和图2和图3所示,就可以将显示的窗口恢复到默认状态了:




使用特权

评论回复
沙发
tpgf| | 2024-3-4 11:22 | 只看该作者
这种方式看到的变量值会有一定的滞后性吧

使用特权

评论回复
板凳
Emily999| | 2024-3-4 14:47 | 只看该作者
这个简单的很啊,就是放watch1里就行了

使用特权

评论回复
地板
Alina艾| | 2024-3-4 15:57 | 只看该作者
一般都是仿真,然后添加变量到**处就好了

使用特权

评论回复
5
Carina卡| | 2024-3-4 17:09 | 只看该作者
有些时候要更新变量数据才行,不然看不到数据的变化哦

使用特权

评论回复
6
Charlotte夏| | 2024-3-4 18:14 | 只看该作者
建议断点打在变量处就好了,就能看到变量的变化了

使用特权

评论回复
7
Estelle1999| | 2024-3-4 18:22 | 只看该作者
Keil还是比较方便的,可以实现仿真,而且能快速找到问题

使用特权

评论回复
8
Betty996| | 2024-3-4 19:12 | 只看该作者
变量数据还得看是不是数组或者是指针,有些时候变量还看不到

使用特权

评论回复
9
观海| | 2024-3-4 20:14 | 只看该作者
这些并不是通用的办法 仅仅适用于一些比较受限的场合

使用特权

评论回复
10
Betty1299| | 2024-3-4 20:23 | 只看该作者
可以打断点的,打到断点之后就可以看到数据变化了

使用特权

评论回复
11
八层楼| | 2024-3-4 20:46 | 只看该作者
如果程序没有暂停而是一直在运行,那么观察窗口的变量值会一直变化吗

使用特权

评论回复
12
晓伍| | 2024-3-4 21:18 | 只看该作者
打断点看到的变量值并不一定是当前的变量值了

使用特权

评论回复
13
磨砂| | 2024-3-4 21:50 | 只看该作者
有没有办法实时查看变量的值呢

使用特权

评论回复
14
木木guainv| | 2024-3-4 22:22 | 只看该作者
硬件仿真情况下可以模拟中断信号吗

使用特权

评论回复
15
alxd| | 2024-3-5 08:20 | 只看该作者
十进制好像是默认就是吧

使用特权

评论回复
16
Charlene沙| | 2024-3-5 10:02 | 只看该作者
一般窗口确实只能看全局变量的数据

使用特权

评论回复
17
Annie556| | 2024-3-5 12:10 | 只看该作者
局部变量可以用断点的方式,一步一步的查找的

使用特权

评论回复
18
ClarkLLOTP| | 2024-3-5 15:15 | 只看该作者
仿真时候就可以看

使用特权

评论回复
19
hudi008| | 2024-3-5 21:01 | 只看该作者
在调试状态下,Watch窗口会显示当前选定的变量值。你可以通过右键菜单添加或删除监视的变量。

使用特权

评论回复
20
zerorobert| | 2024-3-7 11:05 | 只看该作者
在Debug模式下,你可以使用在线汇编功能来查看汇编级别的代码和数据,这对于理解底层硬件操作非常有用。

使用特权

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

本版积分规则

380

主题

10388

帖子

6

粉丝