Visst, för en programmerare som *vet* vad han håller på med, är allt möjligt.
För en nybörjare är det enklast och säkrast att använda BANKSEL...
> Jag hade tydligen missat att man fortfarande kan välja bank.
Man får göra en liten modifiering av LKR filen och lägga till (16F628A.LKR) :
Kod: Markera allt
SECTION NAME=BANK0 RAM=gpr0
SECTION NAME=BANK1 RAM=gpr1
SECTION NAME=BANK2 RAM=gpr2
gpr0/1/2 är tidigare definierade som tre "DATABANK" där de aktuella adresserna är definierade.
Sedan :
Kod: Markera allt
bank0 udata
var1 res 1
var12 res 1
var13 res 1
bank1 udata
var2 res 1
var22 res 1
var23 res 1
bank2 udata
var3 res 1
var32 res 1
var33 res 1
ger enligt MAP filen :
Kod: Markera allt
Symbols - Sorted by Name
Name Address Location Storage File
--------- --------- --------- --------- ---------
VAR1 0x000020 data static c:\temp\test\test.asm
VAR12 0x000021 data static c:\temp\test\test.asm
VAR13 0x000022 data static c:\temp\test\test.asm
VAR2 0x0000a0 data static c:\temp\test\test.asm
VAR22 0x0000a1 data static c:\temp\test\test.asm
VAR23 0x0000a2 data static c:\temp\test\test.asm
VAR3 0x000120 data static c:\temp\test\test.asm
VAR32 0x000121 data static c:\temp\test\test.asm
VAR33 0x000122 data static c:\temp\test\test.asm
Notera att variablerna har allokerats ur de olika bankerna.
Fortfarande finns det inga hårdkodade adresser i källkoden, var bankerna
ligger styrs av LKR filen.
Varför ska man behöva ändra LKR filen kan man undra ?
Tja, det finns många sätt att skriva dom och det sätt som Microchip
har valt kanske inte passar alla.
Om man lägger till en andra ASM fil till projektet som innehåller :
Kod: Markera allt
bank2 udata
var3x res 1
var32x res 1
var33x res 1
så ser MAP filen ut så här :
Kod: Markera allt
Symbols - Sorted by Address
Name Address Location Storage File
--------- --------- --------- --------- ---------
VAR1 0x000020 data static c:\temp\test\test.asm
VAR12 0x000021 data static c:\temp\test\test.asm
VAR13 0x000022 data static c:\temp\test\test.asm
VAR2 0x0000a0 data static c:\temp\test\test.asm
VAR22 0x0000a1 data static c:\temp\test\test.asm
VAR23 0x0000a2 data static c:\temp\test\test.asm
VAR3 0x000120 data static c:\temp\test\test.asm
VAR32 0x000121 data static c:\temp\test\test.asm
VAR33 0x000122 data static c:\temp\test\test.asm
VAR3X 0x000123 data static c:\temp\test\test2.asm
VAR32X 0x000124 data static c:\temp\test\test2.asm
VAR33X 0x000125 data static c:\temp\test\test2.asm
Notera att variablerna med "X" (från test2.asm) har allokerats
snyggt och prydligt efter de andra från första ASM filen och i "rätt" bank!
Personligen tycker jag dock att detta är lite "överkurs" för en PIC
nybörjare. Låt bara MPLINK allokera variablerna ur valfri bank och
används BANKSEL så fungerar det alltid...
