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


von Marcel Meyer (Gast)


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

von crazy horse (Gast)


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

von Marcel Meyer (Gast)


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

von Chris (Gast)


Lesenswert?

Mich würde interessieren was die Vollversion kostet?!

mfg Chris!

von Marcel Meyer (Gast)


Lesenswert?


von crazy horse (Gast)


Lesenswert?

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

von phagsae (Gast)


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

von Marcel Meyer (Gast)


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

von crazy horse (Gast)


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().

von Peter D. (peda)


Lesenswert?


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.