Hallo
Im Dateianhang ist ersichtlich, dass ich die int-Variable "..._count"
die die Sekunden, Minuten resp. Stunden zählt mit utoa() in einen
String umwandle, und dann im LCD anzeige.
Wie kann ich nun erreichen, dass führende O (Nullen) angezeigt werden
(z.B. bei Uhrzeit 09:08:01) und damit die Anzeige nicht so aussieht >>
9 :8 :1 ?
Wenns keine "Formatierung" der schlauen Art gibt, werde ich wohl
Sekunden-Einer, Sekunden_Zehner , usw. brauchen müssen.
Ich bin gespannt.
Gruss
Toni
Wenn Du genügend ROM für den Koloß hast, kannst Du natürlich die
printf()-Familie benutzen.
Ansonsten ist es im Falle von jeweils nur zwei Stellen eigentlich noch
einfach: konvertiere ,,zu Fuß'', indem Du sowohl durch 10 dividierst
als auch den Rest der Division benutzt. Effektiv geht das mit der
Standardfunktion div(), die sich die Tatsache ausnutzt, daß bei einer
ganzzahligen Division der Rest ohnehin immer ermittelt werden muß.
(Die Operatoren / bzw. % greifen intern auf dieselbe Routine zu,
werfen aber entweder den Rest oder den Quotienten weg.)
Jörg, vielen Dank
Habs hingekriegt, wie Du im Anhang siehst (im Moment nur für die
Sekunden codiert).
Ich weiss nicht, vielleicht gibt es auch eine Möglichkeit die nur eine
String-Variable braucht, habs aber nicht fertig gebracht !
Ich bin mir auch nicht sicher wie gross die Strings initialisiert
werden müssen, ist die Grösse "lcd_sec_z[3]", ... ok ?
Eigentlich sollten doch ..[2] genügen, Ausgabe ist dann aber plötzlich
um eine Stelle verschoben !
Gruss
Toni
Es ist die Frage, ob sich der Aufwand auszahlt, weil printf ist
einfacher und braucht im Flash:
vfprintf 1268 bytes
sprintf 70 bytes
Dann einfach mit sprintf(buf,"%02d:02d:02d",h,m,s); und du hast die
Zeit in buf.
Schliesslich hast du ja den ganzen Flash bezahlt, und kannst den nicht
benötigten Teil ja nicht zurückgeben :-)
OK, hier der Unterschied des benötigten Speichers.
1.) mit Funktion sprinf()
=========================
Linking...
Generating Code...
Program memory usage: 2886 bytes, 35.23% full.
Global variables usage: 63 bytes
Uhr_V2 - 0 error(s), 0 warning(s)
2.) hier so wie oben beschrieben (zu Fuss), mit div() und strcat()
==================================================================
Linking...
Generating Code...
Program memory usage: 1380 bytes, 16.85% full.
Global variables usage: 53 bytes
Einfache_Uhr - 0 error(s), 0 warning(s)
Tatsächlich ein Koloss dieses sprintf() !
Gruss
Toni
Klar, aber Du mußt dennoch einen ganzen ROM einsetzen, egal ob Du ihn
nur zu 17 oder zu 35 % fülltst, das war doch Fritz' ganze
Argumentation. Dafür ist der Quellcode einfach und überschaubar.
Wenn der von Dir für den Test benutzte AVR auch der für das
Produktivsystem ist, würde ich an Deiner Stelle keine Sekunde zögern,
printf() zu nutzen. Wenn Du das dagegen auf einem möglichst kleinen
AVR in einer 1000er Serie produzieren willst, lohnt sich der Tag
zusätzlicher Aufwand für andere Lösungen natürlich locker.