Forum: Compiler & IDEs Aus der stdio.h


von Gast (Gast)


Lesenswert?

Hallo,

ich versuche gerade herauszufinden, wie sprintf() funktioniert. Aus dem 
include des mspgcc:
1
int __attribute__((format (printf, 2, 3))) sprintf (char *buf, const char *fmt, ...);

Kann mir das mal jemand verständlich erklären?
Kann mit dieser Funktion floats ausgegeben werden?
Und falls nicht, welche Linkeroptionen sind dazu notwendig.

von Rolf Magnus (Gast)


Lesenswert?

>int __attribute__((format (printf, 2, 3))) sprintf (char *buf, const
> char *fmt, ...);
>
> Kann mir das mal jemand verständlich erklären?

int
   Das ist der Rückgabetyp.

__attribute__((format (printf, 2, 3)))
   Compilerspezifisches Attribut, das gcc dabei unterstützt, fehlerhafte
   Formatstrings zu erkennen und entsprechende Warnungen auszugeben.

sprintf
   Name der Funktion

(char *buf, const char *fmt, ...)
   Die Parameterliste. Der erste ist der Zielpuffer, der zweite der
   Formatstring, danach kommen optional weitere Parameter, die vom
   Formatstring abhängen.

> Kann mit dieser Funktion floats ausgegeben werden?

Das kommt auf die verwendete libc an. Wenn sie das Standard-sprintf voll 
unterstützt, ja.

> Und falls nicht, welche Linkeroptionen sind dazu notwendig.

Auch das hängt von der libc ab. Gibt es dazu keine Doku?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Gast wrote:

> Kann mir das mal jemand verständlich erklären?

Das GCC-Manual.  Aber du musst das mit dem _attribute_ nicht
selbst verstehen, das geht nur den Compiler was an (damit er
die passenden Warnungen generieren kann).

Diese umständliche Deklaration wäre eigentlich gar nicht nötig,
da der Compiler für Standardfunktionen (sprintf ist eine) den
Test ohnehin durchführt.

> Kann mit dieser Funktion floats ausgegeben werden?

Meines Wissens beim MSP430-GCC (und seiner Bibliothek) nicht.

> Und falls nicht, welche Linkeroptionen sind dazu notwendig.

Da die Antwort auf obige Frage ,nein' lautet, hilft dir auch keine
Linkeroption.

von Gast (Gast)


Lesenswert?

Danke euch beiden.

>> Kann mit dieser Funktion floats ausgegeben werden?

>Meines Wissens beim MSP430-GCC (und seiner Bibliothek) nicht.

Schade. Gibt es überhaupt eine Möglichkeit, floats auszugeben? Ich habe 
im Archiv nur was über den AVR gefunden. Es geht um die Ausgabe von 
floats auf einem alphanumerischem Display.

von Sven (Gast)


Lesenswert?

Hallo,

wieviele Nachkommastellen sind denn nötig für die Ausgabe?

von Gast (Gast)


Lesenswert?

> wieviele Nachkommastellen sind denn nötig für die Ausgabe?

2 würden derzeit ausreichen. Bei kleineren µC habe ich immer ganzzahlig 
gerechnet und dann das Komma nur reingeschoben. Jetzt habe ich 64kB 
Platz.

von Johannes M. (johnny-m)


Lesenswert?

Gast wrote:
> Jetzt habe ich 64kB Platz.
Und das heißt automatisch: Wenn ich den Platz habe, dann muss ich ihn ja 
auch irgendwie vollkriegen?

Klar, bei PCs wird das so gemacht. Wenn ein neuer PC mit mehr Speicher 
auf den Markt kommt, dann gibt es von Winzigweich auch gleich ein tolles 
Betriebssystem, das zwar nicht wirklich mehr kann, als das 
Vorgängersystem, aber wenigstens prozentual gesehen mindestens genauso 
viel Speicher braucht wie das alte auf dem alten Rechner mit weniger 
Speicher...

Außerdem benötigen Gleitkommarechnungen in erster Linie nicht nur mehr 
Speicher, sondern v.a. mehr Rechenzeit. Bei einer geforderten Auflösung 
von 2 Nachkommastellen würde ich deshalb (auch wenn ich noch so viel 
Speicher habe) bei einem µC nach wie vor Festkommaarithmetik 
verwenden...

von Sven (Gast)


Lesenswert?

Das war leider auch meine einzige Idee.

von Gast (Gast)


Lesenswert?

Ich habe leider keine Ahnung, wer Winzigweich ist und was das Thema 
Betriebssysteme mit dem beschriebenen Problem zu tun hat. Lass doch 
deinen Frust woanders ab.

Aber ich entnehme deiner Antwort, dass du es nicht weißt und damit für 
sinnlos empfindest. Solche Antworten sind nicht neu. Nun, da ich 
genügend Platz zur Verfügung habe, kann ich ihn auch nutzen. Ich spare 
nichts dabei, wenn er nur rumliegt. Ich bekomme kein Geld zurück, wenn 
ich ihn nicht benutze. Ich kann den freien Speicher auch nicht 
vermieten.

Zeitliche Probleme existieren nicht, der Zahlenwert soll alle paar 
Sekunden aktualisiert werden. Rechenpower ist ebenfalls genügend da.

von Rolf Magnus (Gast)


Lesenswert?

>> Jetzt habe ich 64kB Platz.
> Und das heißt automatisch: Wenn ich den Platz habe, dann muss ich ihn
> ja auch irgendwie vollkriegen?

Ich hätte gedacht, es heißt: "Wenn ich eh jede Menge Platz habe, brauche 
ich keinen unnötigen Aufwand zu treiben, um Platz zu sparen". Das System 
läuft mit halb leerem Speicher auch nicht besser.

> Klar, bei PCs wird das so gemacht.

Ja, leider. Im Unterschied zu der Mikrocontroller-Anwendung ist 
allerdings im PC das Programm in der Regel nicht auf eine ganz 
spezifische Hardware beschränkt und ist außerdem nicht das einzige 
Programm, das läuft.

> Außerdem benötigen Gleitkommarechnungen in erster Linie nicht nur mehr
> Speicher, sondern v.a. mehr Rechenzeit.

Die spielt bei einigen Anwendungen keine Rolle. Hier hat man in diesem 
Fall, ebenfalls im Gegensatz zum PC, auch keinen Vorteil davon, sich die 
zu sparen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.