How to used ITCM:
1、startup_cm7.s
.section ".init_table", "a"
.long 6
.long __RAM_CACHEABLE_START
.long __ROM_CACHEABLE_START
.long __ROM_CACHEABLE_END
.long __RAM_NO_CACHEABLE_START
.long __ROM_NO_CACHEABLE_START
.long __ROM_NO_CACHEABLE_END
.long __RAM_SHAREABLE_START
.long __ROM_SHAREABLE_START
.long __ROM_SHAREABLE_END
.long __RAM_INTERRUPT_START
.long __ROM_INTERRUPT_START
.long __ROM_INTERRUPT_END
.long __RAM_ITCM_START
.long __ROM_ITCM_START
.long __ROM_ITCM_END
.long __RAM_DTCM_DATA_START
.long __ROM_DTCM_DATA_START
.long __ROM_DTCM_END
2、linker_flash_s32k314.ld
__shareable_data_rom_end = __shareable_data_rom + (__shareable_data_end__ - __shareable_data_start__);
.int_vector :
{
. = ALIGN(2048);
__interrupts_ram_start = .;
. += __interrupts_rom_end - __interrupts_rom_start;
. = ALIGN(4);
__interrupts_ram_end = .;
} > int_dtcm
__tcm_data_rom = __shareable_data_rom_end;
.data_tcm_data : AT(__tcm_data_rom)
{
. = ALIGN(4);
__dtcm_data_start__ = .;
*(.dtcm_data*)
. = ALIGN(4);
__dtcm_data_end__ = .;
} > int_dtcm
__tcm_data_rom_end = __tcm_data_rom + (__dtcm_data_end__ - __dtcm_data_start__);
.bss_tcm_data (NOLOAD) :
{
. = ALIGN(4);
__dtcm_bss_start__ = .;
*(.dtcm_bss*)
. = ALIGN(4);
__dtcm_bss_end__ = .;
} > int_dtcm
__tcm_code_rom_start = __tcm_data_rom_end;
.itcm_text : AT(__tcm_code_rom_start)
{
. = ALIGN(4);
__itcm_start__ = .;
*(.itcm_text*)
. = ALIGN(4);
__itcm_end__ = .;
} > int_itcm
__tcm_code_rom_end = __tcm_code_rom_start + (__itcm_end__ - __itcm_start__);
.shareable_bss (NOLOAD) :
{
. = ALIGN(16);
__shareable_bss_start = .;
*(.mcal_shared_bss)
. = ALIGN(4);
__shareable_bss_end = .;
} > int_sram_shareable
3、main.c
Hi @csr,
I sent you an example via email.
Now I see it has been discussed here already:
What kind of fault exception is it?
Can you read the CSFR register in the fault handler?
Thank you,
BR, Daniel
Hi @danielmartynek :
Thanks.Can you provide a demo based on the S32K314 chip?
补充测试情况:
1、当我新增一个函数funtion_cnt1占用0地址后,可以正常调用到funtion_cnt。不清楚系统对0地址是否有特殊用途?
.itcm_text 0x00000000 0x28 load address 0x00556e58
0x00000000 . = ALIGN (0x8)
0x00000000 __itcm_start__ = .
*(.itcm_code_text*)
0x00000000 . = ALIGN (0x8)
0x00000000 __itcm_end__ = .
.itcm_text 0x00000000 0x28 ./src/rte/YsRTEMain.o
0x00000000 funtion_cnt1
0x00000014 funtion_cnt
0x00556e58 __tcm_code_rom_end = (__tcm_code_rom_start + (__itcm_end__ - __itcm_start__))