This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

const DATA at absolute address in CODE seg

Hi all, My goal is to put a few constants in the code segment at compile time so they are stored in the program flash when the SiLabs 'F122 is initialized via JTAG.

const UCHAR code ucTBD = TBD_VAL;

seems to work but I'd like to put the data at a known address so I can read it explicitly with a MOVC-type flash read. But

const UCHAR code ucTBD _at_ 0x6000 = TBD_VAL;

is unacceptable because an absolute specifier is illegal.

Without the "_at_", the linker puts the data down with the ISR vectors but I need it to reside in flash space that I am comfortable modifying.

It seems to work if I declare ucTBD inside a function and assign an absolute location to that function. Is that an acceptable and reliable method?

Thanks in advance for any advice,
John

Ref:
typedef unsigned char UCHAR;
#define TBD_VAL (0x00)

Parents
  • "3. I just want it to be where I'm comfortable erasing it, that is, at a known address above 0x0200.
    4. It can use a symbolic name but I want to reference it by address for bootloader reasons."


    Aha! You didn't mention a bootloader - you said you were loading via JTAG.

    So, surely, what you want is not to fix the location of this particular variable, but to prevent the Linker from placing anything below 0x2000 (or whatever).

    Note that the Linker will slot stuff into any gaps in the vector table if it can.
    The vector table is not sacrosanct - it's just another bit of CODE space as far as both the Linker and the processor are concerned.

Reply
  • "3. I just want it to be where I'm comfortable erasing it, that is, at a known address above 0x0200.
    4. It can use a symbolic name but I want to reference it by address for bootloader reasons."


    Aha! You didn't mention a bootloader - you said you were loading via JTAG.

    So, surely, what you want is not to fix the location of this particular variable, but to prevent the Linker from placing anything below 0x2000 (or whatever).

    Note that the Linker will slot stuff into any gaps in the vector table if it can.
    The vector table is not sacrosanct - it's just another bit of CODE space as far as both the Linker and the processor are concerned.

Children
No data