找回密码
 立即注册
查看: 535|回复: 15

关于printf打印unsigned char变量的疑问

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
    发表于 2023-12-1 18:14:34 | 显示全部楼层 |阅读模式
      摘自STC串口例程里的  "输出unsigned char 类型,可以使用%bu、%bx",    请问使用printf打印无符号char类型的变量值有什么特定要求吗?我今天遇到一个奇怪的现象,调试程序时,为了方便观察变量,使用printf()输出到串口,但是数据总是和实际对不上,后来我特意测试了一下,例如设定变量 u8 AA=14,BB=15,CC=16, 如果使用printf("AA=%bu,BB=%bu,CC=%bu\r\n",AA,BB,CC);  输出的结果竟然时 AA=14,BB=0,CC=15,如果单独打印输出变量如:printf("AA=%bu",AA);printf("BB=%bu",BB);printf("CC=%bu",CC); 结果就又正常了,请问这是什么情况?

    本帖被以下淘专辑推荐:

    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:41
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2023-12-21 15:41:25 | 显示全部楼层
    可能的一个情况,,BB这个变量在别的地方被改变了吧,,这得看看整个工程了。

    但从这两种写的语法上应该没什么问题。。
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
     楼主| 发表于 2023-12-22 15:12:36 | 显示全部楼层
    _奶咖君_ 发表于 2023-12-21 15:41
    可能的一个情况,,BB这个变量在别的地方被改变了吧,,这得看看整个工程了。

    但从这两种写的语法上应该没 ...

    我检查过,没有修改变量值的代码,所以我现在都是分开打印,或者使用整型也不出现这种情况,char类型就不行,估计和printf预留的位数有关
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:41
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2023-12-22 15:15:02 | 显示全部楼层
    llyymm 发表于 2023-12-22 15:12
    我检查过,没有修改变量值的代码,所以我现在都是分开打印,或者使用整型也不出现这种情况,char类型就不 ...

    问一下 你的编译的内存模式用的large模式还是small模式...
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
     楼主| 发表于 2023-12-22 15:30:08 | 显示全部楼层
    _奶咖君_ 发表于 2023-12-22 15:15
    问一下 你的编译的内存模式用的large模式还是small模式...

    XSmall
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:41
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2023-12-22 15:41:50 | 显示全部楼层

    XSmall 是C251的东西么? 要么就是这种模式下 编译器的限制,换成large试一试?要么就是这个变量存到了寄存器上,加一个xdata试一试?
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 08:41
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2023-12-22 15:50:04 | 显示全部楼层
    截图202312221547579105.jpg
    这个是我keil编译时的设置
    截图202312221548225149.jpg
    这个是我代码写的,,printf那行直接从你那里复制过来的。
    截图202312221549529725.jpg
    运行结果
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
     楼主| 发表于 2023-12-22 15:59:26 | 显示全部楼层
    嗯嗯,我也去试试

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
     楼主| 发表于 2023-12-22 16:00:50 | 显示全部楼层
    _奶咖君_ 发表于 2023-12-22 15:50
    这个是我keil编译时的设置

    这个是我代码写的,,printf那行直接从你那里复制过来的。

    我现在用的是STC32G系列的,所以使用C521
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 46 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1157

    积分

    金牌会员

    积分
    1157
     楼主| 发表于 2023-12-22 17:21:37 | 显示全部楼层
    按照你说的改了设置,重新建了一个简单的工程,结果还是一样的,改成printf("aa=%u,bb=%u,cc=%u)没有问题。
    简单代码.png
    print结果.png

    点评

    我想到一种可能, 251 是 16位机, 基本单位是 int, 默认都是 自动扩展到 int , 数据前面加强制转换, 应该可行 ! u8 AA=14,BB=15,CC=16 printf("AA=%bu,BB=%bu,CC=%bu\r\n",(u8)AA,(u8)BB,(u8)CC);  详情 回复 发表于 2023-12-22 21:22
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-1 14:00 , Processed in 0.074241 second(s), 73 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表