Forum: FPGA, VHDL & Co. printf für microblaze Softcore


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Martin O. (ossi-2)


Bewertung
0 lesenswert
nicht lesenswert
Derzeit compiliere ich C-Programm mit dem gcc Compiler für
den microblaze softcore. Den Code führe ich dann in
einer microblaze-emulation aus. Diverse Programme laufen einwandfrei,
inkl. floating point (z.B. sin(x) aus libm.a). Die printf Funktion
arbeitet auch für die Optionen %d %s %X einwandfrei, aber
Anzeige von Fließpunktwerten (%e %f) geht nicht, es werden Leerstrings 
ausgegeben. Der Code von printf ist so riesig, dass da eigentlich
die Fließpunktoptionen drin sein müssten

Welche Ideen zur Fehlersuche habt ihr ?
Wieviel Stackspeicher würdet ihr für printf vorsehen ?
Benutzt printf evtl. malloc?

von Martin S. (strubi)


Bewertung
0 lesenswert
nicht lesenswert
Martin O. schrieb:
> Derzeit compiliere ich C-Programm mit dem gcc Compiler für
> den microblaze softcore. Den Code führe ich dann in
> einer microblaze-emulation aus. Diverse Programme laufen einwandfrei,
> inkl. floating point (z.B. sin(x) aus libm.a). Die printf Funktion
> arbeitet auch für die Optionen %d %s %X einwandfrei, aber
> Anzeige von Fließpunktwerten (%e %f) geht nicht, es werden Leerstrings
> ausgegeben. Der Code von printf ist so riesig, dass da eigentlich
> die Fließpunktoptionen drin sein müssten
>
> Welche Ideen zur Fehlersuche habt ihr ?

gdb, RTS (read the source)

> Wieviel Stackspeicher würdet ihr für printf vorsehen ?

Hängt von der maximalen Stringlänge der erwarteten Ausgabe ab. Wenn du 
nur die nackte vsprintf() nutzt, kannst du das in deiner (eigenen) 
printf()-Funktion selber festlegen:
1
int printf(const char *fmt, ...)
2
{
3
  char buf[80];
4
  va_list args;
5
..

> Benutzt printf evtl. malloc?

Welche Implementierung? newlib, uClibc, ...?
Die reentrante newlib-Variante nutzt malloc. Aber vermutlich hast du 
eine andere, wie der hapernde float-support suggeriert.

von Martin O. (ossi-2)


Bewertung
0 lesenswert
nicht lesenswert
Ich benutze die libc.a, die der gcc standardmässig eingestellt hat.
I Map file gibts dann die Zeile:

c:/xilinx/sdk/2013.3/gnu/microblaze/nt/bin/../lib/gcc/microblaze-xilinx- 
elf/4.6.4/../../../../microblaze-xilinx-elf/lib/bs/m\libc.a(lib_a-printf 
.o)

Das scheint die Version anzugeben. In den verschiedensten 
Unterverzeichnissen
unter /sdk/2013.3/gnu.... finden sich aber zahlreiche andere Versionen
von libc.a, von denen sich mir nicht wirklich die jeweilige 
Spezialisierung erschliesst.

von MicroBlazer (bauchfrei) (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Aus den Xilinxbibliotheken steht dir xil_printf() zur Verfügung.

von Martin O. (ossi-2)


Bewertung
0 lesenswert
nicht lesenswert
xil_printf kann aber, soweit ich mich erinnere, keine 
Fließpunktvariablen.

Ausserdem geht es mir primär darum, zu verstehen warum printf nicht 
geht, auch wenn ich printf wegen der enormen Größe in der Praxis nicht 
verwenden werde.

von Strubi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

such dir doch einfach eine printf()-Implementation deiner Wahl im Source 
raus, es gibt zig kompakte Varianten im Netz neben uClibc und newlib, 
die auch Float können. Mit den libgloss-Xilinx-Minimalismen wirst du 
vermutlich keinen Spass haben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.