Hallo zusammen,
ich könnte nochmal Hilfe gebrauchen...
Ich schreibe einen Bootloader und möchte am Ende des Bootloaders zur
Firmware springen.
Die Adresse der Firmware wird berechnet (und lautet 0x77FC bzw. 30716).
Schreibe ich die Adresse von Hand in den Code, dann funktioniert alles.
Verwende ich die berechnete Adresse, gibt es ein Problem.
c-file:
1 | #define AppVector ((32768 - (2000 / 64 + 1) * 64)-4)
|
2 | unsigned int appVec = AppVector; // ok, lädt den Wert 30716 in appVec
|
3 | #asm
|
4 | goto AppVector ; falsch, führt zu goto 2095100
|
5 | goto 0x77FC ; ok, führt zu goto 30716
|
6 | #endasm
|
lst-file:
1 | 874 ;main.c: 39: unsigned int appVec = ((32768 - (2000 / 64 + 1) * 64)-4);
|
2 | 875 0079AC 0E77 movlw 119
|
3 | 876 0079AE 6E15 movwf main@appVec+1,c
|
4 | 877 0079B0 0EFC movlw 252
|
5 | 878 0079B2 6E14 movwf main@appVec,c
|
6 | 879 0079B4 EFFE FFFB goto 2095100 ;#
|
7 | 880 0079B8 EFFE F03B goto 30716 ;#
|
Wie man sieht, wird die Testvariable appVec aus AppVector korrekt
befüllt (119=0x77 252=0xFC)
Im goto Befehl wird aber aus AppVector 2095100 und nicht wie erwartet
30716.
Falls relevant:
MPLABX mit XC8, PIC18F25K22
Viele Grüße
Stefan