一般而言,一個(gè)程序包括只讀的代碼段和可讀寫的數(shù)據(jù)段。 在ARM的集成開發(fā)環(huán)境中,只讀的代碼段和常量被稱作RO段(ReadOnly); 可讀寫的全局變量和靜態(tài)變量被稱作RW段(ReadWrite); RW段中要被初始化為零的變量被稱為ZI段(ZeroInit)。 對(duì)于嵌入式系統(tǒng)而言,程序映象都是存儲(chǔ)在Flash存儲(chǔ)器等一些非易失性器件中的,而在運(yùn)行時(shí),程序中的RW段必須重新裝載到可讀寫的RAM中。這就涉及到程序的加載時(shí)域和運(yùn)行時(shí)域。簡單來說,程序的加載時(shí)域就是指程序燒入Flash中的狀態(tài),運(yùn)行時(shí)域是指程序執(zhí)行時(shí)的狀態(tài)。對(duì)于比較簡單的情況,可以在ADS集成開發(fā)環(huán)境的ARM LINKER選項(xiàng)中指定RO BASE和RW BASE,告知連接器RO和RW的連接基地址。對(duì)于復(fù)雜情況,如RO段被分成幾部分并映射到存儲(chǔ)空間的多個(gè)地方時(shí),需要?jiǎng)?chuàng)建一個(gè)稱為“分布裝載描述文件” 的文本文件,通知連接器把程序的某一部分連接在存儲(chǔ)器的某個(gè)地址空間。需要指出的是,分布裝載描述文件中的定義要按照系統(tǒng)重定向后的存儲(chǔ)器分布情況進(jìn)行。在引導(dǎo)程序完成初始化的任務(wù)后,應(yīng)該把主程序轉(zhuǎn)移到RAM中去運(yùn)行,以加快系統(tǒng)的運(yùn)行速度。 轉(zhuǎn)載自阿吳網(wǎng)志 |