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

How to initial the value when using "_at_" locate instruction?

This is correct code with absolute address locating:

#define USER_FLASH_SIZE 32
#define USER_FLASH_BASE_ADDR 07df
code unsigned char USER_FLASH_SPACE[USER_FLASH_SIZE] _at_ USER_FLASH_BASE_ADDR;


This is correct code with initializing:

#define USER_FLASH_SIZE 32
code unsigned char USER_FLASH_SPACE[USER_FLASH_SIZE]="Hello, this is my test string!";


This is what I want, but it failed:

#define USER_FLASH_SIZE 32
#define USER_FLASH_BASE_ADDR 07df
code unsigned char USER_FLASH_SPACE[USER_FLASH_SIZE]="Hello, this is my test string!" _at_ USER_FLASH_BASE_ADDR;


It shows this error message:
GLOBAL.C(4): error C141: syntax error near '_at_'

Please help me solve this problem: absolute locating and initialzing.

Parents
  • Assuming that you are linking with BL51:

    To locate and initialize a variable, you must use the linker locate commands. The simplest way to do so is to declare your constant in a separate .c file that contains only the segment that needs to be located at absolute memory position. Then you use the BL51 Locate tab at the options dialog to assign an absolute position to the segment.

    For example, you generate at a file named 'userdata.c':

    // USERDATA.C
    //
    // Exampleware of absolute located initialized vars
    //
    // This segment will be named ?CO?USERDATA
    
    unsigned char code user_flash_space[] = "supercalifragilisticexpialidocious";
    unsigned char code foobar = 0x55;
    


    Then you put in the Code: entry box the following string: ?CO?USERDATA(0x07DF)

    The linker will allocate the absolute segment before all other code objects, at the address you specified.

Reply
  • Assuming that you are linking with BL51:

    To locate and initialize a variable, you must use the linker locate commands. The simplest way to do so is to declare your constant in a separate .c file that contains only the segment that needs to be located at absolute memory position. Then you use the BL51 Locate tab at the options dialog to assign an absolute position to the segment.

    For example, you generate at a file named 'userdata.c':

    // USERDATA.C
    //
    // Exampleware of absolute located initialized vars
    //
    // This segment will be named ?CO?USERDATA
    
    unsigned char code user_flash_space[] = "supercalifragilisticexpialidocious";
    unsigned char code foobar = 0x55;
    


    Then you put in the Code: entry box the following string: ?CO?USERDATA(0x07DF)

    The linker will allocate the absolute segment before all other code objects, at the address you specified.

Children