gnupic: Re: [gnupic] How to correctly use UDATA ?
Subject:
Re: [gnupic] How to correctly use UDATA ?
From:
Robert Pearce ####@####.####
Date:
29 Aug 2007 19:33:59 +0100
Message-Id: <20070829193320.f772ac92.rob@bdt-home.demon.co.uk>
Hi Vaclav,
On Wed, 29 Aug 2007 12:04:25 +0200 (CEST) you wrote:
> Hello all,
>
> I used to use CBLOCK for uninitialized data section.
>
> But now I am writing larger program so I need relocatable code. But I want to manage placing by myself to correct data-bank.
>
> In LKR file there is following line:
> DATABANK NAME=gpr0 START=0x20 END=0x6F
> DATABANK NAME=gpr1 START=0xA0 END=0xEF
>
> How can I set that some variables should be put into "gpr0" section and others into "gpr1" section ?
>
In my application I'm using a 16F871, so all the GPRs are in shared banks:
SHAREBANK NAME=gprnobnk0 START=0x20 END=0x5F
SHAREBANK NAME=gprnobnk0 START=0x120 END=0x15F
SHAREBANK NAME=gprnobnk1 START=0xA0 END=0xBF
SHAREBANK NAME=gprnobnk1 START=0x1A0 END=0x1BF
SHAREBANK NAME=gprnobnk2 START=0x70 END=0x7F
SHAREBANK NAME=gprnobnk2 START=0xF0 END=0xFF
SHAREBANK NAME=gprnobnk2 START=0x170 END=0x17F
SHAREBANK NAME=gprnobnk2 START=0x1F0 END=0x1FF
(I've deliberately restricted the memory, so 0x60 to 0x6F is unused, but don't worry about that)
Then lower down I declare:
SECTION NAME=.udata RAM=gprnobnk0
SECTION NAME=.idata RAM=gprnobnk0
SECTION NAME=.udata_ovr RAM=gprnobnk2
SECTION NAME=iscratch RAM=gprnobnk2
SECTION NAME=isr_comn RAM=gprnobnk2
SECTION NAME=sio_temp RAM=gprnobnk1
Then in the code, I can use:
udata_ovr
fifo_temp res 1
sio_temp udata_ovr
tDatePtr res 1
tCommandByte res 1
udata
cmdState res 1
sioEEAdr res 1
This puts fifo_temp into gprnobnk2 (0x70-0x7f), tDatePtr and tCommandByte into gprnobnk1 (0xA0-0xBF) and cmdState and sioEEAdr into gprnobnk0. Note also that only the last two get unique addresses, the others can all be overlaid by variables in other files.
Hope that helps
Rob