新闻  |   论坛  |   博客  |   在线研讨会
惊呆!MDK当计算器使用?
鱼鹰谈单片机 | 2020-12-24 13:34:21    阅读:696   发布文章

今天鱼鹰介绍一个小知识点,那就是如何在调试时进行计算。

在开发调试过程中,难免会遇到调试过程中需要临时计算的情况,有些时候可能还需要动态的得到计算结果。

很多时候,我们都会打开 Windows 自带的计算器,这确实一种解决方式,但是难免显得麻烦,而对于需要多次计算的情况来说,更是如此。

那么是否有更好的解决方式呢?

当然有,就是使用 MDK 自带的命令行进行计算。

进入调试模式后,MDK 自动会打开一个命令窗口,但估计绝大部分人都不知道这个窗口可以干什么用,今天鱼鹰就介绍一个与此有关的使用,就是计算。

6.png

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

5.png

你会发现即使使用括号,也能计算出结果,比Windows自带的计算器强。

那么现在就看计算结果是否正确了。

如果我们的小学数学过关的话,这个结果应该是 5。

但结果却是 4,还是按照 16 进制显示的。

仔细想想你就知道,这里的计算完全按照 C 的表达式形式进行计算的(命令行下提示 C- style),这样看来计算结果没有问题。

那我们尝试使用浮点进行计算:

4.png

发现结果是我们想要的,同时计算结果使用十进制显示。

这里就需要注意一点,如果说你想计算结果准确,那么使用浮点计算是一个不错的选择,否则你就要确定是否是在验证你的 C 语言表达式是否正确了。

我们会想,是否可以设置结果为十进制显示呢?

偶然情况下,鱼鹰发现,这个结果显示和局表变量窗口有关:

3.png

也就是说,如果局部变量显示为十进制,那么计算结果也是十进制,反之亦然(默认十六进制显示)。

所以,现在我们有两种十进制显示方式:

1、将局部变量窗口设置为十进制显示

2、使用浮点计算(比如 1 写成 1.0),那么结果一定是十进制。

鱼鹰推荐第二种方式,比较方便,同时计算结果也不容易出错。

事实上,除此之外,这个命令窗口还可以使用 sizeof,比如我想计算一下 int 的大小,可以这样:

2.png

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

还有如果我们想动态的知道两个变量的差值(或其他表达式)怎么办?

正常情况下,我们会选择修改代码,将结果存放至全局变量显示。

但今天鱼鹰再介绍一种更简单的显示方式,直接在 Watch 窗口计算:

1.png

但是要注意,如果这两个变量修改的很快的话,可能会突然出现一个异常值,所以只能作为一个参考,不能看到一个异常值就认为两个变量有问题。

但是暂停调试情况下,计算结果是可以相信的。

以上就是鱼鹰要分享的 MDK 知识。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客