单片机输出重定向+可变参数宏的使用

输出重定向

说明:重定向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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
单片机中的printf重定向是一种将printf函数的输出定向到其他设备或接口的技术。通常情况下,printf函数默认将输出发送到标准输出设备(如终端窗口)。但在一些应用中,我们可能需要将printf的输出发送到其他设备,比如串口、LCD显示屏等。 实现printf重定向的方法有多种,下面介绍两种常见的方法: 1. 使用标准库函数: 在单片机的开发环境中,通常会提供标准库函数供开发者使用。通过修改标准库函数中与输出相关的部分,可以实现printf重定向。具体步骤如下: - 在标准库函数中找到与输出相关的函数(通常是_putchar或_putc等)。 - 将这些函数的实现修改为将数据发送到目标设备的函数(比如发送到串口)。 - 在main函数或初始化代码中调用相关的初始化函数,将printf重定向到目标设备。 2. 自定义printf函数: 如果在单片机的开发环境中没有提供标准库函数,或者需要更灵活地控制输出的方式,可以考虑自定义printf函数。具体步骤如下: - 自定义一个函数,命名为my_printf或其他合适的名称。 - 在该函数中解析格式化字符串,并将格式化后的数据发送到目标设备。 - 在main函数或初始化代码中调用my_printf函数来输出数据。 无论是使用标准库函数还是自定义printf函数,需要根据具体的开发环境和目标设备进行相应的配置和实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值