Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Grad-Zeichen im String Kategorie: Programmierung (von André H. - 21.01.2005 19:05)
Als Antwort auf Re: Grad-Zeichen im String von Peter - 18.01.2005 19:07
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Peter,

> in eine string-Variable
>
> GRADC = "xDF"+"C";
>


Das Ganze geht aber noch kompakter: "223C"

Wenn diese Zeichen jedoch nur auf das LCD ausgegeben werden sollen,
ist die Ausgabe über zwei put() schneller, da das aufbauen und Ausgeben
des Strings wahrscheinlich länger dauert.

Kurz:
rblcd.put(0xDF);
rblcd.put('C');

Ist meist schneller, als
s = "223C";
rblcd.print(s);

oder
rblcd.print("223C");

Der Grund dafür ist, da� Stringkonstanten (egal ob explizit oder implizit) erst aus
Segment 6 bzw. 7 in eine Lokale Variable kopiert werden müssen, und die Adresse
dieser Variable dann der ASM-Funktion übergeben wird.

Die folgende Zeile sieht als VM-Codes nämlich so aus:
str= "testtest";
131 32 Inc Stack Pointer by 32
134 0 Lade Integerwert 0 auf den Stack
7 Set Global Pointer
98 Clear String (Adresse vom letzen Stackeintrag)
134 0 Lade Integerwert 0 auf den Stack
7 Set Global Pointer
134 5 Lade Integerwert 5 auf den Stack
1378 STRING_PUT_CONST_STRING (kopiere Stringkonstante
      von Wordaddr. 5 des konstantenspeichers an Adresse 0 der RAMs)
134 20 Lade Integerwert 20 auf den Stack
98 Clear String (Adresse vom letzen Stackeintrag)
134 20 Lade Integerwert 20 auf den Stack
134 0 Lade Integerwert 0 auf den Stack
7 Set Global Pointer
1122 STRING_PUT_STRING

Das wären 14 VM-Instruktionen. (und 40 Byte)
Jedoch ist es mir ein Rätsel, wofür die letzten 6 VM-Codes gut sind.
(Das einzige, was mit in den Sinn kommt, ist, daÃ? die Adresse 0 bei Stingoperationen
eine Art Platzhalter für einen globalen Zwischenspeicher darstellt.)

Zwei rblcd.put() bzw. lcdext.put() benötigen zusammen jedoch nur 8 Instruktionen.
Zudem belegt dies weniger Speicher.
(Lediglich einmalig 10 Byte für die Funktion, und 6 Byte pro Aufruf.)

Erst ab vier Zeichen würde hier ein String also Sinn machen.

MfG André H.


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Grad-Zeichen im String (von Peter - 25.01.2005 11:43)