Hallo, MPLAP 8.14 und C18 habe eine Frage zu #define So wie ich das aus Doku verstanden habe, ersetzt der Compiler den Wert in einer von "#define" deklarierte Angabe. z.B. #define nTimeOn 100 oder #define nnTimeOn 100 unsigned int TimeOn; ... TimeOn = nTimeOn; also 100 Habe allerdings bemekt, das dieses viel Speicher benötigt. hier das Listing C Code TimeOn=nTimeOn; Info 160: #define nTimeOn steht in einer *.h " 18 BYTE werden benötigt " 160: TimeOn=nTimeOn; 1AAE 0103 MOVLB 0x3 1AB0 0E14 MOVLW 0x14 1AB2 194D XORWF 0x4d, W, BANKED 1AB4 E101 BNZ 0x1ab8 1AB6 514E MOVF 0x4e, W, BANKED 1AB8 E002 BZ 0x1abe 1ABA 0E00 MOVLW 0 1ABC D001 BRA 0x1ac0 1ABE 0E01 MOVLW 0x1 C Code TimeOn=nnTimeOn; Info 161: #define nTimeOn steht in der *.c " 16 BYTE werden benötigt " 161: TimeOn=nnTimeOn; 1AC0 0E14 MOVLW 0x14 1AC2 194D XORWF 0x4d, W, BANKED 1AC4 E101 BNZ 0x1ac8 1AC6 514E MOVF 0x4e, W, BANKED 1AC8 E002 BZ 0x1ace 1ACA 0E00 MOVLW 0 1ACC D001 BRA 0x1ad0 1ACE 0E01 MOVLW 0x1 C Code TimeOn=100; Info 162: hier übergebe ich direkt den Wert " 6 BYTE werden benötigt " 162: TimeOn=100; 1AD0 0E64 MOVLW 0x64 1AD2 6F4D MOVWF 0x4d, BANKED 1AD4 6B4E CLRF 0x4e, BANKED Habe ich einen Denkfehler oder warum wird hier unterschiedlich viel Speicher benötigt? Gruß Siegfried
Siegfried Saueressig wrote: > Hallo, > MPLAP 8.14 und C18 Meinst Du vielleicht MPLAB? > habe eine Frage zu #define > So wie ich das aus Doku verstanden habe, ersetzt der Compiler den Wert Nicht der Compiler, sondern der Präprozessor. Der Compiler bekommt Zeilen, die mit einem "#" beginnen, überhaupt nicht zu sehen. > in einer von "#define" deklarierte Angabe. ...auch Makro genannt... > z.B. > #define nTimeOn 100 > oder > #define nnTimeOn 100 > > unsigned int TimeOn; > ... > TimeOn = nTimeOn; also 100 > Habe allerdings bemekt, das dieses viel Speicher benötigt. Grundsätzlich kann eine Präprozessoranweisung gar keinen Speicher im Zielsystem verbrauchen. Der "Fehler" muss also woanders liegen.
Hallo, könnte mich ..... In Ordnung, habe beim schreiben etwas verwechselt "Nicht der Compiler, sondern der Präprozessor." Hatte das geschrieben. "#define nTimeOn = 100" Teilweise ist erledigt. folgendes Listing habe ich jetzt. C Code TimeOn=nTimeOn; Info 160: #define nTimeOn steht in einer *.h " 8 BYTE werden benötigt 160: TimeOn=nTimeOn; 14FA 0E14 MOVLW 0x14 14FC 0103 MOVLB 0x3 14FE 6F4D MOVWF 0x4d, BANKED 1500 6B4E CLRF 0x4e, BANKED C Code TimeOn=nnTimeOn; Info 161: #define nTimeOn steht in der *.c " 4 BYTE werden benötigt " 161: TimeOn=nnTimeOn; 1502 6F4D MOVWF 0x4d, BANKED 1504 6B4E CLRF 0x4e, BANKED C Code TimeOn=100; Info 162: hier übergebe ich direkt den Wert " 6 BYTE werden benötigt " 162: TimeOn=100; 1506 0E64 MOVLW 0x64 1508 6F4D MOVWF 0x4d, BANKED 150A 6B4E CLRF 0x4e, BANKED Gruß Siegfried
also, das ganze hängt vermutlich mit den optimierungsfähigkeiten deines compilers zusammen: der compiler bemerkt, dass sich bestimmte register seit dem letzten zugriff nicht geändert haben, darum werden sie in den nachfolgenden zeilen nicht mehr erneut auf den gleichen wert gesetzt. zeile 160: 14FA 0E14 MOVLW 0x14 14FC 0103 MOVLB 0x3 daran ändert sich bis zeile 161 nichts, also rausoptimieren. offenbar ist dein Makro nTimeOn aber nicht 100 sondern 0x14.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.