一个简单相加产生的诡异问题
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类型。
请问各位大佬是否有用到类似的问题,如何解决的?
哦? 大家没遇到过类似的问题?
太奇怪了,只是简单的 unsigned short+= unsigned char, 结果计算出来的unsigned short 是错误的结果.
原本 0xA1+0xA2+0xA3+0xA4 =0x028A的,但是得到值却是错误的 0xBD8A
页:
[1]