www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Codevision AVR - sprintf() lässt programm "platzen"


Autor: Marcel Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten morgen,

habe ein "kleines" problem mit Codevision AVR, und zwar benutze ich
die neuste version, allerdings die demo, also max 2kb code...
jetzt habe ich einen kleinen code geschrieben (soll die temp messen und
ausgeben...) nur jetzt motzt er rum das der code zu lang ist, jedoch
sollte ich nicht über 2kb kommen... wie auch mit dem bisschen?
mir ist jedoch aufgefallen, das die funktion   sprintf(g_temp," %d
°c",temp);  sehr sehr viel speicher verbraucht, ich brauche sie jedoch
und die float variabel auszugeben, oder gibts noch eine andere
möglichkeit dieses zu lösen?

Mfg
Marcel

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sprintf() und printf() sind leider recht umfangreiche Funktionen, bieten
dafür auch einiges.
Abhilfe:
1.Vollversion kaufen, ist das Geld wert
2.in einen anderen Datentyp umwandeln und "zu Fuss" ausgeben

Autor: Marcel Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<1.Vollversion kaufen, ist das Geld wert

glaub ich dir sofort, jedoch ist bei mir (schüler) geld knapp, und das
ganze muss eh in den 2313, und der hat nur 2kb speicher ;)

<2.in einen anderen Datentyp umwandeln und "zu Fuss" ausgeben

und wie mache ich das am besten? ich habe z.b. eine float variabel mit
dem wert 28,93837, wie kann ich die dann am dümmsten ausgeben?
stehe irgendwie gerade auf dem schlauch ;)

Mfg

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich würde interessieren was die Vollversion kostet?!

mfg Chris!

Autor: Marcel Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
im Moment besser in Amerika einkaufen, beim derzeitigen Dollarkurs
kostet es nur 78 bzw 130 Euro. Kreditkarte erforderlich.

Autor: phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Marcel

Hast du die compiler optionen richtig eingestellt??
Da kannst Du den sprintf() Funktionsumfang erheblich reduzieren
und damit die codegrösse.

Zu finden unter : Projekt/Configure/C Compiler

28,93837 Du erfasst einen Temp Wert mit min 22bit ?
Respekt! Das ist mindestens "state of the art" ;-)

Wenn Du den internen ADC benutzt und der Fühler inkl aller fehler
auch mit 0,1% Fehler arbeitet- kannst du max 1024 zustände
unterscheiden. ( 10 bit )
Also macht eine 29,9 Anzeige gerade noch sinn. (deltaC=100 C )

Also ball flach halten und die float Keule erst schwingen wenns sinn
macht.

Phagsae

Autor: Marcel Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
natürlich erfasse ich meinen temp wert nicht mit 22bit gg

war nur ein beispiel, da ich öfters float zahlen benutze und diese dann
auch gerne umwandeln würde ;)

unter einstellungen habe ich stehen:

(s)printf features:  INT

der rest ist auf standard

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erst mal in int bzw. long-Variablen umwandeln.

test=29.12345;    //float-Zahl
vorkomma=test;    //ganzzahliger Teil
test=(test-vorkomma)*10000; //4 Nachkommastellen
nachkomma=test;

die beiden Zahlen kannst du nun nach den üblichen Verfahren ausgeben.
Wird deutlich kleiner als sprintf().

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.