在ARM設計中,一般會涉及都一個鏈接地址,這個鏈接地址和燒寫地址很容易混淆,會認為鏈接地址就是燒寫地址,這個是錯的,下面說的是個人的一些認識,可能會有一些錯誤,說的也可能不專業(yè),但是對于初學者,可以幫助理解。 首先鏈接地址和燒寫地址是兩個范疇的東西,幾乎是沒有關系的,燒寫地址,可以認為是物理地址,而鏈接地址可以認為是虛擬地址,對于程序員來說,看到的是虛擬地址,一般虛擬地址經過MMU映射成具體的物理地址,進而再去訪問實際的物理地址。
鏈接地址也可以理解成是一個符號,因為一個可執(zhí)行程序,一般要經過預編譯,編譯,匯編,鏈接三個過程,最后一個過程是鏈接,就是把前三部分產生的所有.o文件,串起來,形成一個整體的程序,所以每個.o文件上都有一些的函數或者子程序,通過給定鏈接地址,相當于是從全局出發(fā),給所有的文件中的函數,統(tǒng)一編號,起了一個“名字”,名字的范圍是0x00000000--0xFFFFFFFF,那么這個名字其實就是鏈接地址。如果MMU未打開,則鏈接地址就是物理地址,反之,則鏈接地址是映射的物理地址。
那么問題就來了,當程序開始執(zhí)行時,CPU是通過鏈接地址進行訪問具體的函數的,如果這個函數沒有存到鏈接地址映射到的物理地址那會怎么辦呢?答案是很簡單的,那就是程序會跑飛,打個比喻吧,CPU要訪問38號房間的客人,但是客人卻沒有移駕到38號,CPU又很呆,它只能亂啦,這里38號就是鏈接地址,客人就是具體的函數名。所以在使用鏈接地址時,如果未打開mmu,那么需要將程序復制到對應的物理地址處,若使用了MMU則需要將程序復制到映射對應的物理地址處。
燒寫地址就是實際的物理地址,這個是通過存儲控制器進行訪問的,而且一般的燒寫軟件可以實現指定地址處燒寫。
綜上,燒寫地址與鏈接地址有關系,但是關系不是特別明顯,對于程序員來說,用的是鏈接地址,但是需要設置濾清好鏈接地址與燒寫地址的映射關系。
評論