;導入鏡像裝載域段起始地址
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在最前邊