You copied the Doc URL to your clipboard.

Placing a structure over a peripheral register using __at

To place an uninitialized variable over a peripheral register, you can use a ZI __at section. Assuming a register is available for use at 0x10000000, define a ZI __at section called .ARM.__at_0x10000000. For example:

int foo __attribute__((section(“.ARM.__at_0x10000000”), zero_init));

The following example shows the a scatter file with the manual placement of the ZI __at section:

ER_PERIPHERAL 0x10000000 UNINIT
{
    *(.ARM.__at_0x10000000)
}

Using automatic placement, and assuming that there is no other execution region near 0x10000000, the linker automatically creates a region with the UNINIT attribute at 0x10000000. The UNINIT attribute creates an execution region containing uninitialized data or memory-mapped I/O.