【发布时间】:2015-08-02 23:49:57
【问题描述】:
我的代码在下面,我想问一下解决小数点后 4 位的数字(除法、乘法、对数、指数)的最佳方法是什么?我使用 PIC16F1789 作为我的设备。
float sensorValue;
float sensorAverage;
void main(){
//Get an average data by testing 100 times
for(int x = 0; x < 100; x++){
// Get the total sum of all 100 data
sensorValue = (sensorValue + ADC_GetConversion(SENSOR));
}
// Get the average
sensorAverage = sensorValue/100.0;
}
【问题讨论】:
-
没有浮点硬件的小型嵌入式系统的编译器通常具有处理浮点运算的特殊功能,因此您仍然可以使用正常的算术运算符。虽然性能可能不是很好。我建议您搜索并阅读有关 定点算术 的信息,这在较小的系统上更常见,尤其是在您只需要少量固定小数的情况下。它需要更多代码,但通常比浮点算法更有效。
-
感谢您的帮助 Joachim Pileborg。我会读一些关于定点算法的资料。
-
定点的基本是“Q格式”。您可以执行
int sensorAverageQ14 = sensorValue*16384/100;,这与您的浮点值相同,但要大 2^14 倍。每次使用时都需要牢记这个 Q=14 值。 -
还要注意微控制器通常没有硬件乘法器,也没有除法指令。乘法和除法通常在 50 多个时钟周期范围内,加上函数调用开销,因为它们都是运行时库函数。如果您接近实时截止日期,最好现在考虑使用 DSP。
-
在上面的例子中,四位小数是不必要的,因为它是一百个整数的和,精度只有两位小数。
标签: c embedded microcontroller pic floating