11.2.3.1 Software Stack
The dsPIC DSC device dedicates register W15 for use as a software Stack Pointer. All processor stack operations, including function calls, interrupts and exceptions, use the software stack. The stack grows upward, towards higher memory addresses.
The dsPIC DSC device also supports stack overflow detection. If the
Stack Pointer Limit register, SPLIM, is initialized, the device will test for overflow
on all stack operations. If an overflow should occur, the processor will initiate a
stack error exception. By default, this will result in a processor Reset. Applications
may also install a stack error exception handler by defining an interrupt function named
_StackError
. See 15 Interrupts for details.
The C run-time startup module initializes the Stack Pointer (W15) and
the Stack Pointer Limit register during the startup and initialization sequence. The
initial values are normally provided by the linker, which allocates the largest stack
possible from unused data memory. The location of the stack is reported in the link map
output file. Applications can ensure that at least a minimum-sized stack is available
with the --stack
linker command-line option. See the “MPLAB® XC-DSC
Assembler, Linker and Utilities User’s Guide” (DS-50003590) for details.
Alternatively, a stack of specific size may be allocated with a user-defined section from an assembly source file. In the following example, 0x100 bytes of data memory are reserved for the stack:
.section *,data,stack
.space 0x100
The linker will allocate an appropriately sized section and initialize
__SP_init
and __SPLIM_init
so that the run-time
startup code can properly initialize the stack. Note that since this is a normal
assembly code, section attributes such as address
may be used to
further define the stack. Please see the “MPLAB® XC-DSC
Assembler, Linker and Utilities User’s Guide” (DS-50003590) for more
information.