使用IAR环境。
串口打印函数是自己编写的可变参函数,发现打印uint16时,数据打印出0x1111FFFF,多出的1111是内存中后面两个byte数据。 然而打印uint8_t就不会错。
查资料发现C99标准里定义如下:
typedef unsigned int uint16_t;----------这样32位系统里uint16_t不是4bytes了吗,我以为我找到了答案。。。
结果我把项目里的宏定义修改如下:
typedef uint16_t uint16; ===》typedef unsigned short uint16;
仍不行!!!
直接在调用时强行转换类型:
DEBUG_PRINT("SOE DATA %x, %x,%x,%d, %d\r\n",gu16_Data, sizeof(uint16),sizeof(unsigned int));
输出为: 0x1111FFFF, 2,4
DEBUG_PRINT("SOE DATA %x, %x,%x,%d, %d\r\n",(unsigned short)gu16_Data,sizeof(uint16),sizeof(unsigned int));
输出为: 0xFFFF, 2,4
这是为啥?有没有大神来解析一下啊啊啊啊。。。