新聞中心

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

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

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

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

        2.為執行域確定固定地址

        可以在執行區描述中使用FIXED屬性來創建根區,該根區在固定地址載入和執行。

        FIXED可以用于在單一加載域內(因此通常用于單個ROM設備)創建多個根區。

        例如,使用FIXED屬性將函數或數據塊(如常數表或校驗和)放在ROM中的固定地址,這樣就可以使用指針很方便的對其進行訪問。

        下面的例子顯示了如何放置單個目標內容。

        LOADREG1 0x0 0x10000

        {

        EXECREG1 0x0 0x1000 ;啟動域,包含初始化代碼

        { ;將初始化代碼放在0x0地址

        init.o (Init, +FIRST)

        * (+RO) ;隨后排放余下的只讀數據

        }

        RAM 0x400000 0x2000 ;將可讀可寫數據放在0x400000地址

        {

        * (+RW +ZI)

        }

        DATABLOCK 0x4FF00 FIXED 0xFF ;執行域放在 0x4FF00地址

        { ;限制該域的最大長度為 0xFF

        data.o(+RO-DATA) ;將只讀數據放在0x1FF00 和 0x1FFFF之間

        }

        }

        通過上面的Scatter文件,可以將初始化代碼放在0x0處,其后是其他RO代碼和除了data.o對象中的RO數據之外的所有RO數據;所有全局的RW變量放在RAM中0x400000處;最好將data.o的RO-DATA只讀數據表放在地址0x4FF00處,并指定其最大長度為0xFF。

        上例將代碼或數據對象放在其各自的源文件中,然后放置目標文件域,這些操作方式是ARM公司建議的標準編碼方式。為方便起見,可以使用編譯指示#pragma和分散載入描述文件放置已命名的域。下面的例子創建模塊dump.c并顯式命名域。

        // file dump.c

        int a = 10; // 放入數據域

        short b[100]; // 放入bss段

        int const c[3] = {1,2,3}; // 放入.constdata段

        int func1(int a) {return a*1;} // 放入.text段

        #pragma arm section rwdata = foo, code =foo

        int x = 5; // 在foo的數據域

        char *s = abc; // s3在code段, abc 在 .constdata

        int func2(int x) {return x+1;} // 放入foo的.text段

        #pragma arm section code, rwdata // 返回

        使用下面的Scatter文件指定上面的代碼在內存中的放置位置。如果代碼和數據段的名稱相同,則首先放置代碼段。

        FLASH 0x10000000 0x2000000

        {

        FLASH 0x10000000 0x2000000

        {

        init.o (Init, +First) ; 放置初始化代碼

        * (+RO) ;

        }

        RAM 0x0000

        {

        vectors.o (Vect, +First) ; 放置向量表

        * (+RW,+ZI) ;

        }

        DUMP 0x08000000

        {

        dump.o (foo) ;

        }

        }

        通過上面的Scatter文件,將init中的初始化段放在0x10000000地址,并將除foo外的只讀數據func1和c[]放在該初始段的后面;接下來的執行域RAM放置向量表;最后的DUMP域放置由#pragma指定的段dump。

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




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 涞水县| 宁晋县| 冀州市| 拜城县| 义乌市| 漳浦县| 西林县| 隆昌县| 大关县| 沙洋县| 来凤县| 方正县| 克拉玛依市| 乌兰浩特市| 方山县| 永顺县| 济阳县| 岳普湖县| 呼和浩特市| 银川市| 凤城市| 岳池县| 永昌县| 昌黎县| 微山县| 揭东县| 会东县| 纳雍县| 九龙坡区| 岗巴县| 中宁县| 东城区| 繁峙县| 辽中县| 安图县| 建水县| 张家界市| 磐安县| 邮箱| 陆川县| 惠安县|