国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

ARM的位置無關程序設計

發布時間:2010-8-20 14:33    發布者:lavida
關鍵詞: arm , 程序設計 , 位置無關
ARM處理器支持位置無關的程序設計,這種程序加載到存儲器的任意地址空間都可以正常運行,其設計方法在嵌入式應用系統開發中具有重要的作用。尤其在裸機狀態下開發Bootloader程序及進行內核初始化設計;利用位置無關的程序設計方法還可以在具體應用中用于構建高效率動態鏈接庫,因而了解位置無關的程序設計方法,有助于開發人員設計出結構簡單、清晰的應用程序。  

應用程序必須經過編譯、匯編和鏈接后才變成可執行文件,在鏈接時,要對所有目標文件進行重定位(relocation),建立符號引用規則,同時為變量、函數等分配運行地址。當程序執行時,系統必須把代碼加載到鏈接時所指定的地址空間,以保證程序在執行過程中對變量、函數等符號的正確引用,使程序正常運行。在具有操作系統的系統中,重定位過程由操作系統自動完成。  

在設計Bootloader程序時,必須在裸機環境中進行,這時Bootloader映像文件的運行地址必須由程序員設定。通常情況下,將Bootloader程序下載到ROM的0x0地址進行啟動,而在大多數應用系統中,為了快速啟動,首先將Bootloader程序拷貝到SDRAM中再運行。一般情況下,這兩者的地址并不相同,程序在SDRAM中的地址重定位過程必須由程序員完成。實際上,由于Bootloader是系統上電后要執行的第一段程序,Bootloader程序的拷貝和在這之前的所有工作都必須由其自身來完成,而這些指令都是在ROM中執行的。也就是說,這些代碼即使不在鏈接時所指定的運行時地址空間,也可以正確執行。這就是位置無關代碼,它是一段加載到任意地址空間都能正常執行的特殊代碼。  

位置無關代碼常用于以下場合:  

程序在運行期間動態加載到內存;  

程序在不同場合與不同程序組合后加載到內存(如共享的動態鏈接庫);  

在運行期間不同地址相互之間的映射(如Bootloader程序)。  

雖然在用GCC編譯時,使用-fPIC選項可為C語言產生位置無關代碼,但這并不能修正程序設計中固有的位置相關性缺陷。特別是匯編語言代碼,必須由程序員遵循一定的程序設計準則,才能保證程序的位置無關性。  

ARM程序的位置無關可執行文件PIE(PositionIndependent Executable)包括位置無關代碼PIC和位置無關數據PID(PositionIndependent Data)兩部分。  

PID主要針對可讀寫數據段(.data段),其中保存已賦初值的全局變量。為實現其位置無關性,通常使用寄存器R9作為靜態基址寄存器,使其指向該可讀寫段的首地址,并使用相對于基址寄存器的偏移量來對該段的變量進行尋址。這種方法常用于為可重入程序的多個實例產生多個獨立的數據段。在程序設計中,一般不必考慮可讀寫段的位置無關性,這主要是因為可讀寫數據主要分配在SDRAM中。  

PIC包括程序中的代碼和只讀數據(.text段),為保證程序能在ROM和SDRAM空間都能正確運行(如裸機狀態下的Bootloader程序),必須采用位置無關代碼程序設計。  

PIC遵循只讀段位置無關ROPI(ReadOnly Position Independence)的ATPCS(ARMThumb Procedure Call Standard)的程序設計規范:  

(1) 程序設計規范1  

引用同一ROPI段或相對位置固定的另一ROPI段中的符號時,必須是基于PC的符號引用,即使用相對于當前PC的偏移量來實現跳轉或進行常量訪問。  

① 位置無關的程序跳轉。在ARM匯編程序中,使用相對跳轉指令B/BL實現程序跳轉。指令中所跳轉的目標地址用基于當前PC的偏移量來表示,與鏈接時分配給地址標號的絕對地址值無關,因而代碼可以在任何位置進行跳轉,實現位置無關性。  

另外,還可使用ADR或ADRL偽指令將地址標號值讀取到PC中實現程序跳轉。這是因為ADR或ADRL等偽指令會被編譯器替換為對基于PC的地址值進行操作,但這種方式所能讀取的地址范圍較小,并且會因地址值是否為字對齊而異。  

但在ARM程序中,使用LDR等指令直接將地址標號值讀取到PC中實現程序跳轉不是位置無關的。例如:LDR PC, =main  

上面的偽指令編譯后的結果為:LDR PC, [PC, OFFSET_TO_LPOOL]  

本文地址:http://m.qingdxww.cn/thread-22814-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内自拍成人网在线视频 | 免费jjzz在在线播放国产成人 | 国产成人精品免费青青草原app | 国产麻豆精品 | 四虎影视免费永久在线观看 | 色在线导航 | 精品国产一区二区三区www | 最近韩国日本免费观看mv免费版 | 国产福利麻豆精品一区 | 麻豆精品视频在线观看 | 中文在线视频 | 久久久久久9 | 麻豆 一区 精品 在线 | 久久久久88色偷偷 | 国产精品观看视频免费完整版 | 恐怖星球在线观看完整版免费 | 精品国产福利在线观看一区 | 久久999精品 | 久草视频在线首页 | 视频91在线 | 九九视频精品全部免费播放 | chinese麻豆| 日韩欧美小视频 | 黄瓜视频色www在线观看 | 日韩视频一区二区在线观看 | 综艺在线看免费高清 | 好属妞这里只有精品久久 | 高清亚洲综合色成在线播放放 | 久久久久久久久免费视频 | 黄色在线看网站 | 朋友的母亲hd中字在线观看 | 欧美日本一区视频免费 | 欧美在线观看视频一区 | 久久综合免费视频 | 亚洲高清免费在线观看 | 91香蕉视频在线观看免费 | 一级毛片一级毛片一级毛片 | 成人在线手机视频 | 日韩欧美在| 国产羞羞事1000部在线观看 | 日韩日b视频 |