Liste der Anhänge anzeigen (Anzahl: 1)
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:
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
Warum packt der Compiler den Wert erstmal in die Speicherstelle 72 um ihn dort wieder zu laden ?
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.