1,我用的是ARM Executable Image for LPC2200模板,未添加任何代码时,ARM Linker里的Scatter选mem_c.scf,编译显示 Error:L6203E:Entry point (0x80000000)lie within non-root region ERAM 这是什么原因啊?加另外2个*.scf都是可以正常编译的
2,Startup.s中 AREA HeapTop, DATA, NOINIT top_of_heap 这段代码,声明了一个DATA, NOINIT的区域HeapTop,可似乎没分配空间给它,top_of_heap后面没跟 SPACE **, 能理解成HeapTop不占用任何空间,top_of_heap仅指向大小为0的HeapTop区域首地址么?
3,mem_c.scf中, ROM_LOAD 0x0 { //将vectors放在以0x00000000 为首地址的区域, //此区域类型为ROM_EXEC(执行ROM?),作为RO段? ROM_EXEC 0x00000000 //ROM_EXEC,IMAR都是ADS关键字? { Startup.o (vectors, +First) * (+RO) }
IRAM 0x40000000 //“IRAM”说明之后的地址是片内的RAM?此段是将MyStacks区域放在以0x40000000为首的区域? { Startup.o (MyStacks) }
//STACKS_BOTTOM +0 如何理解?是从上面的0x40000000开始,便宜MyStacks //大小,然后再偏移+0,作为StackBottom区域的首地址? //MyStacks区域占20字节,StackBottom从0x40000014开始? STACKS_BOTTOM +0 UNINIT { Startup.o (StackBottom) }
STACKS 0x40004000 UNINIT { Startup.o (Stacks) }
ERAM 0x80000000 //ERAM表明后面是外扩RAM起始地址?并将以此地址为首的区域作为RW和ZI段? { * (+RW,+ZI) }
HEAP +0 UNINIT //Heap区域从0x80000000开始?占1字节? { Startup.o (Heap) }
// AREA Heap, DATA, NOINIT // bottom_of_heap SPACE 1 HEAP_BOTTOM 0x80080000 UNINIT //将0x80080000作为HeapTop区域的首地址么? { Startup.o (HeapTop) } }
准备换2214芯片了,这样理解.scf文件是否有问题?有人能讲解下么?论坛上没找到相关的说明 |