sprintf-Funktion - Speicherbedarf

#3665492
Lesenswert?

Hans schrieb:

> Mich
> würde nur interessieren, ob das realistisch ist?

Kommt drauf an.
Auch wenn sprintf per se erst mal nicht wissen kann, ob du zb float oder 
double Zahlen ausgeben willst, muss es trotzdem den entsprechenden Code 
dafür mitbringen. Was dann zb den Rattenschwanz der Floating Point 
Bibliotheken nach sich zieht, was natürlich ärgerlich ist, wenn du 
dieses Feature gar nicht brauchst.
Daher gibt es auf einem AVR eine abgespeckte Version von sprintf, die zb 
Floating Point nicht ausgeben kann, dafür aber demenstprechend einen 
kleineren Memory Foorprint hat.
Es ist also nicht sprintf selbst, welches so dermassen aufträgt, sondern 
die ganzen 'Supportfunktionen', die sprintf benötigt um in der 
allgemeinsten Form alle Formatieraufgaben erledigen zu können, die sich 
da summieren.
Gast #3665498
Lesenswert?

Hans schrieb:
> Ja, float mit eingebunden.
> Compiler: Code Composer Studio V6
> uC: MSP430G2553

In dem Fall realistisch.

Karl Heinz schrieb:
> Daher gibt es auf einem AVR eine abgespeckte Version von sprintf, die zb
> Floating Point nicht ausgeben kann, dafür aber demenstprechend einen
> kleineren Memory Foorprint hat.

Ich habe schon auf AVR Controllern mit sprintf einen float verarbeitet. 
Dabei ist der Speicherbedarf nicht (oder nur so minimal, dass ich es 
nicht gemerkt hab) gestiegen.
Gast #3665548
Lesenswert?

Hallo Hans,

nach meiner Erfahrung ist die Verwendung von printf, sprintf usw. mit 
dem MSP430G2553 in Verbindung mit dem CCS-Compiler nicht möglich (ich 
verwende die Version 5.2).

"C I/O Mysteriously Fails
If there is not enough space on the heap for a C I/O buffer, operations 
on the file will silently fail. If a call to printf() mysteriously 
fails, this may be the reason. The heap needs to be at least large 
enough to allocate a block of size BUFSIZ (defined in stdio.h) for every 
file on which I/O is performed, including stdout, stdin, and stderr, 
plus allocations performed by the....."

Quelle: spru187u.pdf - Compiler UserGuide Kapitel 7.2

#define BUFSIZ          256

steht in der stdio.h von der runtime-support-library

Damit ist gesagt, dass mindestens 3 Buffer à 256 byte aufgemacht werden, 
sobald man eine dieser Funktionen benutzt und damit platzen die 512 byte 
RAM die der 2553 hat.

Gruß wv
Gast #3665943
Lesenswert?

Marian B. schrieb:
> ich sehe also spontan keinen Grund, wieso
> der Code auf einem MSP430 nicht laufen sollte.

Stelle die Frage doch einfach mal anders herum: Wieso sollte man printf 
bei einem µC überhaupt einbauen, wenn man nicht Ressourcen bis zum 
Abwinken hat? Ein paar schlichte Char_Out, String_Out, Dezi_Out und 
Hex_Out sollten doch für den gewöhnlichen Bedarf komplett ausreichen. 
gelle?

W.S.
#3665995
Lesenswert?

W.S. schrieb:
> Stelle die Frage doch einfach mal anders herum: Wieso sollte man printf
> bei einem µC überhaupt einbauen, wenn man nicht Ressourcen bis zum
> Abwinken hat?

Naja, 1-2 KB Flash- und 0.5-1 KB Stackverbrauch empfinde ich nicht als 
"Ressourcen bis zum Abwinken". Kleinere Systeme haben oft keine 
ausreichende Ausgabemöglichkeit.

Für's Debugging ist ein funktionierendes printf() deutlich angenehmer, 
als alles mit puts/puthex/putdec/... zusammenstückeln zu müssen. Liest 
sich außerdem besser.

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