980578873 发表于 2023-3-15 13:53:23

printf打印输出得不到正确的读数

#define uchar unsigned char

uchar key_flag=0;

void int3() interrupt 11//按键按下,下降沿触发中断
{
        key_flag=1;

}

打印程序:
TI=1;
printf("key_flag is %d \n",key_flag);
while(TI==0);
TI=0;          
为什么key_flag的打印结果不是1
                  

电子DIY小家 发表于 2023-3-15 14:00:46

printf("key_flag is %d \n",(int)key_flag);

请添加如上部分在进行测试!

980578873 发表于 2023-3-15 14:44:04

电子DIY小家 发表于 2023-3-15 14:00
printf("key_flag is %d \n",(int)key_flag);

请添加如上部分在进行测试!



可以了,但是呢(int)key_flag之后,key_flag在单片机内存是不是占用两个字节了?(int)key_flag是什么意思呢,可以解释一下吗?谢谢。

电子DIY小家 发表于 2023-3-15 14:51:26

980578873 发表于 2023-3-15 14:44
可以了,但是呢(int)key_flag之后,key_flag在单片机内存是不是占用两个字节了?(int)key_flag是什 ...

强制转化为16位数。
%d打印的是16位的有符号整数,后面带的参数也必须要是这个类型的参数,这个(int)就是这个作用

zhp 发表于 2023-3-15 17:41:37

也可改为printf("key_flag is %bd \n",key_flag);

可参考如下Keil有关printf的使用帮助
#include <stdio.h>

void tst_printf (void) {
char a = 1;
int b= 12365;
long c = 0x7FFFFFFF;

unsigned char x = 'A';
unsigned int y= 54321;
unsigned long z = 0x4A6F6E00;

float f = 10.0;
float g = 22.95;

char buf [] = "Test String";
char *p = buf;

printf ("char %bd int %d long %ld\n",a,b,c);
printf ("Uchar %bu Uint %u Ulong %lu\n",x,y,z);
printf ("xchar %bx xint %x xlong %lx\n",x,y,z);
printf ("String %s is at address %p\n",buf,p);
printf ("%f != %g\n", f, g);
printf ("%*f != %*g\n", (int)8, f, (int)8, g);
}


980578873 发表于 2023-3-15 19:46:08

zhp 发表于 2023-3-15 17:41
也可改为printf("key_flag is %bd \n",key_flag);

可参考如下Keil有关printf的使用帮助


我找不到这个函数,这是什么原因呢?%bd 是表示什么意思呢?谢谢

zhp 发表于 2023-3-16 08:58:12

980578873 发表于 2023-3-15 19:46
我找不到这个函数,这是什么原因呢?%bd 是表示什么意思呢?谢谢

%bd 表示格式化为字节型整数(char)
%d 表示格式化为整数(int)
%ld 表示格式化为长整型(long)

xhbwork 发表于 2023-3-16 09:40:08

keil有非常丰富得hlp信息,很轻易,自己查一下就ok了

980578873 发表于 2023-3-16 19:14:45

xhbwork 发表于 2023-3-16 09:40
keil有非常丰富得hlp信息,很轻易,自己查一下就ok了

hlp是什么

LAOXU 发表于 2023-3-17 06:57:39

帮助文档, help
页: [1] 2
查看完整版本: printf打印输出得不到正确的读数