12.2.2.4 Changing Non-Auto Variable Allocation

The compiler arranges for data to be placed into sections, depending on the memory model used and whether or not the data is initialized, as described in the Address Spaces section. When modules are combined at link time, the linker determines the starting addresses of the various sections based on their attributes.

Cases may arise when a specific variable must be located at a specific address, or within some range of addresses. The easiest way to accomplish this is by using the address attribute, described in sectionDifferences Between MPLAB XC16 and ANSI C. For example, to locate variable Mabonga at address 0x1000 in data memory:

int __attribute__ ((address(0x1000))) Mabonga = 1;

A group of common variables may be allocated into a named section, complete with address specifications:

int __attribute__ ((section("mysection"), address(0x1234))), foo;