9. Linker Script
9.1. Memory Map
The relevant parts of the memory map of the TMS 570LC4375 for configuring the linker script are:
┌────────────────────────────────────────┬────────────┐
│ ... │ │
│ │ │
├────────────────────────────────────────┼────────────┤
│ Flash │ 0xF047FFFF │
│ (Flash ECC, OTP and EEPROM accesses) │ 0xF0000000 │
├────────────────────────────────────────┼────────────┤
│ ... │ │
│ │ │
├────────────────────────────────────────┼────────────┤
│ RAM (512KB) │ 0x0807FFFF │
│ │ 0x08000000 │
├────────────────────────────────────────┼────────────┤
│ ... │ │
│ │ │
├────────────────────────────────────────┼────────────┤
│ Flash (4MB) │ 0x003FFFFF │
│ │ 0x00000000 │
└────────────────────────────────────────┴────────────┘
The Flash bank is divided into two equally sized banks with a length of
0x200000
(i.e., FLASH_BANK_LENGTH
), i.e., the total flash size is
2 * 0x200000
.
Detail information for the Flash ECC:
┌────────────────────────────────────────┬────────────┐
│ Flash Data Space ECC │ 0xF05FFFFF │
│ │ 0xF047FFFF │
└────────────────────────────────────────┴────────────┘
9.2. Linker Script
The main linker script is found at src\app\main\linker_script_elf.cmd
.
A derived hex-linker script is found at src\app\main\linker_script_hex.cmd
.
The MEMORY
and SECTIONS
directives can be used to configure the
allocation process.
The ECC
directive can be used to configure the Error-correcting code of the
memory.
The MEMORY
directive tells the linker the location and the size of memory
blocks.
The task of the SECTIONS
directive is to tell the linker how to map input
sections into output sections, and how to place the output sections in memory,
i.e., specific sections can be placed in particular memory regions.
9.2.1. Memory Layout Configuration
Flash:
┌────────────────────────────────────────┬────────────┐
│ VECTORS_TABLE │ 0x00000000 │
│ (0x20) │ 0x0000001F │
├────────────────────────────────────────┼────────────┤
│ KERNEL_FUNCTIONS │ 0x00000020 │
│ (0x8000) │ 0x0000801F │
├────────────────────────────────────────┼────────────┤
│ FLASH │ 0x00008020 │
│ (0x3F7F20) │ 0x003FFF3F │
├────────────────────────────────────────┼────────────┤
│ VER_VERSION_INFORMATION │ 0x003FFF40 │
│ (0xC0) │ 0x003FFFFF │
└────────────────────────────────────────┴────────────┘
RAM:
┌────────────────────────────────────────┬────────────┐
│ STACKS │ 0x08000000 │
│ (0x800) │ 0x080007FF │
├────────────────────────────────────────┼────────────┤
│ KERNEL_DATA │ 0x08000800 │
│ (0x800) │ 0x08000FFF │
├────────────────────────────────────────┼────────────┤
│ RAM │ 0x08001000 │
│ (0x7E000) │ 0x0807EFFF │
├────────────────────────────────────────┼────────────┤
│ SHARED_RAM │ 0x0807F000 │
│ (0x1000) │ 0x0807FFFF │
└────────────────────────────────────────┴────────────┘
Flash ECC:
┌────────────────────────────────────────┬────────────┐
│ ECC_VECTORS_TABLE │ 0xF0400000 │
│ (0x4) │ 0xF0400003 │
├────────────────────────────────────────┼────────────┤
│ ECC_KERNEL_FUNCTIONS │ 0xF0400004 │
│ (0x1000) │ 0xF0401003 │
├────────────────────────────────────────┼────────────┤
│ ECC_FLASH │ 0xF0401004 │
│ (0x7EFE4) │ 0xF047FFE7 │
├────────────────────────────────────────┼────────────┤
│ ECC_VERSION_INFORMATION │ 0xF047FFE8 │
│ (0x18) │ 0xF047FFFF │
└────────────────────────────────────────┴────────────┘