Moin Peter,
ich hab grad mal ein ganz simples Progrämmchen geschrieben und extra nur ein char genommen.
Ich weise lediglich einem char einen konstanten Wert zu
char a;
a = 3;
Das macht der Compiler daraus:
Warum packt der Compiler den Wert erstmal in die Speicherstelle 72 um ihn dort wieder zu laden ?Code:MOVLW 0x3 ; lade den Wert 3 ins W-Register MOVWF 0x72 ; speichere den Wert aus W im RAM an der Speicherstelle 0x72 MOVF 0x72,W ; lade das W-Register mit dem Wert aus Speicherstelle 0x72 MOVWF a ; speichere den Wert in "a" a hat die Speicherstelle 0x77
Das sieht schon sehr merkwürdig aus.
Dazu muss gesagt werden, dass der Compiler die gespiegelten Speicherstellen benutzt hat,
Was er also in der Hinsicht sehr gut gelöst hat.
Es gibt bei meinem verwendeten 12F1840 nämlich genau 16 Speicherstellen, die ohne BANKSELECT direkt addressierbar sind.
Aber der Zwischenschritt über die zusätzliche Speicherstelle macht mich stutzig.
Siro
"brain demaged" ==> Hirngeschädigt. Das trifft es wohl SEHR gut für die PIC Architektur
und trotzdem mag ich diese kleinen Käfer.
Hab eben noch einen Versuch gestartet:
Der Compiler nimmt für die 2te Variable auch die Spoeicherstelle 0x72 als Zwischenspeicher.
Lesezeichen