11.2.2.5 Data Memory Allocation Macros

Macros that may be used to allocate space in data memory are discussed below. There are two types: those that require an argument and those that do not.

The following macros require an argument N that specifies alignment. N must be a power of two, with a minimum value of 2.

#define _XBSS(N) __attribute__((space(xmemory), aligned(N)))
#define _XDATA(N) __attribute__((space(xmemory), aligned(N)))
#define _YBSS(N) __attribute__((space(ymemory), aligned(N)))
#define _YDATA(N) __attribute__((space(ymemory), aligned(N)))
#define _EEDATA(N) __attribute__((space(eedata), aligned(N)))
Note: The list above shows example macros. Macro content is device dependent. See the device header file for actual macro content. For more about allocating xmemory and ymemory, see space Variable Attribute.

For example, to declare an uninitialized array in X memory that is aligned to a 32-byte address:

int _XBSS(32) xbuf[16];

To declare an initialized array in EEPROM Data (EEData) space without special alignment:

int _EEDATA(2) table1[] = {0, 1, 1, 2, 3, 5, 8, 13, 21};

The following macros do not require an argument. They can be used to locate a variable in persistent data memory or in near data memory.

#define _PERSISTENT __attribute__((persistent))

#define _NEAR __attribute__((near))

For example, to declare two variables that retain their values across a device Reset:

int _PERSISTENT var1,var2;