首页|资源下载
登录|注册

您现在的位置是:首页 > 技术阅读 >  惊呆!MDK当计算器使用?

惊呆!MDK当计算器使用?

时间:2022-09-29

来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID   :emOsprey

今天鱼鹰介绍一个小知识点,那就是如何在调试时进行计算。
在开发调试过程中,难免会遇到调试过程中需要临时计算的情况,有些时候可能还需要动态的得到计算结果。
很多时候,我们都会打开 Windows 自带的计算器,这确实一种解决方式,但是难免显得麻烦,而对于需要多次计算的情况来说,更是如此。
那么是否有更好的解决方式呢?
当然有,就是使用 MDK 自带的命令行进行计算。
进入调试模式后,MDK 自动会打开一个命令窗口,但估计绝大部分人都不知道这个窗口可以干什么用,今天鱼鹰就介绍一个与此有关的使用,就是计算。
比如输入以下公式(实际上,这里可以使用全局变量计算或当程序停在局部函数时计算局部变量),得到结果为 0x04。
你会发现即使使用括号,也能计算出结果,比Windows自带的计算器强。
那么现在就看计算结果是否正确了。
如果我们的小学数学过关的话,这个结果应该是 5。
但结果却是 4,还是按照 16 进制显示的。
仔细想想你就知道,这里的计算完全按照 C 的表达式形式进行计算的(命令行下提示 C- style),这样看来计算结果没有问题。
那我们尝试使用浮点进行计算:
发现结果是我们想要的,同时计算结果使用十进制显示。
这里就需要注意一点,如果说你想计算结果准确,那么使用浮点计算是一个不错的选择,否则你就要确定是否是在验证你的 C 语言表达式是否正确了。
我们会想,是否可以设置结果为十进制显示呢?
偶然情况下,鱼鹰发现,这个结果显示和局表变量窗口有关:
也就是说,如果局部变量显示为十进制,那么计算结果也是十进制,反之亦然(默认十六进制显示)。
所以,现在我们有两种十进制显示方式:
1、将局部变量窗口设置为十进制显示
2、使用浮点计算(比如 1 写成 1.0),那么结果一定是十进制。
鱼鹰推荐第二种方式,比较方便,同时计算结果也不容易出错。
事实上,除此之外,这个命令窗口还可以使用 sizeof,比如我想计算一下 int 的大小,可以这样:
在这里可能不能体现这个命令窗口的优势,但如果说你想计算一个复杂的结构体呢?!

还有如果我们想动态的知道两个变量的差值(或其他表达式)怎么办?
正常情况下,我们会选择修改代码,将结果存放至全局变量显示。
但今天鱼鹰再介绍一种更简单的显示方式,直接在 Watch 窗口计算:
但是要注意,如果这两个变量修改的很快的话,可能会突然出现一个异常值,所以只能作为一个参考,不能看到一个异常值就认为两个变量有问题。
但是暂停调试情况下,计算结果是可以相信的。

以上就是鱼鹰要分享的 MDK 知识,如果想了解更多,可去官网学习。

与之相关的也可看鱼鹰早期写的一篇笔记:
KEIL调试为啥不创建一个自定义按键?



推荐阅读:
嵌入式系统优先级详解
KEIL 调试经验总结
线程CPU使用率到底该如何计算?
许久以后,你会感谢自己写的异常处理代码
终极串口接收方式,极致效率
延时功能进化论(合集)
如何写一个健壮且高效的串口接收程序?
打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知

-THE END-


如果对你有帮助,记得转发分享哦

微信公众号「鱼鹰谈单片机
每周一更单片机知识
长按后前往图中包含的公众号关注