;导入镜像装载域段起始地址
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
;--------------------------------------------------------------------
;------------------------------------------------------
AREA startup, CODE, READONLY
ENTRY
;系统向量表
b vectorRESET ;复位向量
b vectorUNDEF ;未定义指令
b vectorSWI ;软中断
b vectorPABT ;预取指终止
b vectorDABT ;数据终止
b . ;系统保留
b vectorIRQ ;外部中断
b vectorFIQ ;快速中断
;-------------------------------------------------------
程序的代码段可知放在Nor里运行,为什么?想想看,你的程序应该不会在运行时动态改变程序的指令吧,也就意味着只会读Nor,cpu(在有内存控制器的时候)读Nor和读RAM除了速度慢其他的没什么区别。
但是对于RW ZI 不只有读还有写,应为没法向写RAM一样的写Nor,所以RW ZI 一定要放到 RAM里(不管是SRAM还是DRAM),只有在那里程序才能写RW ZI
如何装载?
编译好的镜像处于一种“压缩”的状态。这么压缩的? 比如镜像运行时 RO从0x0 - 0x10 RW从Ox3000_0000 - 0x3000_0004 ZI 0x3000_0008 - 0x3000_000C 如果直接原样镜像,镜像文件肯定会有很大空隙,且ZI全是零完全没必要镜像下来,只要记住起始 结束地址就行了。所以镜像文件在运行前RO RW ZI 是连载一起的,且RO在最前边