Aurix 多核链接文件 lsl --- 下篇
/* 接上篇 */
/*首先认识一下缩写
默认sections
.text 代码section
.data 需要初始化的数据
.bss 不需要初始化的数据
.rodata 存储的只读数据
.version_info 编译器相关信息
/*什么是小地址,flash 逐步细分分区
flash ->segment -> sector ->paragraph ->sections,
这里的sections 就是小地址 (个人理解,可能有误)*/
小地址sections
.sdata 需要初始化的数据
.sbss 不需要初始化的数据
.sdata2 存储的只读数据
绝对地址sections
.zdata 需要初始化的数据,可以存放在绝对的地址里面
.zbss 不需要初始化的数据,可以存放在绝对的地址里面
.zrodata 只读数据,可以存放在绝对的地址里面
*/
/*根据上面注释, 理解下面把对应的数据放在对应的区域里*/
/*Near Abbsolute Addressable Data Sections*/
section_layout :vtc:abs18
{
/*Near Absolute Data, selectable with patterns and user defined sections*/
group
{
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram5)
{
select "(.zdata.zdata_cpu5|.zdata.zdata_cpu5.*)";
select "(.zbss.zbss_cpu5|.zbss.zbss_cpu5.*)";
}
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram4)
{
select "(.zdata.zdata_cpu4|.zdata.zdata_cpu4.*)";
select "(.zbss.zbss_cpu4|.zbss.zbss_cpu4.*)";
}
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram3)
{
select "(.zdata.zdata_cpu3|.zdata.zdata_cpu3.*)";
select "(.zbss.zbss_cpu3|.zbss.zbss_cpu3.*)";
}
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram2)
{
select "(.zdata.zdata_cpu2|.zdata.zdata_cpu2.*)";
select "(.zbss.zbss_cpu2|.zbss.zbss_cpu2.*)";
}
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram1)
{
select "(.zdata.zdata_cpu1|.zdata.zdata_cpu1.*)";
select "(.zbss.zbss_cpu1|.zbss.zbss_cpu1.*)";
}
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
{
select "(.zdata.zdata_cpu0|.zdata.zdata_cpu0.*)";
select "(.zbss.zbss_cpu0|.zbss.zbss_cpu0.*)";
}
group (ordered, attributes=rw, run_addr = mem:cpu0_dlmu)
{
select "(.zdata.zlmudata|.zdata.zlmudata.*)";
select "(.zbss.zlmubss|.zbss.zlmubss.*)";
}
}
/*Near Absolute Data, selectable by toolchain*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
# endif
{
group zdata_mcal(attributes=rw)
{
select ".zdata.dsprInit.cpu0.32bit";
select ".zdata.dsprInit.cpu0.16bit";
select ".zdata.dsprInit.cpu0.8bit";
}
group zdata_powerOn(attributes=rw)
{
select ".zdata.dsprPowerOnInit.cpu0.32bit";
select ".zdata.dsprPowerOnInit.cpu0.16bit";
select ".zdata.dsprPowerOnInit.cpu0.8bit";
}
group zbss_mcal(attributes=rw)
{
select ".zbss.dsprClearOnInit.cpu0.32bit";
select ".zbss.dsprClearOnInit.cpu0.16bit";
select ".zbss.dsprClearOnInit.cpu0.8bit";
}
group zbss_noClear(attributes=rw)
{
select ".zbss.dsprNoInit.cpu0.32bit";
select ".zbss.dsprNoInit.cpu0.16bit";
select ".zbss.dsprNoInit.cpu0.8bit";
}
group zbss_powerOn(attributes=rw)
{
select ".zbss.dsprPowerOnClear.cpu0.32bit";
select ".zbss.dsprPowerOnClear.cpu0.16bit";
select ".zbss.dsprPowerOnClear.cpu0.8bit";
}
group zdata(attributes=rw)
{
select "(.zdata|.zdata.*)";
select "(.zbss|.zbss.*)";
}
}
/*Near Absolute Const, selectable with patterns and user defined sections*/
group
{
group (ordered, align = 4, contiguous, run_addr=mem:pfls0)
{
select ".zrodata.Ifx_Ssw_Tc0.*";
select ".zrodata.Ifx_Ssw_Tc1.*";
select ".zrodata.Ifx_Ssw_Tc2.*";
select ".zrodata.Ifx_Ssw_Tc3.*";
select ".zrodata.Ifx_Ssw_Tc4.*";
select ".zrodata.Ifx_Ssw_Tc5.*";
select ".zrodata.Cpu0_Main.*";
select ".zrodata.Cpu1_Main.*";
select ".zrodata.Cpu2_Main.*";
select ".zrodata.Cpu3_Main.*";
select ".zrodata.Cpu4_Main.*";
select ".zrodata.Cpu5_Main.*";
/*Near Absolute Const, selectable by toolchain*/
select ".zrodata.const.cpu0.32bit";
select ".zrodata.const.cpu0.16bit";
select ".zrodata.const.cpu0.8bit";
select ".zrodata.config.cpu0.32bit";
select ".zrodata.config.cpu0.16bit";
select ".zrodata.config.cpu0.8bit";
select "(.zrodata|.zrodata.*)";
}
}
}
/*Relative A0/A1/A8/A9 Addressable Sections*/
section_layout :vtc:linear
{
/*Relative A0 Addressable Data, selectable by toolchain*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group a0 (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group a0 (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group a0 (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group a0 (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group a0 (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group a0 (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
# endif
{
select "(.data_a0.sdata|.data_a0.sdata.*)";
select "(.bss_a0.sbss|.bss_a0.sbss.*)";
}
"_SMALL_DATA_" := sizeof(group:a0) > 0 ? addressof(group:a0) : addressof(group:a0) & 0xF0000000 + 32k;
"__A0_MEM" = "_SMALL_DATA_";
/*Relative A1 Addressable Const, selectable by toolchain*/
/*Small constant sections, No option given for CPU specific user sections to make generated code portable across Cpus*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group a1 (ordered, align = 4, run_addr=mem:pfls5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group a1 (ordered, align = 4, run_addr=mem:pfls4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group a1 (ordered, align = 4, run_addr=mem:pfls3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group a1 (ordered, align = 4, run_addr=mem:pfls2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group a1 (ordered, align = 4, run_addr=mem:pfls1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group a1 (ordered, align = 4, run_addr=mem:pfls0)
# endif
{
select "(.rodata_a1.srodata|.rodata_a1.srodata.*)";
select "(.ldata|.ldata.*)";
}
"_LITERAL_DATA_" := sizeof(group:a1) > 0 ? addressof(group:a1) : addressof(group:a1) & 0xF0000000 + 32k;
"__A1_MEM" = "_LITERAL_DATA_";
/*Relative A9 Addressable Data, selectable with patterns and user defined sections*/
group a9 (ordered, align = 4, run_addr=mem:lmuram)
{
select "(.data_a9.a9sdata|.data_a9.a9sdata.*)";
select "(.bss_a9.a9sbss|.bss_a9.a9sbss.*)";
}
"_A9_DATA_" := sizeof(group:a9) > 0 ? addressof(group:a9) : addressof(group:a9) & 0xF0000000 + 32k;
"__A9_MEM" = "_A9_DATA_";
/*Relative A8 Addressable Const, selectable with patterns and user defined sections*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group a8 (ordered, align = 4, run_addr=mem:pfls5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group a8 (ordered, align = 4, run_addr=mem:pfls4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group a8 (ordered, align = 4, run_addr=mem:pfls3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group a8 (ordered, align = 4, run_addr=mem:pfls2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group a8 (ordered, align = 4, run_addr=mem:pfls1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group a8 (ordered, align = 4, run_addr=mem:pfls0)
# endif
{
select "(.rodata_a8.a8srodata|.rodata_a8.a8srodata.*)";
}
"_A8_DATA_" := sizeof(group:a8) > 0 ? addressof(group:a8) : addressof(group:a8) & 0xF0000000 + 32k;
"__A8_MEM" = "_A8_DATA_";
}
/*举个例子,
在core0的main函数里面调用一个函数
这个函数的c 文件需要dsram4内存里面运行
c文件名称: testmap.c
函数名称:void testmm(void)
只需要在下面groip对应的dsram4 里面把 c 的部分名字select一下,这里的* 意思是 任意通配符
group (ordered, attributes=rw, run_addr=mem:dsram4)
{
select ".data.Ifx_Ssw_Tc4.*";
select ".data.Cpu4_Main.*";
select "(.data.data_cpu4|.data.data_cpu3.*)";
select ".bss.Ifx_Ssw_Tc4.*";
select ".bss.Cpu4_Main.*";
select "(.bss.bss_cpu4|.bss.bss_cpu4.*)";
select "(*testmap.*)"; // 这里高亮
}
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram4)
{
select "(.zdata.zdata_cpu4|.zdata.zdata_cpu4.*)";
select "(.zbss.zbss_cpu4|.zbss.zbss_cpu4.*)";
select "(*testmap.*)";
}
编译出来的结果为:
| mpe:dsram4 | | .text.testmap.testmm (25427) | 0x0000000e | 0x30000000 | 0x0 | 0x00000002 |
| mpe:dsram4 | | .bss.testmap.testmmdata (25428) | 0x00000001 | 0x3000000e | 0x0000000e | 0x00000001 |
*/
/*Far Data / Far Const Sections, selectable with patterns and user defined sections*/
section_layout :vtc:linear
{
/*Far Data Sections, selectable with patterns and user defined sections*/
group
{
/*DSRAM sections*/
group
{
group (ordered, attributes=rw, run_addr=mem:dsram5)
{
select ".data.Ifx_Ssw_Tc5.*";
select ".data.Cpu5_Main.*";
select "(.data.data_cpu5|.data.data_cpu5.*)";
select ".bss.Ifx_Ssw_Tc5.*";
select ".bss.Cpu5_Main.*";
select "(.bss.bss_cpu5|.bss.bss_cpu5.*)";
}
group (ordered, attributes=rw, run_addr=mem:dsram4)
{
select ".data.Ifx_Ssw_Tc4.*";
select ".data.Cpu4_Main.*";
select "(.data.data_cpu4|.data.data_cpu3.*)";
select ".bss.Ifx_Ssw_Tc4.*";
select ".bss.Cpu4_Main.*";
select "(.bss.bss_cpu4|.bss.bss_cpu4.*)";
}
group (ordered, attributes=rw, run_addr=mem:dsram3)
{
select ".data.Ifx_Ssw_Tc3.*";
select ".data.Cpu3_Main.*";
select "(.data.data_cpu3|.data.data_cpu3.*)";
select ".bss.Ifx_Ssw_Tc3.*";
select ".bss.Cpu3_Main.*";
select "(.bss.bss_cpu3|.bss.bss_cpu3.*)";
}
group (ordered, attributes=rw, run_addr=mem:dsram2)
{
select ".data.Ifx_Ssw_Tc2.*";
select ".data.Cpu2_Main.*";
select "(.data.data_cpu2|.data.data_cpu2.*)";
select ".bss.Ifx_Ssw_Tc2.*";
select ".bss.Cpu2_Main.*";
select "(.bss.bss_cpu2|.bss.bss_cpu2.*)";
}
group (ordered, attributes=rw, run_addr=mem:dsram1)
{
select ".data.Ifx_Ssw_Tc1.*";
select ".data.Cpu1_Main.*";
select "(.data.data_cpu1|.data.data_cpu1.*)";
select ".bss.Ifx_Ssw_Tc1.*";
select ".bss.Cpu1_Main.*";
select "(.bss.bss_cpu1|.bss.bss_cpu1.*)";
}
group (ordered, attributes=rw, run_addr=mem:dsram0)
{
select ".data.Ifx_Ssw_Tc0.*";
select ".data.Cpu0_Main.*";
select "(.data.data_cpu0|.data.data_cpu0.*)";
select ".bss.Ifx_Ssw_Tc0.*";
select ".bss.Cpu0_Main.*";
select "(.bss.bss_cpu0|.bss.bss_cpu0.*)";
}
}
/*LMU Data sections*/
group
{
group (ordered, attributes=rw, run_addr = mem:cpu0_dlmu)
{
select "(.data.lmudata_cpu0|.data.lmudata_cpu0.*)";
select "(.bss.lmubss_cpu0|.bss.lmubss_cpu0.*)";
}
group (ordered, attributes=rw, run_addr = mem:cpu1_dlmu)
{
select "(.data.lmudata_cpu1|.data.lmudata_cpu1.*)";
select "(.bss.lmubss_cpu1|.bss.lmubss_cpu1.*)";
}
group (ordered, attributes=rw, run_addr = mem:cpu2_dlmu)
{
select "(.data.lmudata_cpu2|.data.lmudata_cpu2.*)";
select "(.bss.lmubss_cpu2|.bss.lmubss_cpu2.*)";
}
group (ordered, attributes=rw, run_addr = mem:cpu3_dlmu)
{
select "(.data.lmudata_cpu3|.data.lmudata_cpu3.*)";
select "(.bss.lmubss_cpu3|.bss.lmubss_cpu3.*)";
}
group (ordered, attributes=rw, run_addr = mem:cpu4_dlmu)
{
select "(.data.lmudata_cpu4|.data.lmudata_cpu4.*)";
select "(.bss.lmubss_cpu4|.bss.lmubss_cpu4.*)";
}
group (ordered, attributes=rw, run_addr = mem:cpu5_dlmu)
{
select "(.data.lmudata_cpu5|.data.lmudata_cpu5.*)";
select "(.bss.lmubss_cpu5|.bss.lmubss_cpu5.*)";
}
group (ordered, attributes=rw, run_addr=mem:lmuram)
{
select "(.data.lmudata|.data.lmudata.*)";
select "(.bss.lmubss|.bss.lmubss.*)";
}
}
}
/*Far Data Sections, selectable by toolchain*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, contiguous, align = 4, attributes=rw, run_addr = mem:dsram0)
# endif
{
group data_mcal(attributes=rw)
{
select ".data.farDsprInit.cpu0.32bit";
select ".data.farDsprInit.cpu0.16bit";
select ".data.farDsprInit.cpu0.8bit";
}
group bss_mcal(attributes=rw)
{
select ".bss.farDsprClearOnInit.cpu0.32bit";
select ".bss.farDsprClearOnInit.cpu0.16bit";
select ".bss.farDsprClearOnInit.cpu0.8bit";
}
group bss_noInit(attributes=rw)
{
select ".bss.farDsprNoInit.cpu0.32bit";
select ".bss.farDsprNoInit.cpu0.16bit";
select ".bss.farDsprNoInit.cpu0.8bit";
}
group data(attributes=rw)
{
select "(.data|.data.*)";
select "(.bss|.bss.*)";
}
}
/*Heap allocation*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group (ordered, align = 4, run_addr = mem:dsram5[LCF_HEAP5_OFFSET])
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group (ordered, align = 4, run_addr = mem:dsram4[LCF_HEAP4_OFFSET])
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group (ordered, align = 4, run_addr = mem:dsram3[LCF_HEAP3_OFFSET])
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group (ordered, align = 4, run_addr = mem:dsram2[LCF_HEAP2_OFFSET])
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group (ordered, align = 4, run_addr = mem:dsram1[LCF_HEAP1_OFFSET])
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, align = 4, run_addr = mem:dsram0[LCF_HEAP0_OFFSET])
# endif
{
heap "heap" (size = LCF_HEAP_SIZE);
}
/*Far Const Sections, selectable with patterns and user defined sections*/
group
{
group (ordered, align = 4, run_addr=mem:pfls0)
{
select ".rodata.Ifx_Ssw_Tc0.*";
select ".rodata.Cpu0_Main.*";
select "(.rodata.rodata_cpu0|.rodata.rodata_cpu0.*)";
}
group (ordered, align = 4, run_addr=mem:pfls1)
{
select ".rodata.Cpu1_Main.*";
select ".rodata.Ifx_Ssw_Tc1.*";
select "(.rodata.rodata_cpu1|.rodata.rodata_cpu1.*)";
}
group (ordered, align = 4, run_addr=mem:pfls2)
{
select ".rodata.Ifx_Ssw_Tc2.*";
select ".rodata.Cpu2_Main.*";
select "(.rodata.rodata_cpu2|.rodata.rodata_cpu2.*)";
}
group (ordered, align = 4, run_addr=mem:pfls3)
{
select ".rodata.Ifx_Ssw_Tc3.*";
select ".rodata.Cpu3_Main.*";
select "(.rodata.rodata_cpu3|.rodata.rodata_cpu3.*)";
}
group (ordered, align = 4, run_addr=mem:pfls4)
{
select ".rodata.Ifx_Ssw_Tc4.*";
select ".rodata.Cpu4_Main.*";
select "(.rodata.rodata_cpu4|.rodata.rodata_cpu4.*)";
}
group (ordered, align = 4, run_addr=mem:pfls5)
{
select ".rodata.Ifx_Ssw_Tc5.*";
select ".rodata.Cpu5_Main.*";
select "(.rodata.rodata_cpu5|.rodata.rodata_cpu5.*)";
}
}
/*Far Const Sections, selectable by toolchain*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group (ordered, align = 4, run_addr=mem:pfls5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group ordered, align = 4, run_addr=mem:pfls4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group (ordered, align = 4, run_addr=mem:pfls3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group (ordered, align = 4, run_addr=mem:pfls2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group (ordered, align = 4, run_addr=mem:pfls1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, align = 4, run_addr=mem:pfls0)
# endif
{
select ".rodata.farConst.cpu0.32bit";
select ".rodata.farConst.cpu0.16bit";
select ".rodata.farConst.cpu0.8bit";
select "(.rodata|.rodata.*)";
}
}
/* PSRAM Code selections*/
section_layout :vtc:linear
{
/*Code Sections, selectable with patterns and user defined sections*/
group
{
/*Program Scratchpad Sections*/
group
{
group code_psram0 (ordered, attributes=rwx, copy, run_addr=mem:psram0)
{
select "(.text.cpu0_psram|.text.cpu0_psram.*)";
select "(.text.psram_text_cpu0|.text.psram_text_cpu0.*)";
}
group code_psram1 (ordered, attributes=rwx, copy, run_addr=mem:psram1)
{
select "(.text.cpu1_psram|.text.cpu1_psram.*)";
select "(.text.psram_text_cpu1|.text.psram_text_cpu1.*)";
}
group code_psram2 (ordered, attributes=rwx, copy, run_addr=mem:psram2)
{
select "(.text.cpu2_psram|.text.cpu2_psram.*)";
select "(.text.psram_text_cpu2|.text.psram_text_cpu2.*)";
}
group code_psram3 (ordered, attributes=rwx, copy, run_addr=mem:psram3)
{
select "(.text.cpu3_psram|.text.cpu3_psram.*)";
select "(.text.psram_text_cpu3|.text.psram_text_cpu3.*)";
}
group code_psram4 (ordered, attributes=rwx, copy, run_addr=mem:psram4)
{
select "(.text.cpu4_psram|.text.cpu4_psram.*)";
select "(.text.psram_text_cpu4|.text.psram_text_cpu4.*)";
}
group code_psram5 (ordered, attributes=rwx, copy, run_addr=mem:psram5)
{
select "(.text.cpu5_psram|.text.cpu5_psram.*)";
select "(.text.psram_text_cpu5|.text.psram_text_cpu5.*)";
}
}
}
}
/* FLS Code selections*/
section_layout :vtc:linear
{
/*Code Sections, selectable with patterns and user defined sections*/
group
{
/*Cpu specific PFLASH Sections*/
group
{
group (ordered, align = 4, run_addr=mem:pfls0)
{
select ".text.Ifx_Ssw_Tc0.*";
select ".text.Cpu0_Main.*";
select ".text.CompilerTasking.Ifx_C_Init";
select "(.text.text_cpu0|.text.text_cpu0.*)";
}
group (ordered, align = 4, run_addr=mem:pfls1)
{
select ".text.Ifx_Ssw_Tc1.*";
select ".text.Cpu1_Main.*";
select "(.text.text_cpu1|.text.text_cpu1.*)";
}
group (ordered, align = 4, run_addr=mem:pfls2)
{
select ".text.Ifx_Ssw_Tc2.*";
select ".text.Cpu2_Main.*";
select "(.text.text_cpu2|.text.text_cpu2.*)";
}
group (ordered, align = 4, run_addr=mem:pfls3)
{
select ".text.Ifx_Ssw_Tc3.*";
select ".text.Cpu3_Main.*";
select "(.text.text_cpu3|.text.text_cpu3.*)";
}
group (ordered, align = 4, run_addr=mem:pfls4)
{
select ".text.Ifx_Ssw_Tc4.*";
select ".text.Cpu4_Main.*";
select ".text.text_cpu4*";
select "(.text.text_cpu4|.text.text_cpu4.*)";
}
group (ordered, align = 4, run_addr=mem:pfls5)
{
select ".text.Ifx_Ssw_Tc5.*";
select ".text.Cpu5_Main.*";
select ".text.text_cpu5*";
select "(.text.text_cpu5|.text.text_cpu5.*)";
}
}
}
/*Code Sections, selectable by toolchain*/
# if LCF_DEFAULT_HOST == LCF_CPU5
group (ordered, run_addr=mem:pfls5)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU4
group ordered, run_addr=mem:pfls4)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU3
group (ordered, run_addr=mem:pfls3)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU2
group (ordered, run_addr=mem:pfls2)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU1
group (ordered, run_addr=mem:pfls1)
# endif
# if LCF_DEFAULT_HOST == LCF_CPU0
group (ordered, run_addr=mem:pfls0)
# endif
{
select ".text.fast.pfls.cpu0";
select ".text.slow.pfls.cpu0";
select ".text.5ms.pfls.cpu0";
select ".text.10ms.pfls.cpu0";
select ".text.callout.pfls.cpu0";
select "(.text|.text.*)";
}
}
}
Aurix 多核链接文件 lsl --- 下篇相关推荐
- 英飞凌 AURIX TC3XX 系列单片机的链接文件
前言 程序在完成编译后,每个".c"文件会生成".o"目标文件,此时代码无法通过目标文件运行,还需要通过链接文件为每个目标文件和系统标准库等链接起来,根据链接文 ...
- python下载文件保存_python 3.3 下载固定链接文件并保存的方法
python 3.3 下载固定链接文件并保存. import urllib.request print ("downloading with urllib") url = 'htt ...
- 第2周第4课:set_uid、set_gid、stick_bit、软(硬)链接文件
2019独角兽企业重金招聘Python工程师标准>>> 2.18 特殊权限set_uid 权限的标准写法是4位数,第1位表示特殊权限. 该权限仅针对二进制可执行文件,使文件在执行阶段 ...
- Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态链接文件依赖
之前已经介绍过了libvirt api的上手使用方式: <Windows下Libvirt Java API使用教程(二)- 接口使用说明> <Windows下Libvirt Java ...
- 纯前端下载pdf链接文件,而不是打开预览的解决方案
纯前端下载pdf链接文件,而不是打开预览的解决方案 参考文章: (1)纯前端下载pdf链接文件,而不是打开预览的解决方案 (2)https://www.cnblogs.com/jackson-yqj/ ...
- python3下载文件-python 3.3 下载固定链接文件并保存的方法
python 3.3 下载固定链接文件并保存. import urllib.request print ("downloading with urllib") url = 'htt ...
- 【Android 逆向】Linux 文件分类 ( 普通文件 | 目录文件 | 链接文件 | 字符设备文件 | 管道文件 | 块设备文件 )
文章目录 一.Linux 文件分类 1.普通文件 2.链接文件 3.字符设备文件 4.管道文件 5.块设备文件 一.Linux 文件分类 Linux 文件分类 : " - " 表示 ...
- visual studio 添加链接文件
本文转载http://blog.163.com/zhongpenghua@yeah/blog/static/87727415201282432345613/ 那个有个箭头的文件就是链接文件了,添加方法 ...
- html链接文件不可用,PPT2013如何解决链接文件失效
工作中在做PPT时,经常需要添加一些视频或音频之类的链接文件.而我们拷贝到另外一台电脑上的时候,由于这些链接文件的路径变了,这些链接也就失效了.遇到链接失效怎么办?下面学习啦给大家分享解决链接失效的方 ...
- linux 常用命令整理----链接文件
ln 用法:ln -s /etc/issue /tmp/issue.soft ln /etc/issue /etc/issue.hard 如果加-s为软链接,类似于windows的快捷方式 不加-s为 ...
最新文章
- CTO 写的低级 Bug 再致网站被黑,CEO 的号都被盗了!
- 深拷贝(deep clone)与浅拷贝(shallow clone)
- poj 1873 枚举+凸包
- Java获取各种常用时间方法
- database design
- java中sort的cmp_快速排序(cmp函数详解)
- 跨域cookie设置
- MVC 异常处理机制
- html没有prefix属性,HTML前缀属性(Open Graph Protocol)的含义?
- pycharm 升级 pip
- 2022年低功耗软路由cpu一览
- 家长们,居家网课这样做
- SQL Server 数据库实验课第九周——第六章总结
- 关于React 行内样式backgroundImage的设置
- HDU-OJ 杭电1495非常可乐
- 任务签到表(2006.11.20)
- ESP32C3驱动舵机
- java框架2019_Java回顾#2 – 2019年最佳工具,框架和功能
- 查看mysql数据库sid_查看数据库sid
- 2019/04/03
热门文章
- 如何一周之内摸清一个行业?
- wordpress入门主题_WordPress儿童主题入门
- 【折半查找二叉判定树】
- [开发过程]<项目管理>TAPD工具
- AutoSAR系列讲解 - 总目录
- 海洋cms index.php被修改,海洋CMS(SEACMS)新版本V6.55补丁仍可被绕过执行任意代码...
- uni-gram与bi-gram语言模型
- siblings筛选同胞元素
- 10计算机语言代表什么,win10是什么编程语言写的_win10史诗般的巨型编程项目
- win10多用户同时登陆