www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf %f geht nicht


Autor: hake (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich nutze AVR-Studio mit WINAVR.

Code:
...
sprintf(s,"adc:%f\r\n",2.88);
uputs(s);
...




Ausgabe:

adc:?

Wo ist das Problem? Ich verzweifle hier noch...

Autor: tset (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/FAQ#Aktivi... 
pauschal würde ich sagen, lass dass mit den floats und lies dir den 
Artikel Festkommaarithmetik durch.
Außerdem solltest du dir angewöhnen mehr Code zu zeigen, in mit den 
Möglichkeiten der Foren-Software zu formatieren und vor allem sollte der 
Code kompilierbar sein. Rest siehe Netiquette.

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

Bewertung
0 lesenswert
nicht lesenswert
tset schrieb:
> pauschal würde ich sagen, lass dass mit den floats

Pauschal würde ich sagen, dass pauschale Aussagen Unfug sind. ;-)

Gleitkommazahlen haben einen unbeschreiblichen Vorteil: eine recht
gute Dynamik, sodass man gerade während der Prototypenphase damit erst
einmal schnell zu einem Ergebnis kommt.  Ihre Darstellung entspricht
dem, was wir als normale Zahlendarstellung benutzen, der Debugger kann
sie einem direkt anzeigen.  Wenn man also 1.55 für eine Variable
sieht, dann weiß man, dass da soeben 1,55 V gemessen worden sind,
während das für 0x0623 nicht so offensichtlich ist.  Außerdem muss man
sich erstmal nicht um irgendwelche Zahlenbereichsüberläufe und
dergleichen kümmern.

Wenn der Algorithmus erst einmal steht, und man mit ihm nicht
zufrieden ist (zu viel Speicherverbrauch, zu lange Rechenzeit, zu
geringe Genauigkeit), kann man sich allemal an die Optimierung mittels
Festkommaarithmetik machen.

Ehrlich gesagt, verstehe ich diesen Hype "Nimm ja nicht auf keinen
Fall überhaupt jemals keine Gleitkommazahlen auf so einem kleinen
Controller!" nicht.  Controller, die größer als der Ur-AT90S1200 sind,
sind schon lange erfunden, und deren Mehrpreis (im Vergleich zum
kleinsten möglichen Controller) liegt selbst nach Maßgaben eines
Hobbybudgets in der Regel kaum bei einer Stunde Arbeitszeit -- und die
hat man ganz schnell durch die Bequemlichkeit wieder rein.

Wenn man für richtig große Stückzahlen entwickelt, ist das natürlich
was anderes, aber wen von uns hier betrifft das denn wirklich?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hake schrieb:
> sprintf(s,"adc:%f\r\n",2.88);

Ich bin mir jetzt nicht sicher, meine aber, dass standardmäßig eine 
kastrierte printf-Routine verwendet wird, die nicht alle Optionen 
unterstützt. Man kann aber mittels Schalter, o.ä. die große Version 
aktivieren.

Autor: tset (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch schrieb:
> tset schrieb:
>> pauschal würde ich sagen, lass dass mit den floats
> Pauschal würde ich sagen, dass pauschale Aussagen Unfug sind. ;-)
Pauschal würde ich sagen, dass man an einem Zweizeiler nicht viel 
erkennen kann, also kann zumindest ich dann nur pauschale Aussagen 
treffen und da stehe ich zu 'wenn moeglich kein float auf einem AVR'. 
;-)
Zu dem Rest deines Beitrags: ich habe auf den Artikel 
Festkommaarithmetik hingewiesen, um zu entscheiden, ob float oder nicht, 
hat er jetzt schon einiges zum Lesen.

Ich hätte ja auch
s[]="2.88\r\n";
uputs(s);
schreiben können, wäre bei dem, was man aus dem Zweizeiler sehen kann, 
auch richtig gewesen. ;-)

Autor: tset (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist
char s[]="2.88\r\n";
uputs(s);

@Christian H. (netzwanze)
Siehe 
http://www.mikrocontroller.net/articles/FAQ#Aktivi... 
;-)

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.