只要用Cortex-M单片机都会遇到的问题
MSP的位置 = 全局变量数+HEAP_SIZE+Stack_Size。KEIL编译器对RAM的排列方式(地址由低到高):
1、全局变量(包括已初始化的变量和没初始化的变量);
2、Heap所占的空间;
3、主Stack所占空间;
Stack_Size EQU 0x0200;
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
Heap_Size EQU 0x000;
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit 编译器怎么知道我定义的Stack_Mem存储区是栈空间呢 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. __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). 关于容量和空间的问题吗? 应该是这样的道理!
一起探讨吧!
页:
[1]