PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgabe eines Bytes auf ein LCD dauert länger als die Ausgabe eines Strings?



Thomas E.
20.03.2012, 15:38
Hallo!


Ich sitze hier vor folgender, seltsam anmutenden Beobachtung:
Laut Simulator benötigen folgende Ausgaben auf ein HD44780-LCD diese Zeit:
Lcd Bytevar; ":" (eine Byte-Variable und ein Doppelpunkt): 3,467 ms
Lcd Stringvar; "C" (ein String*5 und das Zeichen "C"): 0,190 ms
Controller: AtMega8 @ 1 Mhz internal RC-Clock

Hängt dies damit zusammen, dass die Byte-Variable zerlegt und einzelne ASCII-Zeichen daraus gewonnen werden müssen?

for_ro
20.03.2012, 17:36
Hängt dies damit zusammen, dass die Byte-Variable zerlegt und einzelne ASCII-Zeichen daraus gewonnen werden müssen?
Jo!

PS Warum muss man denn min. 10 Zeichen als Antwort eingeben?

Thomas E.
20.03.2012, 21:02
Hallo for_ro!


Danke für deine Antwort. Nach weiteren Versuchen bin ich dann auch selber darauf gekommen, als ich eine String-Variable anlegte und die Byte-Variable per "STR" in die String-Variable konvertierte, welche ich dann ausgegeben habe. Laut Simulator dauert dieser Vorgang fast exakt so lange wie die direkte Ausgabe einer Byte-Variable.

Also werde ich wohl damit leben müssen. ;)

for_ro
20.03.2012, 21:43
Also werde ich wohl damit leben müssen. ;)

Nicht unbedingt.
Die Str() Funktion ist halt für allgemeine Konvertierungen gemacht. Geht es nur um Bytes, könntest du die
$LIB "MCSBYTE.LIB"
in dein Programm einbinden. Dann wird die Konvertierung wesentlich schneller durchgeführt.
Allerdings ist dann jede Konvertierung nach Strings auf Byte eingeschränkt. Kommt darauf an, was du sonst noch in deinem Programm machst.
Falls das nicht geht, kannst du dir natürlich auch leicht eine eigene Byte-spezifische Str() Funktion machen.
Ohne Anspruch auf das Optimum nur zum Darstellen der Idee z.B. so:

function my_str(byval b as byte) as string
local s as string*3
if b>199 then
s="2"
b=b-200
elseif b>99 then
s="1"
b=b-100
else 'falls führende Nullen ausgegeben werden sollen
s="0" 'ansonsten rausnehmen
endif
while b>9 b =b-10
incr c
wend
b=b+48
if s <> "" then
c=c+48
s=s+chr(c)+chr(b)
else
s=chr(b)
endif
my_str=s
end function