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