printf打印输出得不到正确的读数
#define uchar unsigned charuchar 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
printf("key_flag is %d \n",(int)key_flag);
请添加如上部分在进行测试!
电子DIY小家 发表于 2023-3-15 14:00
printf("key_flag is %d \n",(int)key_flag);
请添加如上部分在进行测试!
可以了,但是呢(int)key_flag之后,key_flag在单片机内存是不是占用两个字节了?(int)key_flag是什么意思呢,可以解释一下吗?谢谢。
980578873 发表于 2023-3-15 14:44
可以了,但是呢(int)key_flag之后,key_flag在单片机内存是不是占用两个字节了?(int)key_flag是什 ...
强制转化为16位数。
%d打印的是16位的有符号整数,后面带的参数也必须要是这个类型的参数,这个(int)就是这个作用 也可改为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);
}
zhp 发表于 2023-3-15 17:41
也可改为printf("key_flag is %bd \n",key_flag);
可参考如下Keil有关printf的使用帮助
我找不到这个函数,这是什么原因呢?%bd 是表示什么意思呢?谢谢
980578873 发表于 2023-3-15 19:46
我找不到这个函数,这是什么原因呢?%bd 是表示什么意思呢?谢谢
%bd 表示格式化为字节型整数(char)
%d 表示格式化为整数(int)
%ld 表示格式化为长整型(long)
keil有非常丰富得hlp信息,很轻易,自己查一下就ok了 xhbwork 发表于 2023-3-16 09:40
keil有非常丰富得hlp信息,很轻易,自己查一下就ok了
hlp是什么 帮助文档, help
页:
[1]
2