2014-01-18 4 views
1

Я использую ATmega128, и мне нужны два последовательных порта для связи. Я использую printf из заголовочного файла stdio.h для отправки данных через USART 0. Мне также нужно отправить данные через USART 1 в lcd, и мне любопытно использовать форматированную функцию ввода. Я думал, что подключение одной и той же функции printf к USART 1 и USART 0 заставляет компилятор запутаться, поэтому я не пробовал.Как создать printf с немного другим именем

Может ли кто-нибудь предложить, как сделать еще один printf сказать «Lprintf» для отправки данных через USART 1 ??

ответ

2

Что вы хотите сделать, это использовать fprintf(). См. Документацию по avr-libc для функции. По сути, вы хотите иметь функцию fputc() для UART1 и одну для UART0. Затем, основываясь на этом, вы можете создать два буфера FILE. Как только вы это сделаете, вы можете бесплатно использовать fprintf(). При желании вы можете указать stdout на один из этих буферов, чтобы иметь возможность использовать printf().

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"); 

Вам просто нужно обеспечить реализацию для int uart1_putc(int, FILE*) и int uart0_putc(int, FILE*) для манипулирования данными, как вы хотите.

Надеюсь, это поможет.

Cheers.

+0

работает отлично .. спасибо –

0

В зависимости от того, как вы связали его, есть два варианта, которые, возможно, проще:

  1. Используйте sprintf() чтобы написать отформатированный текст в строку, а затем использовать свой собственный putchar() или putstring() отправить это к желаемому USART.

  2. Если вы используете структуру FILE, чтобы связать ваши USART с функциями stdio (скорее всего), вы можете использовать fprintf(), чтобы направлять результаты в конкретный поток.

+0

Благодарю вас за советы. –

Смежные вопросы