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

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