这两天调试一个STC的项目,由于没法Debug所以想要用printf()重定义STC串口打印出来调试,但是出现了一些问题
问题如下:
st = GetKeynum(); //输出代码
printf("GetKeynum() = %02X", st);
printf("\r\n");
接下来看到串口打印的数据是这样的
可以看到我输出的是两位16进制的数,按照道理应该是输出FF,这里变成了FF00,后面自己上完查证和请教同事发现C51在用printf输出时要在输出前面增加前缀
u8--bd,u16--hd,u32--ld
使用C51的printf()函数打印%d/i/u/o/x/X格式时,你必须要指定该变量的存储格式l/L/b/B
st = GetKeynum(); //输出代码
printf("GetKeynum() = %02bX", st);
printf("\r\n");
输出如下:
显示就正常了 这个问题也是很厉害了
后面还遇到一个串口中断和定时器中断一起用的情况,应为定时器中断的中断优先级设置的比串口中断高,且定时器中断的时间设置的太短了,导致了没法正常打印。
解决方法:延长定时器中断产生中断的时间间隔,或者把串口中断的优先级设置的比定时器中断的高
希望对大家有帮助