;/* 分配堆栈空间 */ AREA MyStacks, DATA, NOINIT, ALIGN=2 SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;Stack spaces for Administration Mode 管理模式堆栈空间 IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;Stack spaces for Interrupt ReQuest Mode 中断模式堆栈空间 FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;Stack spaces for Fast Interrupt reQuest Mode 快速中断模式堆栈空间 AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;Stack spaces for Suspend Mode 中止义模式堆栈空间 UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;Stack spaces for Undefined Mode 未定义模式堆栈
AREA Heap, DATA, NOINIT bottom_of_heap SPACE 1
AREA StackBottom, DATA, NOINIT bottom_of_Stacks SPACE 1
AREA HeapTop, DATA, NOINIT top_of_heap
AREA Stacks, DATA, NOINIT StackUsr
这是启动代码里关于堆栈的代码.
ROM_LOAD 0x80000000 { ROM_EXEC 0x80000000 { Startup.o (vectors, +First) * (+RO) }
IRAM 0x40000000 { Startup.o (MyStacks) }
STACKS_BOTTOM +0 UNINIT { Startup.o (StackBottom) }
STACKS 0x40004000 UNINIT { Startup.o (Stacks) }
ERAM 0x80040000 { * (+RW,+ZI) }
HEAP +0 UNINIT { Startup.o (Heap) }
HEAP_BOTTOM 0x80080000 UNINIT { Startup.o (HeapTop) }
}
这个是在外部RAM中调试的分散加载文件.
问题:1.在启动代码里为什么Heap 和 StackBottom段都有一句分配一个字节的代码,而HeapTop和Stacks段没有呢? 2.分散加载文件里Startup.o (Stacks) Startup.o (HeapTop),这两个段就一个标号什么都没有呀? 3.不理解 HEAP_BOTTOM 0x80080000 UNINIT { Startup.o (HeapTop) } 怎么就能将堆顶放到0x80080000处,还有堆的大小是多少呢?
|