while (!(U0LSR & 0x01));
return (U0RBR);
}
这样,只要在需要用printf的文件里#include <stdio.h>就可以了,printf会通过Retarget中的fputc函数调用sendchar来实现串口数据的输出。
事实上,和第一种的方式是一样的。
3、自定义printf函数,以AVR为例
前面介绍的是在KEIL编译器上使用printf函数,但不是所有的编译器平台都能适用,因此有时候我们需要自定义printf函数,下面以AVR在GCC下为例

在usart.c中添加如下代码
View Code
#include <stdio.h>
#include <stdarg.h>
/*********************************************************/
//向串口usart0发送一个字节函数
void Uart0_putchar( unsigned char sdbyte)
{
UDR0=sdbyte;
while(!(UCSR0A&0x40));
UCSR0A|=0x40;
}
////////////////////////////////////////////////////////
void Uart0_printf(char *str,...)
{
char buf[128];
unsigned char i = 0;
va_list ptr;
va_start(ptr,str);
vsprintf(buf,str,ptr);
while(buf[i])
{
Uart0_putchar(buf[i]);
i++;
}
}
结语:
有了printf格式化输出函数,调试起来就方便多了。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-65910-2.html
独一无二的小王子
多学一些知识
如果小米公司不申冤
你说的这点地球人都知道