标题: 这个dsp运算公式的C语言代码还可以优化吗?用移位运算更快? [打印本页]

作者: 张小帅1126    时间: 2020-3-16 14:42
标题: 这个dsp运算公式的C语言代码还可以优化吗?用移位运算更快?
这行代码的目的是将CAN报文接收 把两个byte(字节数) 合并成一个 16bit 的数,之后再运算的

Obj->VehicleCan.ICAN4022_currents4 = (((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 32767)/16.3835;

合并以后 -32767/16.3835

我看见很多大佬的程序都是用移位运算的,据说运行速度快
比方说 X/8;   就写成 X>>3;

作者: SHXL_1    时间: 2020-3-16 16:01
int型数据 确实可以用移位运算表示2  4  8  之类的乘除法。但是对于其他数据如float 就不太行了。16.3835 这个常数,在编译器里,默认是double型的,后面加个f,可变为float型。速度会优化不少。
作者: vvyywy    时间: 2020-3-16 16:42
(((((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200
作者: 张小帅1126    时间: 2020-3-22 14:48
vvyywy 发表于 2020-3-16 16:42
(((((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200

感谢!您说的方法我理解了,先乘后除,这样整个过程不会出现小数(浮点类型),不过实现起来算法不对,我再研究一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1