Hi Victor,
Thank you.
Now we are not getting hard fault interrupt with SVC interrupt.
We have option in IAR compiler to fill up code memory. But our requirement is to fill up unused RAM with predefined value. You have shared above example is for ROM.
How do we modify linker file for RAM (SRAM_U).
Below is linker file.
***************************************************************************************************************************
/* If symbol __flash_vector_table__=1 is defined at link time
* the interrupt vector will not be copied to RAM.
* Warning: Using the interrupt vector from FLASH will not allow
* INT_SYS_InstallHandler because the section is Read Only.
*/
define symbol __ram_vector_table_size__ = isdefinedsymbol(__flash_vector_table__) ? 0 : 0x00000400;
define symbol __ram_vector_table_offset__ = isdefinedsymbol(__flash_vector_table__) ? 0 : 0x000003FF;
/* Flash */
define symbol m_interrupts_start = 0x00010000;
define symbol m_interrupts_end = 0x000103FF;
define symbol m_flash_config_start = 0x00010400;
define symbol m_flash_config_end = 0x0001040F;
define symbol m_compd_start = 0x00010410;
define symbol m_compd_end = 0x0001042F;
define symbol m_text_start = 0x00010430;
define symbol m_text_end = 0x0003FBFF;
/* SRAM_L */
define symbol m_interrupts_ram_start = 0x1FFFC000;
define symbol m_interrupts_ram_end = 0x1FFFC000 + __ram_vector_table_offset__;
define symbol m_data_start = m_interrupts_ram_start + __ram_vector_table_size__;
define symbol m_data_end = 0x1FFFFFFF;
/* SRAM_U */
define symbol m_data_2_start = 0x20000000;
define symbol m_data_2_end = 0x20002FFF;
/*FlexRAM or EEPROM
define symbol m_eeprom_start = 0x14000000;
define symbol m_eeprom_end = 0x14000FFF;*/
/* Sizes */
if (isdefinedsymbol(__stack_size__)) {
define symbol __size_cstack__ = __stack_size__;
} else {
define symbol __size_cstack__ = 0x00000600;
}
if (isdefinedsymbol(__heap_size__)) {
define symbol __size_heap__ = __heap_size__;
} else {
define symbol __size_heap__ = 0x0000600;
}
define exported symbol __VECTOR_TABLE = m_interrupts_start;
define exported symbol __VECTOR_RAM = isdefinedsymbol(__flash_vector_table__) ? m_interrupts_start : m_interrupts_ram_start;
define exported symbol __RAM_VECTOR_TABLE_SIZE = __ram_vector_table_size__;
define memory mem with size = 4G;
define region m_flash_config_region = mem:[from m_flash_config_start to m_flash_config_end];
define region TEXT_region = mem:[from m_interrupts_start to m_interrupts_end]
| mem:[from m_text_start to m_text_end];
define region DATA_region = mem:[from m_data_start to m_data_end];
define region DATA_region_2 = mem:[from m_data_2_start to m_data_2_end-__size_cstack__];
define region CSTACK_region = mem:[from m_data_2_end-__size_cstack__+1 to m_data_2_end];
define region m_interrupts_ram_region = mem:[from m_interrupts_ram_start to m_interrupts_ram_end];
define region COMPILE_DATE = mem:[from m_compd_start to m_compd_end];
define region EEPROM_PARTNO = mem:[from 0x14000000 to 0x1400005F];
define region EEPROM_VIN = mem:[from 0x14000060 to 0x1400009F];
define region EEPROM_RESET = mem:[from 0x140000A0 to 0x140000CF];
define region EEPROM_IDLE_TIME = mem:[from 0x140000D0 to 0x140000D3];
define region EEPROM_WAKE_UP = mem:[from 0x140000D4 to 0x140000DF];
define region EEPROM_DTC = mem:[from 0x140000E0 to 0x1400056F];
define region EEPROM_HIST = mem:[from 0x14000570 to 0x14000F63];
define region EEPROM_CONFIG = mem:[from 0x14000F64 to 0x14000FFF];
define region MAGICFLAG = mem:[from 0x1FFFDFF0 size (0x00000010)];
define block CSTACK with alignment = 8, size = __size_cstack__ { };
define block HEAP with alignment = 8, size = __size_heap__ { };
define block RW { readwrite };
define block ZI { zi };
/* Custom Section Block that can be used to place data at absolute address. */
/* Use __attribute__((section (".customSection"))) to place data here. */
define block customSectionBlock { section .customSection };
define block __CODE_ROM { section .textrw_init };
define block __CODE_RAM { section .textrw };
initialize manually { section .textrw };
initialize manually { section .bss };
initialize manually { section .customSection };
initialize manually { section .data };
initialize manually { section __DLIB_PERTHREAD };
do not initialize { section .noinit, section .bss, section .data, section __DLIB_PERTHREAD, section .customSection };
place at address mem: m_interrupts_start { readonly section .intvec };
place in m_flash_config_region { section FlashConfig };
place in TEXT_region { readonly };
place in TEXT_region { block __CODE_ROM };
place in DATA_region { block RW };
place in DATA_region { block __CODE_RAM };
place in DATA_region_2 { block customSectionBlock };
place in DATA_region_2 { block ZI };
place in DATA_region_2 { last block HEAP };
place in CSTACK_region { block CSTACK };
place in m_interrupts_ram_region { section m_interrupts_ram };
place in COMPILE_DATE { section .COMPILE_DATE};
place in EEPROM_PARTNO { section .EEPROM_PARTNO_DATA};
place in EEPROM_VIN { section .EEPROM_VIN_DATA};
place in EEPROM_RESET { section .EEPROM_RESET_DATA};
place in EEPROM_IDLE_TIME { section .EEPROM_IDLE_TIME_DATA};
place in EEPROM_WAKE_UP { section .EEPROM_WAKE_UP_DATA};
place in EEPROM_DTC { section .EEPROM_DTC_DATA};
place in EEPROM_HIST { section .EEPROM_HIST_DATA};
place in EEPROM_CONFIG { section .EEPROM_CONFIG_DATA};
place in MAGICFLAG { section .MAGICFLAG};
************************************************************************************************************************************************