How to place a variable at a given absolute address in memory (with GCC)

后端 未结 5 1797
野的像风
野的像风 2020-11-29 08:28

The RealView ARM C Compiler supports placing a variable at a given memory address using the variable attribute at(address):

int var __attribute_         


        
5条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-29 08:40

    I don't know, but you can easily create a workaround like this:

    int *var = (int*)0x40001000;
    *var = 4;
    

    It's not exactly the same thing, but in most situations a perfect substitute. It will work with any compiler, not just GCC.

    If you use GCC, I assume you also use GNU ld (although it is not a certainty, of course) and ld has support for placing variables wherever you want them.

    I imagine letting the linker do that job is pretty common.

    Inspired by answer by @rib, I'll add that if the absolute address is for some control register, I'd add volatile to the pointer definition. If it is just RAM, it doesn't matter.

提交回复
热议问题