youzaixiaoya
发表于 6 天前
ercircle 发表于 2025-8-18 17:55
将 ADC_ReadData、Data、IIC_ReceiveByte全改为无符号unsigned也正常了,应该是进位操作和有符号数引发的 ...
谢谢大佬,真的太感谢了,成功了
youzaixiaoya
发表于 6 天前
ercircle 发表于 2025-8-18 17:55
将 ADC_ReadData、Data、IIC_ReceiveByte全改为无符号unsigned也正常了,应该是进位操作和有符号数引发的 ...
太感谢您了,这个事情困扰了我太久了
youzaixiaoya
发表于 6 天前
ercircle 发表于 2025-8-18 17:55
将 ADC_ReadData、Data、IIC_ReceiveByte全改为无符号unsigned也正常了,应该是进位操作和有符号数引发的 ...
如果可以的话可以麻烦大佬给我讲解一下吗?我属于是半道出家,这个涉及底层一些的问题真的就是在知识范围外了,这几天实在是非常感谢您和其他几位大佬相助,太高兴了
ercircle
发表于 6 天前
youzaixiaoya 发表于 2025-8-18 18:09
如果可以的话可以麻烦大佬给我讲解一下吗?我属于是半道出家,这个涉及底层一些的问题真的就是在知识范围 ...
客气了,我也是现学现卖的,这种字节拼接操作一般用无符号数操作碰不到这种问题,也是下午调试才反应过来:
通过汇编代码看,|=操作时,将char类型提升为四字节类型|=的,也就是说当符号位为1时,前三个字节全是0xFF,所以当第三个字节为有符号值时,重刷了前两个字节
这也是为什么我第一次测试首字节为00,你的首字节为0xFF,因为0x14无符号位。
youzaixiaoya
发表于 6 天前
ercircle 发表于 2025-8-18 18:46
客气了,我也是现学现卖的,这种字节拼接操作一般用无符号数操作碰不到这种问题,也是下午调试才反应过来 ...
有点明白了大佬,就是每次拼接的时候,如果字节是带有符号的或者说变量是有符号的变量,那就会触发将前面的字节刷新为FF的操作,所以我每次得到的数据才会将高位覆盖为FF,但是低位却不会被覆盖
youzaixiaoya
发表于 6 天前
ercircle 发表于 2025-8-18 18:46
客气了,我也是现学现卖的,这种字节拼接操作一般用无符号数操作碰不到这种问题,也是下午调试才反应过来 ...
太谢谢您了{:ciya:}
ercircle
发表于 6 天前
youzaixiaoya 发表于 2025-8-18 19:16
太谢谢您了
不客气,能用无符号的地方尽量优先用无符号数,有符号就要考虑进位。