|
发表于 2012-4-11 10:49:38
|
显示全部楼层
http://infocenter.arm.com/help/i ... 0475c/CHDJHFGB.html
Defining __initial_sp, __heap_base and __heap_limit
One of several methods you can use to specify the initial stack pointer and heap bounds is to define the following symbols:
__initial_sp
__heap_base
__heap_limit.
You can define these symbols in an assembly language file, or by using the embedded assembler in C.
For example:
__asm void dummy_function(void)
{
EXPORT __initial_sp
EXPORT __heap_base
EXPORT __heap_limit
__initial_sp EQU STACK_BASE
__heap_base EQU HEAP_BASE
__heap_limit EQU (HEAP_BASE + HEAP_SIZE)
}
The constants STACK_BASE, HEAP_BASE and HEAP_SIZE can be defined in a header file, for example stack.h, as follows:
/* stack.h */
#define HEAP_BASE 0x20100000 /* Example memory addresses */
#define STACK_BASE 0x20200000
#define HEAP_SIZE ((STACK_BASE-HEAP_BASE)/2)
#define STACK_SIZE ((STACK_BASE-HEAP_BASE)/2)
Note
This method of specifying the initial stack pointer and heap bounds is supported by both the standard C library (standardlib) and the micro C library (microlib).
http://infocenter.arm.com/help/i ... 0475c/CJAGBBEG.html
Stack pointer initialization and heap bounds
The C library requires you to specify where the stack pointer begins. If you intend to use ARM library functions that use the heap, for example, malloc(), calloc(), or if you define argc and argv command-line arguments for main(), the C library also requires you to specify which region of memory the heap is intially expected to use.
The region of memory used by the heap can be extended at a later stage of program execution, if required.
You can specify where the stack pointer begins, and which region of memory the heap is intially expected to use, with any of the following methods:
Define the symbol __intial_sp to point to the top of the stack. If using the heap, also define symbols __heap_base and __heap_limit.
|
|