mikrocontroller.net

Forum: Compiler & IDEs Aus der stdio.h


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade herauszufinden, wie sprintf() funktioniert. Aus dem 
include des mspgcc:
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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war leider auch meine einzige Idee.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.