51单片机问题汇总

                           
2020年04月30日

回答同学问题时的感想

关于毕业设计的一些感想

今天又遇到了一个奇葩问题,现在记录一下。

1、运算问题

unsigned long time1 = 0;

motor1speed = 1;

time1 = 60*1000*1000/8/motor1speed;

这行代码在 Keil 4 仿真时出现了计算错误的问题,得出计算值为 time1 = 0xFFFFF0E0(4294963424),实际应该为 7500000,看着就很奇怪。

经测试:在 VB 中计算正确,在 Keil 5 中计算正确,在 Keil 4 中计算错误。

经过一番思索之后我对公式下手了,改成了下面这个样子,计算结果正确。

time1 = 60*1000000/8/motor1speed;

针对这一问题,我请教了金沙滩工作室的宋老师,了解了问题出现的原因。

【产生原因】

可能默认按照 unsigned int 类型计算的,如果按照int型计算的话,这个计算结果已经超出了int的范围,所以中间值会算错,导致结果错误。如果需要正常计算的话,需要对数字的变量类型进行强制类型转换。

金沙滩工作室-宋老师

冷场莹