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\app.cmd. A derived hex-linker script is found at src\app\main\app_hex.cmd. The linker script for the bootloader is found at src\bootloader\main\bootloader.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 For App

Flash:

┌───────────────────────────────────────────────┬────────────┐
│              VECTORS_TABLE                    │ 0x0001FFE0 │
│              (0x20)                           │ 0x0001FFFF │
├───────────────────────────────────────────────┼────────────┤
│              VER_VERSION_INFORMATION          │ 0x00020000 │
│              (0xC0)                           │ 0x000200BF │
├───────────────────────────────────────────────┼────────────┤
│              KERNEL_FUNCTIONS                 │ 0x000200C0 │
│              (0x8000)                         │ 0x000280BF │
├───────────────────────────────────────────────┼────────────┤
│              APP_FLASH                        │ 0x000280C0 │
│              (0x3D7F40)                       │ 0x003FFFFF │
└───────────────────────────────────────────────┴────────────┘

RAM:

┌───────────────────────────────────────────────┬────────────┐
│              STACKS                           │ 0x08000000 │
│              (0x800)                          │ 0x080007FF │
├───────────────────────────────────────────────┼────────────┤
│              KERNEL_DATA                      │ 0x08000800 │
│              (0x800)                          │ 0x08000FFF │
├───────────────────────────────────────────────┼────────────┤
│              RAM                              │ 0x08001000 │
│              (0x7D000)                        │ 0x0807DFFF │
├───────────────────────────────────────────────┼────────────┤
│              SHARED_RAM                       │ 0x0807E000 │
│              (0x2000)                         │ 0x0807FFFF │
└───────────────────────────────────────────────┴────────────┘

Flash ECC:

┌───────────────────────────────────────────────┬────────────┐
│              ECC_VECTORS_TABLE                │ 0xF0403FFC │
│              (0x4)                            │ 0xF0403FFF │
├───────────────────────────────────────────────┼────────────┤
│              ECC_VERSION_INFORMATION          │ 0xF0404000 │
│              (0x18)                           │ 0xF0404017 │
├───────────────────────────────────────────────┼────────────┤
│              ECC_KERNEL_FUNCTIONS             │ 0xF0404018 │
│              (0x1000)                         │ 0xF0405017 │
├───────────────────────────────────────────────┼────────────┤
│              ECC_APP_FLASH                    │ 0xF0405018 │
│              (0x7AFE8)                        │ 0xF047FFFF │
└───────────────────────────────────────────────┴────────────┘

9.2.2. Memory Layout Configuration For Bootloader

Flash:

┌───────────────────────────────────────────────┬────────────┐
│              VECTORS_TABLE_INIT               │ 0x00000000 │
│              (0x20)                           │ 0x0000001F │
├───────────────────────────────────────────────┼────────────┤
│              BOOTLOADER                       │ 0x00000020 │
│              (0x17FE0)                        │ 0x00017FFF │
├───────────────────────────────────────────────┼────────────┤
│              PROGRAM_INFO_AREA                │ 0x00018000 │
│              (0x7FE0)                         │ 0x0001FFDF │
├───────────────────────────────────────────────┼────────────┤
│              VECTORS_TABLE                    │ 0x0001FFE0 │
│              (0x20)                           │ 0x0001FFFF │
├───────────────────────────────────────────────┼────────────┤
│              PROGRAM_PLACE_HOLDER             │ 0x00020000 │
│              (0x3E0000)                       │ 0x003FFFFF │
└───────────────────────────────────────────────┴────────────┘

RAM:

┌───────────────────────────────────────────────┬────────────┐
│              STACK                            │ 0x08000000 │
│              (0x10000)                        │ 0x0800FFFF │
├───────────────────────────────────────────────┼────────────┤
│              RAM                              │ 0x08010000 │
│              (0x20000)                        │ 0x0802FFFF │
├───────────────────────────────────────────────┼────────────┤
│              RAM_FLASH                        │ 0x08030000 │
│              (0x40000)                        │ 0x0806FFFF │
├───────────────────────────────────────────────┼────────────┤
│              RAM_FLASH_API                    │ 0x08070000 │
│              (0x10000)                        │ 0x0807FFFF │
└───────────────────────────────────────────────┴────────────┘

Flash ECC:

┌───────────────────────────────────────────────┬────────────┐
│              ECC_VECTORS_TABLE_INIT           │ 0xF0400000 │
│              (0x4)                            │ 0xF0400003 │
├───────────────────────────────────────────────┼────────────┤
│              ECC_BOOTLOADER                   │ 0xF0400004 │
│              (0x2FFC)                         │ 0xF0402FFF │
├───────────────────────────────────────────────┼────────────┤
│              ECC_PROGRAM_INFO_AREA            │ 0xF0403000 │
│              (0xFFC)                          │ 0xF0403FFB │
├───────────────────────────────────────────────┼────────────┤
│              ECC_VECTORS_TABLE                │ 0xF0403FFC │
│              (0x4)                            │ 0xF0403FFF │
├───────────────────────────────────────────────┼────────────┤
│              ECC_PROGRAM_PLACE_HOLDER         │ 0xF0404000 │
│              (0x7C000)                        │ 0xF047FFFF │
└───────────────────────────────────────────────┴────────────┘

9.2.3. Total Memory Layout After Uploading the App Using the Bootloader

Flash:

┌───────────────────────────────────────────────┬────────────┐
│              VECTORS_TABLE_INIT               │ 0x00000000 │
│              (0x20)                           │ 0x0000001F │
├───────────────────────────────────────────────┼────────────┤
│              BOOTLOADER                       │ 0x00000020 │
│              (0x17FE0)                        │ 0x00017FFF │
├───────────────────────────────────────────────┼────────────┤
│              PROGRAM_INFO_AREA                │ 0x00018000 │
│              (0x7FE0)                         │ 0x0001FFDF │
├───────────────────────────────────────────────┼────────────┤
│              VECTORS_TABLE                    │ 0x0001FFE0 │
│              (0x20)                           │ 0x0001FFFF │
├───────────────────────────────────────────────┼────────────┤
│              VER_VERSION_INFORMATION          │ 0x00020000 │
│              (0xC0)                           │ 0x000200BF │
├───────────────────────────────────────────────┼────────────┤
│              KERNEL_FUNCTIONS                 │ 0x000200C0 │
│              (0x8000)                         │ 0x000280BF │
├───────────────────────────────────────────────┼────────────┤
│              APP_FLASH                        │ 0x000280C0 │
│              (0x3D7F40)                       │ 0x003FFFFF │
└───────────────────────────────────────────────┴────────────┘

RAM:

┌───────────────────────────────────────────────┬────────────┐
│              STACKS                           │ 0x08000000 │
│              (0x800)                          │ 0x080007FF │
├───────────────────────────────────────────────┼────────────┤
│              KERNEL_DATA                      │ 0x08000800 │
│              (0x800)                          │ 0x08000FFF │
├───────────────────────────────────────────────┼────────────┤
│              RAM                              │ 0x08001000 │
│              (0x7D000)                        │ 0x0807DFFF │
├───────────────────────────────────────────────┼────────────┤
│              SHARED_RAM                       │ 0x0807E000 │
│              (0x2000)                         │ 0x0807FFFF │
└───────────────────────────────────────────────┴────────────┘

Flash ECC:

┌───────────────────────────────────────────────┬────────────┐
│              ECC_VECTORS_TABLE_INIT           │ 0xF0400000 │
│              (0x4)                            │ 0xF0400003 │
├───────────────────────────────────────────────┼────────────┤
│              ECC_BOOTLOADER                   │ 0xF0400004 │
│              (0x2FFC)                         │ 0xF0402FFF │
├───────────────────────────────────────────────┼────────────┤
│              ECC_PROGRAM_INFO_AREA            │ 0xF0403000 │
│              (0xFFC)                          │ 0xF0403FFB │
├───────────────────────────────────────────────┼────────────┤
│              ECC_VECTORS_TABLE                │ 0xF0403FFC │
│              (0x4)                            │ 0xF0403FFF │
├───────────────────────────────────────────────┼────────────┤
│              ECC_VERSION_INFORMATION          │ 0xF0404000 │
│              (0x18)                           │ 0xF0404017 │
├───────────────────────────────────────────────┼────────────┤
│              ECC_KERNEL_FUNCTIONS             │ 0xF0404018 │
│              (0x1000)                         │ 0xF0405017 │
├───────────────────────────────────────────────┼────────────┤
│              ECC_APP_FLASH                    │ 0xF0405018 │
│              (0x7AFE8)                        │ 0xF047FFFF │
└───────────────────────────────────────────────┴────────────┘