Hallo zusammen! Ich habe mir mithilfe von uprintf eine "VT100" Schnittstelle an den ersten UART-Port eines MSP430F149 gebastelt. Leider funktionieren sämtliche Formatstrings nicht so, wie sie sollten! Bei %s beispielsweise kommt völliger unsinn, %d scheint wohl die Adresse des ints auszugeben. Hier mal ein Beispiel: Codezeile: printf0("STATECHANGE! State = %d; NextState = %d\r\n", State, NextState); Ausgabezeile: STATECHANGE! State = 6908; NextState = 6576 Bei %s ähnliches: Codezeile: printf0("Date of compilation: %s\r\n", _DATE_); ...ergibt völligen blödsinn, wobei printf0("Date of compilation: "); printf0(_DATE_); printf0("\r\n"); das gewünschte Ergebnis liefert... grübel Gruß, Patrick...
Zu %d kann ich nix sagen, aber zu den Strings. msp430-gcc legt meiner Erinnerung nach alle string literals im Flash ab. Damit funktionieren sie natürlich nicht mit %s. Guck mal nach, ob Du irgendein Format findest, mit dem Du einen String aus dem Flash ausgeben kannst (%S vielleicht?).
Warum funktionieren sie dann natürlich nicht mit %s? Beim MSP430 liegen RAM und ROM im gleichen Speicherbereich, sollte alsokeinen Unterschied machen. Ich bin mir ziemlich sicher dass das Problem in der Funktion printf0 liegt.
Hm, ok... Hätte ich vielleicht gleich posten sollen, also hier: void printf0(const char *fmt, ...) { uprintf(putchar0, fmt); } und putchar0, damit es vollständig ist: void putchar0(char c) { TXBUF0 = c; while ((IFG1 & UTXIFG0) == 0); } ...jetzt bin ich gespannt g Danke schon mal, Gruß, Patrick...
Wie soll das denn funktionieren, wenn du dem uprintf die restlichen Argumente vorenthältst? Du übergibst hier nur den Formatstring und den Funktionspointer. Da es in C leider nicht möglich ist variable Agumentlisten an eine Unterfunktion weiterzugeben, müsstest du aus uprintf eine Funktion vuprintf(void (*func)(char c), const char *format, va_list ap) erstellen, analog zu vsprintf, vprintf usw.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.