找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 2333|回复: 2

[Qualcomm(CSR)] 一个简单相加产生的诡异问题

[复制链接]

暂无签到数据

发表于 2017-12-14 15:18:21 | 显示全部楼层 |阅读模式

马上注册,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册  

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

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

    }
    senddata[length+1] = calchecksum>>8;       //高8位計算出來的是錯誤的
    senddata[length+2] = calchecksum & 0xff;

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








楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!

暂无签到数据

 楼主| 发表于 2017-12-15 08:17:17 | 显示全部楼层
哦? 大家没遇到过类似的问题?
太奇怪了,只是简单的 unsigned short  += unsigned char, 结果计算出来的unsigned short 是错误的结果.
原本 0xA1+0xA2+0xA3+0xA4 =0x028A的,但是得到值却是错误的 0xBD8A
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-26 08:03 , Processed in 0.341506 second(s), 21 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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