输出重定向
说明:重定向fputc的输出方向,之后使用printf就可以直接打印信息到串口
#include "stdio.h"
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (uint8_t) ch;
return ch;
}
#endif
可变参数宏的使用
如果想要输出后换行,那么每次使用fprintf都得加/r/n,非常繁琐
为此,使用可变参数宏批量规范输出格式,就可以自动换行、在输出项前面添加注释。可以通过定义USER_DEBUG的方式决定是否使用这种输出格式,在上场比赛前把debug注释掉就可以立刻消除所有printf。
#define USER_DEBUG
#ifdef USER_DEBUG
#define user_printf(format, ...) printf( format "\r\n", ##__VA_ARGS__)
#define user_info(format, ...) printf("[\tmain]info:" format "\r\n", ##__VA_ARGS__)
#define user_debug(format, ...) printf("[\tmain]debug:" format "\r\n", ##__VA_ARGS__)
#define user_error(format, ...) printf("[\tmain]error:" format "\r\n",##__VA_ARGS__)
#else
#define user_printf(format, ...)
#define user_info(format, ...)
#define user_debug(format, ...)
#define user_error(format, ...)
#endif