以下内容摘自TI DSP specification.The C/C++ compiler uses a stack to:
Allocate local variables
Pass arguments to functions
Save register contents
The run-time stack grows from the high addresses to the low addresses. The compiler uses the R13 register to manage this stack. R13 is the
stack pointer (SP), which points to the next unused location on the stack.The linker sets the stack size, creates a global symbol, __STACK_SIZE, and assigns it a value equal to the stack size in bytes. The default stack size is 2048 bytes. You can change the stack size at link time by using the --stack_size
option with the linker command. For more information on the --stack_size option, see the linker description chapter in the
ARM Assembly Language Tools User's Guide.At system initialization, SP is set to a designated address for the top of the stack. This address is the first location past the end of the .stack section. Since the position of
the stack depends on where the .stack section is allocated, the actual address of the stack is determined at link time.
The C/C++ environment automatically decrements SP at the entry to a function to reserve all the space necessary for the execution of that function. The stack pointer is incremented at the exit of the function to restore the stack
to the state before the function was entered. If you interface assembly language routines to C/C++ programs, be sure to restore the stack pointer to the same state it was in before the function was entered.
For more information about using the stack pointer, see
Section 2.3.1; for more information about the stack, see
Section 2.3.1.
Note
Stack OverflowThe compiler provides no means to check for stack overflow during compilation or at run time. A stack overflow disrupts the run-time environment, causing your program to fail. Be sure to allow enough space for the stack to grow.
You can use the --entry_hook option to add code to the beginning of each function to check for stack overflow; see
Section 2.3.1.