| |||
| Home > Using scatter files > Using __attribute__((section("name"))) to place code and data | |||
You can place code and data by separating them into their
own objects without having to use toolchain-specific pragmas or
attributes. However, you can also use __attribute__((section(" to
place an item in a separate ELF section. You can then use a scatter
file to place the named sections at specific locations.name")))
To use __attribute__((section(" to
place a variable in a separate section:name")))
Use __attribute__((section(" to
specify the named section where the variable is to be placed, for
example:name")))
Use a scatter file to place the named section, for example:
Example 18. Placing a section
FLASH 0x24000000 0x4000000
{
... ; rest of code
ADDER 0x08000000
{
file.o (foo) ; select section foo from file.o
}
}
Be aware of the following:
linking
with --autoat or --no_autoat does
not affect the placement
if scatter-loading is not used, the section is placed
in the default ER_RW execution region of the LR_1 load
region
if you have a scatter file that does not include
the foo selector, then the section is placed in
the defined RW execution region.
You can also place a function at a specific address using .ARM.__at_ as
the section name. For example, to place the function addresssqr at 0x20000,
specify:
int sqr(int n1) __attribute__((section(".ARM.__at_0x20000")));
int sqr(int n1)
{
return n1*n1;
}
Compiler Reference:
Linker Reference: