这里会显示出您选择的修订版和当前版本之间的差别。
jaysnote:iar_icf [2019/01/15 16:32] jaylee 创建 |
jaysnote:iar_icf [2021/06/22 23:14] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | < | ||
- | |||
- | # 详解cc26xx_timac_stack_release.icf文件 # | ||
- | * 关于语法帮助查看IAR Help Compiler reference -> Linking Consideration | ||
- | * 关于内存空间映射查看[CPU Domain Memory Map ](C:/ | ||
- | |||
- | ``` | ||
- | / | ||
- | Filename: | ||
- | Revised: | ||
- | Revision: | ||
- | |||
- | Description: | ||
- | |||
- | Note: Code stack and heap are allocated by the Application/ | ||
- | |||
- | Imported Symbols | ||
- | Note: Linker defines are located in the IAR IDE project using --config_def | ||
- | in Options-> | ||
- | Config-> | ||
- | |||
- | CCxxxx: | ||
- | FLASH_ONLY_BUILD: | ||
- | FLASH_ROM_BUILD: | ||
- | ROM_BUILD: | ||
- | COMMON_ROM_BUILD: | ||
- | TEST_ROM_IN_FLASH: | ||
- | ICALL_STACK0_ADDR: | ||
- | ICALL_RAM0_ADDR: | ||
- | |||
- | Exported Symbols | ||
- | Note: Can be used as externs in C code. | ||
- | |||
- | ROM_BASE_ADDR: | ||
- | RAM_BASE_ADDR: | ||
- | COMMON_RAM_BASE_ADDR: | ||
- | PAGE_SIZE: | ||
- | NUM_SNV_PAGES: | ||
- | |||
- | |||
- | *******************************************************************************/ | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Memory Sizes | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Chameleon | ||
- | if ( isdefinedsymbol(CC2650) ) // | ||
- | { | ||
- | define symbol RAM_SIZE | ||
- | define symbol FLASH_SIZE | ||
- | define symbol ROM_SIZE | ||
- | } | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Default | ||
- | else | ||
- | { | ||
- | define symbol RAM_SIZE | ||
- | define symbol FLASH_SIZE | ||
- | define symbol ROM_SIZE | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Memory Definitions | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // CM3 FW | ||
- | // | ||
- | define symbol FW_START | ||
- | define symbol FW_END | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // ROM | ||
- | // | ||
- | if ( isdefinedsymbol(COMMON_ROM_BUILD) ) // | ||
- | { | ||
- | if ( isdefinedsymbol(TEST_ROM_IN_FLASH) ) | ||
- | { | ||
- | define symbol ROM_START | ||
- | define symbol ROM_END | ||
- | } | ||
- | else // ROM code is in ROM memory | ||
- | { | ||
- | // | ||
- | // | ||
- | // Physical | ||
- | // Description | ||
- | // Physical | ||
- | // Description | ||
- | |||
- | define symbol ROM_START | ||
- | define symbol ROM_END | ||
- | ``` | ||
- | |||
- | ``` | ||
- | } | ||
- | } | ||
- | else if ( isdefinedsymbol(ROM_BUILD) ) | ||
- | { | ||
- | if ( isdefinedsymbol(TEST_ROM_IN_FLASH) ) | ||
- | { | ||
- | define symbol ROM_START | ||
- | define symbol ROM_END | ||
- | } | ||
- | else // ROM code is in ROM memory | ||
- | { | ||
- | //Address offset | ||
- | // | ||
- | define symbol ROM_START | ||
- | define symbol ROM_END | ||
- | |||
- | } | ||
- | } | ||
- | else // not a ROM build | ||
- | { | ||
- | define symbol ROM_START | ||
- | define symbol ROM_END | ||
- | } | ||
- | |||
- | // export the ROM base address | ||
- | if ( isdefinedsymbol(ROM_BUILD) || isdefinedsymbol(COMMON_ROM_BUILD) ) | ||
- | { | ||
- | define symbol ROM_BASE_ADDR | ||
- | export symbol ROM_BASE_ADDR; | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // RAM | ||
- | // | ||
- | if ( isdefinedsymbol(FLASH_ONLY_BUILD) ) // | ||
- | { | ||
- | if ( isdefinedsymbol(ICALL_RAM0_ADDR) ) | ||
- | { | ||
- | define symbol RAM_START | ||
- | } | ||
- | else // default | ||
- | { | ||
- | define symbol RAM_START | ||
- | } | ||
- | |||
- | if ( isdefinedsymbol(CC2650) ) | ||
- | { | ||
- | define symbol RAM_END | ||
- | } | ||
- | else // default | ||
- | { | ||
- | define symbol RAM_END | ||
- | } | ||
- | } | ||
- | else if ( isdefinedsymbol(COMMON_ROM_BUILD) ) // | ||
- | { | ||
- | if ( isdefinedsymbol(CC2650) ) | ||
- | { | ||
- | define symbol RAM_START | ||
- | define symbol RAM_END | ||
- | } | ||
- | else // default | ||
- | { | ||
- | define symbol RAM_START | ||
- | define symbol RAM_END | ||
- | } | ||
- | |||
- | define symbol COMMON_RAM_BASE_ADDR = RAM_START; | ||
- | export symbol COMMON_RAM_BASE_ADDR; | ||
- | } | ||
- | else if ( isdefinedsymbol(ROM_BUILD) ) // | ||
- | { | ||
- | if ( isdefinedsymbol(CC2650) ) | ||
- | { | ||
- | define symbol RAM_START | ||
- | define symbol RAM_END | ||
- | } | ||
- | else | ||
- | { | ||
- | define symbol RAM_START | ||
- | define symbol RAM_END | ||
- | } | ||
- | |||
- | define symbol RAM_BASE_ADDR | ||
- | export symbol RAM_BASE_ADDR; | ||
- | } | ||
- | else if ( isdefinedsymbol(FLASH_ROM_BUILD) ) | ||
- | { | ||
- | if ( isdefinedsymbol(CC2650) ) | ||
- | { | ||
- | if ( isdefinedsymbol(ICALL_RAM0_ADDR) ) | ||
- | { | ||
- | define symbol RAM_START | ||
- | } | ||
- | else | ||
- | { | ||
- | define symbol RAM_START | ||
- | } | ||
- | define symbol RAM_END | ||
- | } | ||
- | else | ||
- | { | ||
- | if ( isdefinedsymbol(ICALL_RAM0_ADDR) ) | ||
- | { | ||
- | define symbol RAM_START | ||
- | } | ||
- | else | ||
- | { | ||
- | define symbol RAM_START | ||
- | } | ||
- | define symbol RAM_END | ||
- | } | ||
- | } | ||
- | else // unknown build | ||
- | { | ||
- | define symbol RAM_START | ||
- | define symbol RAM_END | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Flash | ||
- | // | ||
- | define symbol PAGE_SIZE | ||
- | export symbol PAGE_SIZE; | ||
- | |||
- | define symbol NUM_RESERVED_PAGES | ||
- | define symbol RESERVED_SIZE | ||
- | |||
- | define symbol NUM_SNV_PAGES | ||
- | export symbol NUM_SNV_PAGES; | ||
- | |||
- | define symbol SNV_SIZE | ||
- | |||
- | define symbol SNV_START | ||
- | define symbol SNV_END | ||
- | if ( isdefinedsymbol(FLASH_ONLY_BUILD) ) | ||
- | { | ||
- | if ( isdefinedsymbol(ICALL_STACK0_ADDR) ) | ||
- | { | ||
- | define symbol FLASH_START | ||
- | } | ||
- | else // default | ||
- | { | ||
- | define symbol FLASH_START | ||
- | } | ||
- | |||
- | define symbol FLASH_END | ||
- | } | ||
- | else if ( isdefinedsymbol(ROM_ONLY_BUILD) || isdefinedsymbol(COMMON_ROM_BUILD) ) | ||
- | { | ||
- | define symbol FLASH_START | ||
- | define symbol FLASH_END | ||
- | } | ||
- | else if ( isdefinedsymbol(FLASH_ROM_BUILD) ) | ||
- | { | ||
- | if ( isdefinedsymbol(ICALL_STACK0_ADDR) ) | ||
- | { | ||
- | define symbol FLASH_START | ||
- | } | ||
- | else // default | ||
- | { | ||
- | define symbol FLASH_START | ||
- | } | ||
- | |||
- | if ( isdefinedsymbol(TEST_ROM_IN_FLASH) ) | ||
- | { | ||
- | define symbol FLASH_END | ||
- | } | ||
- | else // ROM code is in ROM memory | ||
- | { | ||
- | define symbol FLASH_END | ||
- | } | ||
- | } | ||
- | else // unknown build | ||
- | { | ||
- | define symbol FLASH_START | ||
- | define symbol FLASH_END | ||
- | } | ||
- | |||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // ROM Revision Number | ||
- | // | ||
- | if ( isdefinedsymbol(ROM_BUILD) || isdefinedsymbol(COMMON_ROM_BUILD) ) | ||
- | { | ||
- | define symbol ROM_CRC_SIZE | ||
- | define symbol ROM_REV_SIZE | ||
- | define symbol ROM_REV_START | ||
- | define symbol ROM_REV_END | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Memory Regions | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | define memory mem with size = 4G; | ||
- | |||
- | define region FW = mem:[from FW_START | ||
- | define region ROM = mem:[from ROM_START | ||
- | define region FLASH = mem:[from FLASH_START to FLASH_END]; | ||
- | define region RAM = mem:[from RAM_START | ||
- | define region SNV_FLASH = mem:[from SNV_START | ||
- | |||
- | if ( isdefinedsymbol(ROM_BUILD) || isdefinedsymbol(COMMON_ROM_BUILD) ) | ||
- | { | ||
- | define region ROM_REV = mem:[from ROM_REV_START to ROM_REV_END]; | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Flash Software Entry Point | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | if ( isdefinedsymbol(FLASH_ONLY_BUILD) || isdefinedsymbol(FLASH_ROM_BUILD) ) | ||
- | { | ||
- | place at start of FLASH { readonly section EntrySection }; | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Memory Placement | ||
- | // For ROM: C Runtime, Checksum, ROM Revision Number, Flash JT, and FPB. | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | if ( isdefinedsymbol(ROM_BUILD) || isdefinedsymbol(COMMON_ROM_BUILD) ) | ||
- | { | ||
- | place in ROM { readonly }; | ||
- | place in RAM { readwrite }; | ||
- | |||
- | // ROM C Runtime Routine | ||
- | place at start of ROM { ro section .romRuntimeInit }; | ||
- | keep { section .romRuntimeInit }; | ||
- | |||
- | // Checksum | ||
- | place at end of ROM { ro section .checksum }; | ||
- | keep { section .checksum }; | ||
- | |||
- | // ROM Revision Number | ||
- | place at start of ROM_REV { ro section .rom_rev }; | ||
- | keep { section .rom_rev }; | ||
- | |||
- | // ICall Functions and R2F and R2R Flash Jump Table Location Pointers | ||
- | place at start of RAM { section .ramInitTable }; | ||
- | keep { section .ramInitTable }; | ||
- | } | ||
- | else // !ROM_BUILD && !COMMON_ROM_BUILD | ||
- | { | ||
- | place in FLASH { readonly }; | ||
- | place in RAM { readwrite }; | ||
- | |||
- | // Simple NV | ||
- | define block .snv_mem with size=SNV_SIZE, | ||
- | place at start of SNV_FLASH { block .snv_mem }; | ||
- | keep { ro section .snv_mem }; | ||
- | |||
- | //if ( isdefinedsymbol(FLASH_ROM_BUILD) ) | ||
- | //{ | ||
- | // // FPB Flash Address Table | ||
- | // place at address mem: | ||
- | // keep { section FPB_FLS_ADDR_TBL object FPB.o }; | ||
- | |||
- | // // FPB Opcode Table | ||
- | // place at start of RAM { section FPB_RAM_OPCODE_TBL }; | ||
- | //} | ||
- | } | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | // Initialization | ||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | if ( isdefinedsymbol(ROM_BUILD) || isdefinedsymbol(COMMON_ROM_BUILD) ) | ||
- | { | ||
- | initialize by copy { readwrite }; | ||
- | } | ||
- | else | ||
- | { | ||
- | initialize by copy with packing = packbits { readwrite }; | ||
- | } | ||
- | |||
- | do not initialize | ||
- | { | ||
- | section .noinit, | ||
- | section .stack, | ||
- | }; | ||
- | |||
- | //////////////////////////////////////////////////////////////////////////////// | ||
- | |||
- | ``` | ||
- | |||
- | </ | ||