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

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

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

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

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

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

但是要注意,如果这两个变量修改的很快的话,可能会突然出现一个异常值,所以只能作为一个参考,不能看到一个异常值就认为两个变量有问题。
但是暂停调试情况下,计算结果是可以相信的。
以上就是鱼鹰要分享的 MDK 知识。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
据报道,中芯公司将上调10%的价格,存储产品领跑
无贵金属镀层的智能集成电路基板
步入ARM开发的殿堂(初学者入门篇)
555冰箱断电保护器电路图
嵌入式操作系统uCLinux[转载]
48伏系统:传统与轻度混合动力车的最佳选择
555大型滚筒式洗衣机电控器电路图
电路原理图绘制软件
德州仪器OMAP DSP资料
日本开发10纳米印记技术,有望解决极紫外(EUV)瓶颈问题
德州仪器公司(TI)最新 DSP 选型指南(英文)
浅谈I2C总线
据报道,苹果将60–70%的iPhone 17 LPDDR5X从三星采购,关注iPhone 18的量产
三菱FX系列PLC教程 7 —— FX系列的扩展单元
关于ARM处理器Remap的理解(zz)
三菱FX系列PLC教程 10 —— FX系列的工作原理及编程器件(二)
剖析uCOS
三星、韩国海力士据报道计划2026年作为NVIDIA H200进行20%的HBM3E涨价,ASIC需求上升
555小巧的电冰箱保护插座电路图
Cadence在台积电N3P上以64Gbps的速率对UCIe IP进行录送
电机计数电路图
三菱FX系列PLC教程 9 —— FX系列的工作原理及编程器件(一)
RZ/A3M:功能强大的 1GHz MPU,内置 DDR3L SDRAM,用于高清 HMI
电热恒温箱的单片机控制系统
三菱FX系列PLC教程 8 —— FX系列的软件系统和编程语言
555简易洗衣机定时器电路图
Innoviz推出InnovizThree LiDAR系统,采用更低成本、更纤薄的设计
555冰箱内照明灯状态检测电路图
三菱FX系列PLC教程 6 —— FX系列的概述
吉利插电式混合动力车创下真实油耗纪录