MSP430 und uprintf...

Gast #75536
Lesenswert?
• ▲
▼
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...
Gast #75537
Lesenswert?
• ▲
▼
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?).
Gast #75539
Lesenswert?
• ▲
▼
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...
Admin Persönliche Seite #75540
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.