wanyue103 发表于 2017-12-14 15:18:21

一个简单相加产生的诡异问题

Hi,各位大佬:      我在用CSR1010 SDK 2.6.3.12做开发,要做MCU发数据给BLE,一个BLE通过uart再回复的流程。BLE在回复的时候会添加校验和,过程如下:
                              长度数据         校验和
            MCU 发送: 0x02 0102         0003
            BLE 回复:    0x04 A1A2A3A4028A

            其中BLE端校验和计算函数如下:
         int calchecksumvalue(uint8 *senddata,uint8 length)
{
    uint16 calchecksum = 0;
    uint i = 0;
    for(; i < length; i++)
    {
      calchecksum += senddata;

    }
    senddata = calchecksum>>8;       //高8位計算出來的是錯誤的
    senddata = calchecksum & 0xff;

    return 1;
}
   问题是上面的计算得到校验和高8位是错误的, BLE 回复:    0x04 A1A2A3A4BD8A.
   校验和计算程序很简单,通过电脑模拟去计算能得到正确的值。但在CSR1010上计算得到的就是错的高8位。
   从现象上看,校验和超过8bit 就会错误,即使calchecksum 使用uint16类型。
   请问各位大佬是否有用到类似的问题,如何解决的?








wanyue103 发表于 2017-12-15 08:17:17

哦? 大家没遇到过类似的问题?
太奇怪了,只是简单的 unsigned short+= unsigned char, 结果计算出来的unsigned short 是错误的结果.
原本 0xA1+0xA2+0xA3+0xA4 =0x028A的,但是得到值却是错误的 0xBD8A
页: [1]
查看完整版本: 一个简单相加产生的诡异问题