【发布时间】:2020-06-19 15:59:42
【问题描述】:
我想使用 PIC18F14K50 的 ADC 外设计算电压。结果范围在 0-1023(10 位)之间。所以我用了这个简单的计算:
uint16_t voltage = ADC_Result * 5000 / 1023;
但是,结果不正确。我猜发生了算术溢出。我尝试了许多括号的组合,改变元素的顺序等。
使用下面的代码,当ADC_Result 为 1023 时,最好的结果是 4088;距离 5000 还差得很远。
uint16_t voltage = ADC_Result * (5000 / 1023);
我应该怎么做才能在上述计算中获得更好的结果?请不要建议浮点,因为它们会在 MCU 中造成灾难!他们使用大量资源却没有任何实际好处。
【问题讨论】:
-
有两种方法可以解决这个问题。正如已经建议的那样,使用更宽的整数,或者,如果您可以承受一些精度和分辨率的损失,请先将输入值除以 10 或 100 来缩小输入值。如果我有更多的答案,我会在答案中举个例子时间,但是您可能可以自己计算并计算出细节,或者有人会发现这一点并为我们写下来。
标签: c pic xc8 arithmetic-overflow