找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1326|回复: 3
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
这行代码的目的是将CAN报文接收 把两个byte(字节数) 合并成一个 16bit 的数,之后再运算的

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

合并以后 -32767/16.3835

我看见很多大佬的程序都是用移位运算的,据说运行速度快
比方说 X/8;   就写成 X>>3;
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:709207 发表于 2020-3-16 16:01 | 只看该作者
int型数据 确实可以用移位运算表示2  4  8  之类的乘除法。但是对于其他数据如float 就不太行了。16.3835 这个常数,在编译器里,默认是double型的,后面加个f,可变为float型。速度会优化不少。
回复

使用道具 举报

板凳
ID:250696 发表于 2020-3-16 16:42 | 只看该作者
(((((Currents4_H  | VehicleCanRecData.CanBytes.Byte2))- 32767)*200)>>15)/200
回复

使用道具 举报

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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