Serial port 如何创建名称稍有不同的printf

Serial port 如何创建名称稍有不同的printf,serial-port,printf,avr,stdio,usart,Serial Port,Printf,Avr,Stdio,Usart,我使用的是ATmega128,我需要两个串行端口进行通信。我一直在使用“stdio.h”头文件中的printf通过USART 0发送数据。我还需要通过USART 1将数据发送到lcd,我对使用格式化输入功能很好奇。我一直认为将相同的printf函数连接到USART 1和USART 0会使编译器感到困惑,所以我没有尝试过 有人能建议如何制作另一个printf,比如说“Lprintf”,通过USART 1发送数据吗?根据您链接数据的方式,有两种方法可能更简单: 使用将格式化文本写入字符串,然后使用自

我使用的是ATmega128,我需要两个串行端口进行通信。我一直在使用“stdio.h”头文件中的printf通过USART 0发送数据。我还需要通过USART 1将数据发送到lcd,我对使用格式化输入功能很好奇。我一直认为将相同的printf函数连接到USART 1和USART 0会使编译器感到困惑,所以我没有尝试过


有人能建议如何制作另一个printf,比如说“Lprintf”,通过USART 1发送数据吗?

根据您链接数据的方式,有两种方法可能更简单:

  • 使用将格式化文本写入字符串,然后使用自己的
    putchar()
    putstring()
    将其发送到所需的USART

  • 如果使用struct将usart链接到stdio函数(可能),则可以使用将结果定向到特定流


  • 这里要做的是使用
    fprintf()
    。有关函数,请参阅avr libc上的文档。基本上,您希望UART1有一个
    fputc()
    函数,UART0有一个函数。然后,基于此,您可以创建两个
    文件
    缓冲区。一旦您这样做了,您就可以自由地在每个服务器上使用
    fprintf()
    。或者,您可以将
    stdout
    指向这些缓冲区之一,以便能够使用
    printf()

    您只需要提供
    intuart1\u putc(int,FILE*)
    intuart0\u putc(int,FILE*)
    的实现,就可以随心所欲地操作数据

    希望这有帮助

    干杯

    FILE uart1_out = FDEV_SETUP_STREAM(uart1_putc, 0, _FDEV_SETUP_WRITE);
    FILE uart0_out = FDEV_SETUP_STREAM(uart0_putc, 0, _FDEV_SETUP_WRITE);
    
    fprintf(&uart1_out, "printing to UART1");
    fprintf(&uart0_out, "printing %d to UART0", 0);
    
    stdout = &uart1_out;
    stderr = &uart0_out;
    
    printf("This string will be printed thru UART1");
    fprintf(stderr, "This string will be printed thru UART0");