1.位置有關編碼
在設計乙個程式時,會給這個程式指定乙個執行位址(鏈結位址)。就是說我們在編譯程式時其實心裡是知道我們程式將來被執行時的位址(執行位址)的,而且必須給編譯器鏈結器指定這個位址(鏈結位址)才行。最後得到的二進位制程式理論上是和你指定的執行位址有關的,將來這個程式被執行時必須放在當時編譯鏈結時給定的那個位址(鏈結位址)下才行,否則不能執行(就叫位置有關**)。但是
有個別特別的指令他可以跟指定的位址(鏈結位址)沒有關係,也就是說這些**實際執行時不管放在**都能正常執行。
對比:位置無關**要好一些,適應性強,放在**都能正常執行;位置有關**就必須執行在鏈結時指定的位址上,適應性差。位置無關碼有一些限制,不能完成所有功能,有時候不得不使用位置有關**。
2.鏈結位址和執行位址
3. s5pv210的啟動過程
4. 為什麼需要重定位
5. 從原始碼到可執行程式的步驟
預編譯:預編譯器執行。譬如c中的巨集定義就是由預編譯器處理,注釋等也是由預編譯器處理的。
編譯:編譯器來執行。把原始碼.c .s編成機器碼.o檔案。
strip: strip是把可執行程式中的符號資訊給拿掉,以節省空間。(debug版本和release版本)
objcopy:由可執行程式生成可燒錄的映象bin檔案。
6.程式段
後天性段名:
段名由程式設計師自己定義,段的屬性和特徵也由程式設計師自己定義。
舉例 7. 鏈結指令碼作用
8. 重定位
SDRAM和重定位
sdram和重定位 段 段通常是指用來存放程式執行 的一塊記憶體區域,這部分區域的大小在程式執行前就已經確定,並且記憶體區域通常屬於唯讀。也有可能包含一些唯讀的常數變數,例如字串常量等。資料段 用來存放程式中已初始化的全域性變數的一塊記憶體區域,屬於靜態記憶體分配。bss段 用來存放程式中未初始化的...
5 SDRAM和重定位relocate
看門狗 watch dog timer看門狗定時器 大家想象這樣乙個場景 家門口有乙隻狗,這只狗定時會餓 譬如說2小時一餓 狗餓了會胡亂咬死人。人進進出出要想保證安全必須提前餵狗 必須在上次喂過後的2小時內餵狗才行 如果超時沒餵狗就會被咬死。如果提前餵狗沒關係,但是本次餵狗時間就會從這裡開始計算。看...
重定位和鏈結
鏈結和重定位是嵌入式c中很重要的部分,對於這一塊掌握的越精細越好。指令分為兩種 在程式設計編譯鏈結過程會給程式乙個執行位址,而且必須給編譯聯結器指定這個位址,最後得到的二進位制程式是和指定的鏈結位址相關的,這個位址叫做 鏈結位址 所以我們在程式編譯時其實就已經知道程式將來執行時的位址,這個位址叫做 ...