加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

惊呆!MDK当计算器使用?

2020/12/22
105
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

今天鱼鹰介绍一个小知识点,那就是如何在调试时进行计算。在开发调试过程中,难免会遇到调试过程中需要临时计算的情况,有些时候可能还需要动态的得到计算结果。很多时候,我们都会打开 Windows 自带的计算器,这确实一种解决方式,但是难免显得麻烦,而对于需要多次计算的情况来说,更是如此。那么是否有更好的解决方式呢?当然有,就是使用 MDK 自带的命令行进行计算。进入调试模式后,MDK 自动会打开一个命令窗口,但估计绝大部分人都不知道这个窗口可以干什么用,今天鱼鹰就介绍一个与此有关的使用,就是计算。

比如输入以下公式(实际上,这里可以使用全局变量计算或当程序停在局部函数时计算局部变量),得到结果为 0x04。

你会发现即使使用括号,也能计算出结果,比 Windows 自带的计算器强。那么现在就看计算结果是否正确了。如果我们的小学数学过关的话,这个结果应该是 5。但结果却是 4,还是按照 16 进制显示的。仔细想想你就知道,这里的计算完全按照 C 的表达式形式进行计算的(命令行下提示 C- style),这样看来计算结果没有问题。那我们尝试使用浮点进行计算:

发现结果是我们想要的,同时计算结果使用十进制显示。这里就需要注意一点,如果说你想计算结果准确,那么使用浮点计算是一个不错的选择,否则你就要确定是否是在验证你的 C 语言表达式是否正确了。我们会想,是否可以设置结果为十进制显示呢?偶然情况下,鱼鹰发现,这个结果显示和局表变量窗口有关:

也就是说,如果局部变量显示为十进制,那么计算结果也是十进制,反之亦然(默认十六进制显示)。所以,现在我们有两种十进制显示方式:1、将局部变量窗口设置为十进制显示 2、使用浮点计算(比如 1 写成 1.0),那么结果一定是十进制。鱼鹰推荐第二种方式,比较方便,同时计算结果也不容易出错。事实上,除此之外,这个命令窗口还可以使用 sizeof,比如我想计算一下 int 的大小,可以这样:

在这里可能不能体现这个命令窗口的优势,但如果说你想计算一个复杂的结构体呢?!

还有如果我们想动态的知道两个变量的差值(或其他表达式)怎么办?正常情况下,我们会选择修改代码,将结果存放至全局变量显示。但今天鱼鹰再介绍一种更简单的显示方式,直接在 Watch 窗口计算:

但是要注意,如果这两个变量修改的很快的话,可能会突然出现一个异常值,所以只能作为一个参考,不能看到一个异常值就认为两个变量有问题。但是暂停调试情况下,计算结果是可以相信的。

相关推荐

电子产业图谱

六年开发经验,丰富的KEIL调试经验,STM32使用经验,C语言运用经验。