打印

一个关于CAN通讯的C语言问题

[复制链接]
1112|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haunghua|  楼主 | 2019-5-17 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

看公司的大神们写的代码很是想不通,为什么不直接Data7D_03[1] = pData[3],Data7D_03[2] =  pData[2]。
看他的代码,经过一轮换算后还是这个意思啊???本来把两个8字节的数据合成16位的,合成后又再分开????为什么这样做????想不通
大神的代码如下:

void xxxxxxxx(u8* pData)
{       
       u16 RpmData = 0; //速度
        Speed = pData[2];
        Speed <<= 8;
        Speed |= pData[3] ;            //Speed 是u8类型的全局
        Speed /= 100;

        Data7D_03[1] = Speed*100;              //低8位
        Data7D_03[2] = (Speed*100)>>8;     //高8位
}

使用特权

评论回复

相关帖子

沙发
叶春勇| | 2019-5-17 17:02 | 只看该作者
通讯都这样,一个字节一个字节的传输的。单片机里面的16位,32位的整数和浮点数,都得拆。

使用特权

评论回复
板凳
haunghua|  楼主 | 2019-5-17 18:45 | 只看该作者
叶春勇 发表于 2019-5-17 17:02
通讯都这样,一个字节一个字节的传输的。单片机里面的16位,32位的整数和浮点数,都得拆。 ...

不是,可是形参进来的也是8位的啊,他先用两个8位的形参合成一个16位的,然后再拆成两个8位的,有啥区别么?

使用特权

评论回复
地板
叶春勇| | 2019-5-17 19:16 | 只看该作者
这个是要做运算,如果用8位很容易溢出。

使用特权

评论回复
5
dirtwillfly| | 2019-5-17 22:35 | 只看该作者
可能中间有过其他操作,后来改来改去就剩这些了

使用特权

评论回复
6
dirtwillfly| | 2019-5-17 22:37 | 只看该作者
也有可能你们公司曾经按代码行数算奖金。或者觉得代码运行太快了

使用特权

评论回复
7
R2D2| | 2019-5-19 14:22 | 只看该作者
Speed 是u8类型的全局???

使用特权

评论回复
8
huangxz| | 2019-5-20 16:20 | 只看该作者
这段程序是可以优化一些的,大神有时候也不是很完美的,不要那么纠结。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

73

帖子

0

粉丝