之前在论坛也发过一片求助贴,也感谢网友的指导,指明了方向。
现在一直用stm8做项目,之前有关赋值问题,在实行赋值时,总是丢失16位,时而可以,时而不行,很奇怪。帖子如下:
https://bbs.eeworld.com.cn/thread-511666-1-1.html,把一个4位数组赋值给一个长整形数,只能赋值到16位,16~31都是ffff,第一是很奇怪。后面经过排查,是类型长度出现了问题,还有就是编译器强制类型转换有问题,通过移位产生不了想要的结果。后面的解决方法,就是将32位长整型数据拆分为4个数组进行赋值就可以了。代码如下
- void BK_TX_ID_CODE(u32 IDcode)[/size]
- {
- u8 ID_Buf[4];
-
- ID_Buf[0] = IDcode>>24;
- ID_Buf[1] = IDcode>>16;
- ID_Buf[2] = IDcode>>8;
- ID_Buf[3] = IDcode;
- BEKEN_I2c_Write(0x22,ID_Buf,4);
- }
解决了赋值的问题。