printf()重定义STC串口打印问题

 

这两天调试一个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");	

输出如下:

显示就正常了  这个问题也是很厉害了

后面还遇到一个串口中断和定时器中断一起用的情况,应为定时器中断的中断优先级设置的比串口中断高,且定时器中断的时间设置的太短了,导致了没法正常打印。

解决方法:延长定时器中断产生中断的时间间隔,或者把串口中断的优先级设置的比定时器中断的高

 

希望对大家有帮助

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值