Hallo!
Ich würde gerne ein PRINT für den XMEGA zusammenstöpseln und benötige
dafür DEINE Hilfe. Ich lege die formidable Application-Note AVR1307 als
Treiber zugrunde, die innerhalb von usart_driver.c /.h schon eine
zeichenweise Funktion in form von USART_PutChar(&USARTD0, 'c');
bereitstellt.
Ich portiere Code vom ATMEGA, wo ich das folgende Makro irgendwo aus
einem open-source Projekt übernommen habe.
#define PRINT(string, ...) printf_P(PSTR(string), ##__VA_ARGS__)
static int putchar__(char c, FILE *stream) {
uart_putc(c);
return 0;
}
static FILE mystdout = FDEV_SETUP_STREAM(putchar__, 0,
_FDEV_SETUP_WRITE);
Soweit zum Define, der Funktion putchar__ und der globalen Variable vom
Typ FILE. Im Programmcode wird dann noch einmal mittels stdout =
&mystdout; die Ausgabeeinheit verbogen und gut ist. PRINT("Hello
World"); spuckt damit auf dem ATMEGA den bekannten Text raus.
Selbstverständlich muss #include<stdio.h> gegeben sein, da dort printf_P
herstammt.
Nun dachte ich, ich lasse alles beim alten und ersetze einfach in der
Funktionsimplementierung uart_putc(c); durch USART_PutChar(&USARTD0, c);
Das kompiliert zwar, aber ich bekomme auf dem Port keine Zeichen raus.
Ich bin sicher der Port funktioniert mit korrekter Baudrate, da ich
beliebige Zeichenketten über for-schleifen, die ihrerseits die
einzelzeichenfunktion nutzen, senden kann.
Könnte mir jemand helfen oder einen Tip geben, wo ich das gruselige
Thema mit meheren Unterstrichen nachlesen kann. Ich meine mich zu
erinnern, dass es sich dabei um Assemblermakros o.ä. gehandelt hat.
Vielen Dank und gruß, Peter