新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式軟件開(kāi)發(fā)之: 映像文件存儲(chǔ)器映射調(diào)整

        嵌入式軟件開(kāi)發(fā)之: 映像文件存儲(chǔ)器映射調(diào)整

        作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò) 收藏

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

        3.在代碼映像中保留空白域

        可以在Scatter中使用 EMPTY 屬性為棧保留一個(gè)空白存儲(chǔ)器塊。該存儲(chǔ)塊不構(gòu)成載入?yún)^(qū)的一部分,但指定在執(zhí)行時(shí)使用。由于它創(chuàng)建為虛 ZI區(qū),所以 armlink 使用以下符號(hào)訪問(wèn)它:

        · Image$$region_name$$ZI$$Base;

        · Image$$region_name$$ZI$$Limit;

        · Image$$region_name$$ZI$$Length。

        如果指定的長(zhǎng)度為負(fù)值,則Image$$region_name$$ZI$$Limit被視為域的結(jié)束地址。它是絕對(duì)地址,不是相對(duì)地址。下面例子顯示了如何在Scatter文件中預(yù)留一個(gè)空白區(qū)域。

        LOADREGION 0x700000 ; 加載域的起始地址在0x700000

        { ;

        STACK 0x7000000 EMPTY –0x10000 ; 該域的結(jié)束地址為0x700000,因?yàn)槠溟L(zhǎng)度為負(fù)

        ;

        region

        ;

        {

        ; 預(yù)留空白區(qū)放置棧

        }

        HEAP +0 EMPTY 0x10000 ; 棧的起始地址在上個(gè)預(yù)留區(qū)域介紹地址

        ;

        ;

        {

        ; 預(yù)留空白區(qū)域放置堆

        }

        ; rest of scatter description...

        }

        在上面的例子中定義了一個(gè)執(zhí)行域STACK 0x7000000 EMPTY -0x10000,它從地址 (0x7000000-0x1000)開(kāi)始,在地址0x7000000結(jié)束。

        在此示例中,鏈接程序生成符號(hào):

        Image$$STACK$$ZI$$Base = 0x6ff0000

        Image$$STACK$$ZI$$Limit = 0x7000000

        Image$$STACK$$ZI$$Length = 0x1000

        Image$$HEAP$$ZI$$Base = 0x7000000

        Image$$HEAP$$ZI$$Limit = 0x7010000

        Image$$HEAP$$ZI$$Length = 0x1000

        EMPTY屬性僅適用于執(zhí)行區(qū)。如果在載入?yún)^(qū)定義中使用EMPTY屬性,則鏈接程序生成警告信息并忽略該屬性。鏈接程序檢查用于EMPTY區(qū)的地址空間不與任何其他執(zhí)行區(qū)重疊。

        4.使用OVERLAY關(guān)鍵字

        在ARM以前的編譯器中,沒(méi)有提供地址空間的重疊管理。如果有運(yùn)行時(shí)域地址空間重疊,需要用戶自己提供地址空間重疊的管理機(jī)制。但在RVDS的編譯器中,提供了運(yùn)行時(shí)域?qū)傩躁P(guān)鍵字OVERLAY,用戶可以使用該關(guān)鍵字生成自己的重疊空間。

        下面例子顯示了如何使用OVERLAY關(guān)鍵字,生成運(yùn)行時(shí)域的重疊空間。

        LOADREG 0x8000

        {

        ;

        STATIC_RAM 0x0 ; 靜態(tài)RAM區(qū),包含大部分的RW和ZI

        {

        * (+RW,+ZI)

        }

        OVERLAY_A_RAM 0x1000 OVERLAY ; 重疊區(qū)...

        {

        module1.o (+RW,+ZI)

        }

        OVERLAY_B_RAM 0x1000 OVERLAY

        {

        module2.o (+RW,+ZI)

        }

        ;

        }

        5.在Scatter文件中使用預(yù)處理偽操作

        可用在Scatter文件的第一行加上需要編譯器進(jìn)行預(yù)處理的操作。語(yǔ)法格式如下所示。

        #! preprocessor> [pre_processor_flags]

        LOAD_FLASH ( 0x8000 + ( 0x2 * 0x400 )) ;

        例如:

        #! armcc -E

        聯(lián)接器可以對(duì)預(yù)處理的表達(dá)式進(jìn)行簡(jiǎn)單的計(jì)算,可以識(shí)別簡(jiǎn)單的運(yùn)算符如+、-、×、/、AND和OR,如:

        #define AN_ADDRESS (BASE_ADDRESS+(ALIAS_NUMBER*ALIAS_SIZE))

        同時(shí),也可以在Scatter文件頭加一些預(yù)處理的偽操作,如:

        #define ADDRESS 0x20000000

        #include include_file_1.h

        #define BASE_ADDRESS 0x8000

        #define ALIAS_NUMBER 0x2

        #define ALIAS_SIZE 0x400

        在Scatter文件中,使用預(yù)處理的更詳細(xì)的信息,請(qǐng)參見(jiàn)ARM相關(guān)文件。

        存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 济阳县| 临邑县| 东乌| 屯昌县| 西丰县| 正安县| 昭平县| 资中县| 庆云县| 沅江市| 哈尔滨市| 章丘市| 五峰| 资中县| 大同县| 玉林市| 沈阳市| 旺苍县| 五河县| 柞水县| 罗城| 宣城市| 怀化市| 延长县| 成安县| 蕲春县| 堆龙德庆县| 益阳市| 广州市| 县级市| 西城区| 开鲁县| 繁昌县| 武强县| 抚顺市| 岳普湖县| 延川县| 西安市| 修水县| 东山县| 无极县|