Codevision AVR - sprintf() lässt programm "platzen"

Gast #48239
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
Gast
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
Gast
<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
Gast
@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
Gast
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
Gast
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().

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.