当我们在调试代码时,通常需要将程序中的某个变量打印至PC机上,来判断我们的程序是否按预期的运行,printf函数很好的做到了这一点,它能直接以字符的方式输出变量名和变量的值,这样使输出的信息很直观;但printf函数在使用时,不仅仅要初始化串口,还需要其它的一些设置或者要调用其它的一些函数,否则printf函数将不能按我们想要的方式执行。
由于不同的编译器stdio函数不一样,所以使用的方法也不一样。
下面以ADS博创实验为例说明
首先printf函数会调用底层函数fgetc
我们必须重写fgetc
int fputc(int ch, FILE *f)
{
if(f ==&__stdout) //for console out pute.g. printf
CONSOLE_PUTC(ch);
return ch;
}
然后对CONSOLE_PUTC解析,如下
#define CONSOLE_PUTC(ch) Uart_SendChar(CONSOLE,(ch))
#define CONSOLE 0
#define Uart_SendChar(nUart,ch) do{if((ch)=='\n') Uart_SendByte((nUart),'\r'); \
Uart_SendByte((nUart),(ch)); }while(0)
格式化部分还是使用了printf函数本身的内容。
这样可以把串口的函数做成库,整体黑盒使用。