Guten Tag,
nach dem Beispiel aus dem gcc-avr-Tutorial habe ich printf() testweise
sowohl auf Uart als auch ins Eeprom umgeleitet (Geizkragen
printf-debugging).
Allerdings klappt es nur, wenn
1 | FILE uart_out = FDEV_SETUP_STREAM( uart_putchar, NULL, _FDEV_SETUP_WRITE );
|
2 | stdout = &uart_out;
|
in main.c steht.
Ich hätte die Zeilen aber lieber in der Initialisierung vom Uart bzw.
Eeprom, damit ich zur Laufzeit komfortabel wechseln kann. Es
funktioniert aber nicht, d. h. printf funktioniert nur aus uart.c heraus
und nicht aus main. uart.h ist in main unkludiert.
Versteh ich das richtig, dass stdout ein vordefinierter globaler Zeiger
ist?
Was mach ich falsch?
AVR m1284p
Aus uart.c:
1 | #include <stdio.h>
|
2 | uart_init()
|
3 | {
|
4 | FILE uart_out = FDEV_SETUP_STREAM( uart_putchar, NULL, _FDEV_SETUP_WRITE );
|
5 | stdout = &uart_out;
|
6 | printf("Uart Init");
|
7 | }
|
8 |
|
9 | int uart_putchar(char c, FILE *uart_out)
|
10 | {
|
11 | tx_Puffer[tx_SchreibZeiger] = c;
|
12 | tx_SchreibZeiger++;
|
13 | tx_ByteZaehler++;
|
14 | UCSR0B |= (1 << UDRIE0); //Starte uebertragung, falls sie noch nicht laeuift
|
15 | }
|
Aus uart.h:
1 | int uart_putchar(char c, FILE *uart_out);
|