21.1 Default Memory Spaces
The compiler defines several special purpose memory spaces to match
architectural features of DSC devices. Static and
external variables may be allocated in the special purpose memory spaces through use of the
space
attribute, described in 9.10 Variable Attributes.
data
General data space. Variables in general data space can be accessed using ordinary C statements. This is the default allocation.
xmemory
- dsPIC30F, dsPIC33EP/F devices only
X data address space. Variables in X data space can be accessed using ordinary C statements. X data address space has special relevance for DSP-oriented libraries and/or assembly language instructions.
ymemory
- dsPIC30F, dsPIC33EP/F devices only
Y data address space. Variables in Y data space can be accessed using ordinary C statements. Y data address space has special relevance for DSP-oriented libraries and/or assembly language instructions.
prog
General program space, which is normally reserved for executable code.
Variables in this program space can not be accessed using ordinary C statements. They must
be explicitly accessed by the programmer, usually using table-access inline assembly
instructions, using the Program Space Visibility (PSV) window, or by qualifying with
__prog__
.
auto_psv
A compiler-managed area in program space, designated for Program Space Visibility (PSV) window access. Variables in this space can be read (but not written) using ordinary C statements and are subject to a maximum of 32K total space allocated.
psv
Program space, designated for Program Space Visibility (PSV) window
access. Variables in PSV space are not managed by the compiler and can not be accessed
using ordinary C statements. They must be explicitly accessed by the programmer, usually
using table-access inline assembly instructions, or using the PSV window. Variables in PSV
space can be accessed using a single setting of the PSVPAG register or by qualifying with
__psv__
.
eedata
- Devices with EEPROM Data (EEData) Memory
only
EEData space, a region of 16-bit wide non-volatile memory located at high
addresses in program memory. Variables in EEData space cannot be accessed using ordinary C
statements. They must be explicitly accessed by the programmer, usually using table-access
inline assembly instructions, or using the Program Space Visibility (PSV) window. The
__HAS_EEDATA__
manifest constant is defined for devices that support
EEData
dma
- DMA capable devices only
DPSRAM DMA memory. Variables in DMA memory can be accessed using ordinary
C statements and by the DMA peripheral. The __HAS_DMA__
manifest constant
is defined for devices that support DMA. If the device supports DMA but does not have
special DPSRAM available, the linker will not be able to allocate the space and will output
an error.