printf函数是极为方便的信息输出函数,能将程序中的各种变量的值快速格式化并输出到控制台,在程序调试和测试中无处不在,C语言教材,例子程序中十有**要用到它.
Keil C51的printf使用也极为方便,只要初始化串口后,就能使用printf直接将信号输出到串口,但在初始化时必段加上如下内容
TI=1;
在没有使用串口中断的情况下不要紧,但在串口必段以中断方式工作的情况下,因为TI=1导致频繁进入中断,主程序无法全速运行.
俺发现printf是调用putchar()底层函数来实现的,而putchar()函数是采用先查忙再发送的机制.伪码如下:
while(!TI);
TI=0
SBUF = ucSendChar;
Retrun;
俺现在的折中办法是,如果单片机的发送中断和接收中断可分开使能,则可以只开接收中断,发送不中断,比如LPC932分开了.如果发送与接收中断使能分不开的芯片,比如AT89S52,就只能使用自己的putchar()用如下写法
SBUF = ucSendChar;
while(!TI);
TI=0;
Return
再在Putchar基础上构造简单的调试函数,反正感觉不如Printf方便,有时也用Sprintf来变换后再输出到串口,但sprint占内存,也不好.
想听听大家调试时是否有好办法. |