关键词
MemMap、嵌入式、C语言、autosar
平台说明
项目 | Value |
---|---|
OS | autosar OS |
芯片厂商 | Infineon |
芯片架构 | TirCore |
编程语言 | C |
编译器 | tasking |
技术背景
为了实现自定义const或者生成的const local 到指定地址。常用于标定,BOOT跳转标志位等情况。
技术难点(关注点)
vector MemMap机制与英飞凌Tasking 编译器LSL语言。
整体架构#流程
(1)生成的代码定位。
(2)用户代码定位
实现过程
用户代码section定位
1.在自己的.c文件中找到需要定位的内容,在前后两端添加#pragma section 和#pragma section all restore
#pragma section all "caltest13"
const uint8 dfdemo = 66u;
const uint8 dfdemo_arry[5] = {1u,2u,3u,4u,5u};
#pragma section all restore
2.在LSL文件中指定section(可以新建)名称及属性(vtc所有核,contiguous和上一section连续等参数)
section_layout mpe:vtc:linear
{
group DFLASH0_DATA ( ordered, contiguous, run_addr = 0xaf000000mem:mpe:dflash0 )
{
select ".rodata.caltest13";
}
}
3.编译成功后可以在map文件中看到该section成功定位到了指定地址。
| mpe:dflash0 | DFLASH0_DATA | .rodata.caltest13 (193) | 0x00000001 | 0xaf000000 | 0x0 | 0x00000004 |
| mpe:dflash0 | DFLASH0_DATA | .rodata.caltest13 (194) | 0x00000005 | 0xaf000004 | 0x00000004 | 0x00000004 |
生成的section定位
1.在Rte.c中找到需要指定的内容
2.在./Appl/GenData/Rte_MemMap.h文件中predefine section condition Macro,记住有satrt就得接一个Stop
3.在./include/MemMap.h文件中定义section名称
4.在LSL文件中指定section(可以新建)名称及属性(vtc所有核,contiguous和上一section连续等参数。
5.编译成功后可以在map文件中看到该section成功定位到了指定地址。
小结
注意避开已经使用到的内存,特别是share memory和boot。