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

Locating a variable to an specific address

Hi,

I'm trying to locate a variable to an specific address. There are three ways to do this:

1) using options of the file that have the variable and config the RAM area
2) unsigned int cont __at (0x2000000);
3) #define cont (*((unsigned int *)(0x2000000)))

The first one, is too bad because is posible that I want to locate variables to diferents locations.
The second one, is perfect for me, but when compiling the compiler generate a very big file from CODE area to RAM area even using a not init area.
The third one, works perfect, but is not a standard way to do it.

How can I use __at tense without make a very big file?

My code are located at 0x1000000 and the data are at 0x2000000.

Thanks!!!

Parents Reply Children
  • "#define IOPIN0 (*((volatile unsigned long *)0xE0028000))"
    

    The trouble with this is that the tools do not know that you are using location 0xE0028000 - so there is nothing to stop them putting something else there...

  • Thank you!!

    Ever all my projects use __at tense, is more easy to read, but now I like the third option because I can see that you use it. Thanks.

    Finally I use this:

    #define _at(x) (*((volatile unsigned int *)(x)))
    #define uchar_at(x) (*((unsigned char *)(x)))
    #define uint_at(x) (*((unsigned int *)(x)))
    #define ulong_at(x) (*((unsigned long *)(x)))
    #define char_at(x) (*((char *)(x)))
    #define int_at(x) (*((int *)(x)))
    #define long_at(x) (*((long *)(x)))

    There are not "volatile", because is not a register and ever the compiler knows when it change.

    Thanks!!

  • But see my previous warning:

    "The trouble with this is that the tools do not know that you are using the pointed-to locations - so there is nothing to stop them putting something else there..."

  • Thats is clear, but, there are any other method to do this with the supervision of the compiler?. Using __at directive the results are not good.