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
  • 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."

    Why does it need to be at a fixed address to use a "MOVC-type flash read"?
    What is it about your "MOVC-type flash read" that only works with fixed, absolute addresses?
    Why can't your "MOVC-type flash read" use the symbolic name?

    The whole point of the code keyword extension is that you can just use it in 'C' like any other variable:
    UCHAR code ucTBD = TBD_VAL;
    
    some_other_variable = ucTBD; // The compiler will generate a MOVC instruction here!

Reply
  • 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."

    Why does it need to be at a fixed address to use a "MOVC-type flash read"?
    What is it about your "MOVC-type flash read" that only works with fixed, absolute addresses?
    Why can't your "MOVC-type flash read" use the symbolic name?

    The whole point of the code keyword extension is that you can just use it in 'C' like any other variable:
    UCHAR code ucTBD = TBD_VAL;
    
    some_other_variable = ucTBD; // The compiler will generate a MOVC instruction here!

Children
No data