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