软件平台:Keil4.7.4
在VC平台下编程时包含stdio.h函数再调用printf函数即可将想要打印的内容输出到控制台上(stdout),但在Keil开发环境下并没有控制台,所以想要调用printf函数需要将printf函数的输出重新定向到UART上,在UART上使用串口调试助手接收打印信息。
Keil中是通过fpuc()和fgetc()两个函数来建立printf函数和硬件平台之间的链接的,所以我们只需要填充这两个函数就可以实现基本的printf和scanf函数功能。
Retartget.c
#include <stdio.h> #include <time.h> #include <rt_misc.h> #pragma import(__use_no_semihosting_swi) //?????tê??aá?ê1ó?printf???toíscanf???t extern int sendchar(int ch); /* in Serial.c */ extern int getkey(void); /* in Serial.c */ extern long timeval; /* in Time.c */ struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int ch, FILE *f) { return (sendchar(ch)); } int fgetc(FILE *f) { return (sendchar(getkey())); } int ferror(FILE *f) { /* Your implementation of ferror */ return EOF; } void _ttywrch(int ch) { sendchar (ch); } void _sys_exit(int return_code) { while (1); /* endless loop */ }
同时将串口的输出连接到这两个函数,这里使用UART0
int sendchar(int ch) { UART0_SendByte(ch); return(ch); } int getkey(void) { return (int)UART0_GetChar(); }
至此printf函数和scanf函数基本功能可以使用,在实际调试过程中将UART0通过串口线与电脑的串口调试助手连接即可看见打印信息。