Atmel printf-Formatierung funktioniert nicht, keine Formatierung funktioniert

Wir betreiben einen Atmel AVR32-Chip auf unserem Board und haben kürzlich festgestellt, dass dies printfmit Format-/Konvertierungsspezifizierern nicht funktioniert. Ein normaler printffunktioniert.

Zum Beispiel,

printf("hello\n"); // works just fine
printf("number: %d\n", 12); // returns -1, nothing prints.

Keine Formatbezeichner scheinen einen Effekt zu haben, printf gibt nur -1 zurück.

Wir haben versucht, verschiedene Versionen der vfprintfFunktionsfamilie zu verknüpfen, z. B. Hinzufügen, -Wl,-u,vfprintf -lprintf_flt -lmum Fließkommaformatfähigkeiten hinzuzufügen ( hier dokumentiert ), aber ohne Erfolg.

Beachten Sie, dass wir NICHT nach Gleitkommafähigkeiten suchen, wir versuchen nur, JEDE Formatierung für eine normale Dezimalzahl (int, uint_8 usw.) zu erhalten.

Jede Hilfe sehr geschätzt.

Ich weiß nicht viel über AVR, aber ich weiß, dass printf etwas sperrig ist, und ich erinnere mich, dass es ein tinyprintf gibt, das ich einmal für eingebettete Systeme empfohlen gesehen habe: github.com/cjlano/tinyprintf
Vielleicht ist es unvollständig? Vielleicht versuchen Sie es einfach mit %d und der Zahl allein?
Es ist nicht sofort ersichtlich, was das Problem ist, aber wie wäre es mit einem Test, um weitere Informationen zu erhalten? Führen Sie diese durch sprintf aus, um zu sehen, ob die Formatierung fehlschlägt. Es könnte etwas mit dem Ausgabestrom zu tun haben.
Funktioniert %iwie erwartet?
Crossposting innerhalb des SE-Netzwerks ist nicht gestattet, Sie können dies auf EESE oder SO anfordern, aber nicht auf beiden . Sie müssen entweder dies oder stackoverflow.com/questions/28651671/… löschen (FWIW, ich behaupte, dass die Trennung von Websites ein kaputtes Design ist - alle technischen Websites sollten vereinheitlicht werden, wobei möglicherweise überlappende Spezialitäten von Tags und Tag-Filtern behandelt werden.)
@ChrisStratton Ok, ich habe den anderen gelöscht.

Antworten (1)

Haben Sie versucht, einen Zeichenpuffer zu erstellen, ihn zu formatieren und dann zu drucken?

   char buffer [50];
   int A = 12;
   i = sprintf (buffer, "A: %d \n", A);

   printf(buffer);

Versuchen Sie auch zuerst, die Variable zu initialisieren, und fügen Sie sie dann in printf ein.

   int A = 12; 
   printf("number: %d \n", A);
Ich benutze sprintf zuerst in einen Zeichenpuffer, damit kann man nichts falsch machen.
Wenn der Formatierungscode getrimmt wurde, um printf fit zu machen (was mit ziemlicher Sicherheit der Fall ist), dann fehlt er auch für sprintf