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

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

    评论

报告相同问题?

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题