panyan120 2021-04-16 11:56 采纳率: 0%
浏览 21

IAR中打印uint16, 输出数据是32位的

使用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

这是为啥?有没有大神来解析一下啊啊啊啊。。。

  • 写回答

1条回答 默认 最新

  • panyan120 2021-07-20 17:27
    关注

    确认为一个BUG,全局变量定义是u16,而声明时写成u32

    评论

报告相同问题?