extern FILE uart_out ?

OP #3412606
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren