找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

这个dsp运算公式的C语言代码还可以优化吗?用移位运算更快?

查看数: 1941 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-3-16 14:42

正文摘要:

这行代码的目的是将CAN报文接收 把两个byte(字节数) 合并成一个 16bit 的数,之后再运算的 Obj->VehicleCan.ICAN4022_currents4 = (((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 327 ...

回复

ID:143694 发表于 2020-3-22 14:48
vvyywy 发表于 2020-3-16 16:42
(((((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200

感谢!您说的方法我理解了,先乘后除,这样整个过程不会出现小数(浮点类型),不过实现起来算法不对,我再研究一下
ID:250696 发表于 2020-3-16 16:42
(((((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200
ID:709207 发表于 2020-3-16 16:01
int型数据 确实可以用移位运算表示2  4  8  之类的乘除法。但是对于其他数据如float 就不太行了。16.3835 这个常数,在编译器里,默认是double型的,后面加个f,可变为float型。速度会优化不少。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表