新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式軟件開發之: 映像文件存儲器映射調整

        嵌入式軟件開發之: 映像文件存儲器映射調整

        作者: 時間:2013-09-30 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257027.htm

        通過該Scatter文件描述符,創建了一個長度為0x2000的域,該域中的所有內容用0xffffffff填充。

        注意

        所指定的域值必須以字為單位。

        · ZEROPAD 0:初始化一塊內容全為0的內存區域,并將其作為一個輸入段填充到ELF中。這樣減少了在運行時將某段內存初始化為0的操作。

        注意

        只有根執行區可以使用ZEROPAD屬性進行0初始化。對非根執行區使用ZEROPAD屬性將出現警告信息,并且忽略該屬性。

        · UNINIT:指示該段為不能被初始化為0。

        ⑤ max_size為可選的參數,如果分配給域的存儲器超過max_size字節,則它指示armlink生成錯誤。

        ⑥ -length如果指定的長度為負值,則base_address是域的結束地址。它通常與EMPTY一起使用,以表示在存儲器中變小的棧。

        當確定執行域屬性時,注意以下幾點。

        ① PI、OVERPLAY、FIXED和ABSOLUTE為并列關系屬性,某一個執行域只能為這4種屬性之一。如果沒有指定,ABSOLUTE為其默認屬性。

        ② 使用+offset格式的base_designator的執行區繼承前一個執行區的屬性(如果它是加載域中的第一個執行區,則繼承所在加載域的屬性,),或者具有ABSOLUTE屬性。

        ③ 不能為執行域顯式指定RELOC屬性。該屬性只能從前面的執行域或父區繼承才能具有RELOC屬性。

        ④ 被指定了PI或OVERLAP屬性的執行域,不能有重疊的地址范圍。但對于ABLOUTE和FIXED屬性的執行域,ARM編譯器不允許有重疊的地址范圍。

        ⑤ RW段默認使用壓縮屬性。如果不想鏈接器對該段進行壓縮,必須在Scatter文件中使用NOCOMPRESS顯示聲明。

        ⑥ UNINIT指定執行區中的ZI輸出節(如果有)不被初始化為0。使用它可以創建包含未初始化數據或I/O的執行區。

        5.輸入段描述符

        輸入段由以下部分組成。

        · 模塊名稱,如目標文件名稱、庫成員名稱或庫文件名稱。模塊名稱可以使用通配符。

        · 輸入段名稱,或輸入節屬性,如READ-ONLY或CODE。

        圖13.13顯示了輸入段描述符的基本組成。

        BNF語法為:

        input_section_description ::=

        module_select_pattern

        [(

        (+ input_section_attr | input_section_pattern)

        ([,] + input_section_attr | , input_section_pattern))*

        )]

        其語法說明如下。

        ① module_select_pattern

        這是由文字文本構成的模式。“*”通配符匹配0個或多個字符,而“?”匹配任何單個字符。匹配不區分大小寫。

        使用*.o可以匹配所有對象。使用*可以匹配所有目標文件和庫。

        當滿足下列條件之一時,鏈接器認為module_selector_pattern與輸入段匹配。

        · 包含輸入段的目標文件與module_selector_pattern匹配。

        · 包含輸入段的庫成員名稱(不帶路徑名)與module_selector_pattern匹配。

        · 從其中提取段的庫全名(包含路徑名)。如果名稱包含空格,使用通配符可以簡化搜索。例如,使用*libname.lib匹配C:lib dirlibname.lib。

        另外,ARM鏈接器支持特殊的模塊選擇程序模式“.ANY”,允許將輸入節分配給執行區,而無需考慮其父模塊。使用.ANY以任意分配方式填充執行區。

        注意

        最好不要依賴編譯程序生成的或ARM庫代碼使用的輸入段名。因為,這些名稱在每次編譯之間可以變化,例如編譯選項的改變或編譯器版本發生變化,都可能引起輸入段名稱的變化。

        ② input_section_attr

        輸入段屬性符定義了一個用逗號隔開的模式類別。該類表中的每個模式定義了輸入段名稱或輸入段屬性匹配方式。當匹配模式使用輸入段名稱時,它前面必須使用符號“+”,而符號“+”前面緊接的逗號可以省略。

        輸入段屬性不區分大小寫。可以是下列屬性之一:

        · RO-CODE;

        · RO-DATA;

        · RO,同時選擇RO-CODE和RO-DATA;

        · RW-DATA;

        · RW-CODE;

        · RW,同時選擇RW-CODE和RW-DATA;

        · ZI;

        · ENTRY,包含ENTRY點的節。

        可以識別以下同義詞:

        · CODE代表RO-CODE;

        · CONST代表RO-DATA;

        · TEXT代表RO;

        · DATA代表RW;

        · BSS代表ZI。

        可以識別以下偽屬性:

        · FIRST;

        · LAST。

        存儲器相關文章:存儲器原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 五家渠市| 鲜城| 临沭县| 喀喇沁旗| 蚌埠市| 崇义县| 枣庄市| 浦东新区| 高雄市| 巴中市| 鱼台县| 五原县| 丹巴县| 台安县| 文山县| 凌海市| 顺义区| 沂南县| 苗栗市| 化德县| 蒙城县| 贺州市| 疏附县| 富川| 探索| 吉林市| 灌南县| 通榆县| 大丰市| 磐石市| 清徐县| 阜城县| 伊宁市| 高陵县| 营山县| 柘荣县| 宁夏| 勃利县| 女性| 会泽县| 建宁县|