llyymm 发表于 2023-12-1 18:14:34

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

摘自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); 结果就又正常了,请问这是什么情况?

_奶咖君_ 发表于 2023-12-21 15:41:25

可能的一个情况,,BB这个变量在别的地方被改变了吧,,这得看看整个工程了。

但从这两种写的语法上应该没什么问题。。{:4_200:}

llyymm 发表于 2023-12-22 15:12:36

_奶咖君_ 发表于 2023-12-21 15:41
可能的一个情况,,BB这个变量在别的地方被改变了吧,,这得看看整个工程了。

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

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

_奶咖君_ 发表于 2023-12-22 15:15:02

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

问一下 你的编译的内存模式用的large模式还是small模式...

llyymm 发表于 2023-12-22 15:30:08

_奶咖君_ 发表于 2023-12-22 15:15
问一下 你的编译的内存模式用的large模式还是small模式...

XSmall

_奶咖君_ 发表于 2023-12-22 15:41:50

llyymm 发表于 2023-12-22 15:30
XSmall

XSmall 是C251的东西么? 要么就是这种模式下 编译器的限制,换成large试一试?要么就是这个变量存到了寄存器上,加一个xdata试一试?

_奶咖君_ 发表于 2023-12-22 15:50:04


这个是我keil编译时的设置

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

运行结果

llyymm 发表于 2023-12-22 15:59:26

嗯嗯,我也去试试

llyymm 发表于 2023-12-22 16:00:50

_奶咖君_ 发表于 2023-12-22 15:50
这个是我keil编译时的设置

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


我现在用的是STC32G系列的,所以使用C521

llyymm 发表于 2023-12-22 17:21:37

按照你说的改了设置,重新建了一个简单的工程,结果还是一样的,改成printf("aa=%u,bb=%u,cc=%u)没有问题。
页: [1] 2
查看完整版本: 关于printf打印unsigned char变量的疑问