色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          本文引用地址:http://cafeforensic.com/article/257027.htm

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

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

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

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

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

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

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

          { ;

          STACK 0x7000000 EMPTY –0x10000 ; 該域的結束地址為0x700000,因為其長度為負

          ;

          region

          ;

          {

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

          }

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

          ;

          ;

          {

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

          }

          ; rest of scatter description...

          }

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

          在此示例中,鏈接程序生成符號:

          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ū)。如果在載入區(qū)定義中使用EMPTY屬性,則鏈接程序生成警告信息并忽略該屬性。鏈接程序檢查用于EMPTY區(qū)的地址空間不與任何其他執(zhí)行區(qū)重疊。

          4.使用OVERLAY關鍵字

          在ARM以前的編譯器中,沒有提供地址空間的重疊管理。如果有運行時域地址空間重疊,需要用戶自己提供地址空間重疊的管理機制。但在RVDS的編譯器中,提供了運行時域屬性關鍵字OVERLAY,用戶可以使用該關鍵字生成自己的重疊空間。

          下面例子顯示了如何使用OVERLAY關鍵字,生成運行時域的重疊空間。

          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文件中使用預處理偽操作

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

          #! preprocessor> [pre_processor_flags]

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

          例如:

          #! armcc -E

          聯(lián)接器可以對預處理的表達式進行簡單的計算,可以識別簡單的運算符如+、-、×、/、AND和OR,如:

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

          同時,也可以在Scatter文件頭加一些預處理的偽操作,如:

          #define ADDRESS 0x20000000

          #include include_file_1.h

          #define BASE_ADDRESS 0x8000

          #define ALIAS_NUMBER 0x2

          #define ALIAS_SIZE 0x400

          在Scatter文件中,使用預處理的更詳細的信息,請參見ARM相關文件。

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




          評論


          相關推薦

          技術專區(qū)

          關閉