ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 июля
586884 Топик полностью
VVB (19.03.2015 11:28 - 11:31, просмотров: 60) ответил SciFi на Вроде бы таблица для копирования создаётся ручками в скрипте линкера:
Ну это только в gcc. GHS MULTI (он ещё и сжимает в FLASH, а потом разжимает при копировании в ОЗУ):
SECTIONS
{
    .CROM.fastcode                      CROM(.fastcode) : > flash_memory
    .fastcode           ALIGN(4)                        : > sram_memory
}
И более никаких телодвижений, линкер и системный стартапный код сами разберутся. Порядок расположения строк в линкере неважен. ARMCC:
#! armcc -E
; code upper need to use #define 

;-------------------------------------------------------------------------------------
;   Keil scatter loading file
; For LPC4357
;-------------------------------------------------------------------------------------

; Internal SRAM0
#define SRAM0_START 0x10000000
#define SRAM0_END   0x10008000
#define SRAM0_SIZE  (SRAM0_END-SRAM0_START)

; Internal SRAM1
#define SRAM1_START 0x10080000
#define SRAM1_END   0x1008A000
#define SRAM1_SIZE  (SRAM1_END-SRAM1_START)

; Internal SRAM2
#define SRAM2_START 0x20000000
#define SRAM2_END   0x20010000
#define SRAM2_SIZE  (SRAM2_END-SRAM2_START)

; SDRAM
#define SDRAM_START 0x28000000

; Internal FLASHA
#define FLASHA_START 0x1A000000
#define FLASHA_END   0x1A080000
#define FLASHA_SIZE  (FLASHA_END-FLASHA_START)

; Internal FLASHB
#define FLASHB_START 0x1B000000
#define FLASHB_END   0x1B080000
#define FLASHB_SIZE  (FLASHB_END-FLASHB_START)

LR1 FLASHA_START {
  ER1 FLASHA_START {
    startup_LPC43xx.o (RESET, +FIRST)
    startup_LPC43xx.o (+RO)
    system_LPC43xx.o (+RO)
   *(InRoot$$Sections)
    lludivv7m.o (+RO)
  }
  ER2 SRAM0_START {
    *(STACK)
    *.o (+RW +ZI)
  }

  ER3 SRAM1_START {
    *.o (+RO)
  }

  ER4 SRAM2_START {
    *(HEAP)
  }

}
И тоже более никаких телодвижений, линкер сам разберётся (построит таблицу секций) и системный стартапный код скопирует секции с RO атрибутом, не попадающие в ER1, в регион ER3 (находящийся в SRAM1_START)