目录
前言
汽车电子嵌入式(公众号/CSDN)开始更新全新的AUTOSAR项目实战专栏内容,从0到1搭建一个AUTOSAR工程,内容会覆盖AUTOSAR通信协议栈、存储协议栈、诊断协议栈、MCAL、系统服务、标定、Bootloader、复杂驱动、功能安全等所有常见功能和模块,全网同步更新开发设计文档(后期也会更新视频内容)。本文为前期基础工程搭建过程-程序的启动地址分析。
参考文章:
3. https://zhuanlan.zhihu.com/p/644563274
AUTOSARBSW Tool:Vector
AUTOSAR MCAL Tool:EB
Hardware Platform: Infineon TricoreTC387
Build Tool: Tasking
Debug Tool: UDE
AUTOSAR项目实战系列文章:
AUTOSAR项目实战(3)-OsCounter访问权限问题分析
正文
1.启动地址
UCB_BMHD0_ORIN.STAT的启动地址是配置Tricore启动后SSW从用户程序的哪个地址开始运行,LD链接文件里面的入口地址RESET是配置链接器把上电就执行的用户入口代码地址链接到RESET地址处,二者应该是同一个地址,也就是说:UCB_BMHD0_ORIN.STAT的启动地址要等于LD链接文件中的RESET启动地址。
1.1 UCB启动地址
UCB_BMHD0_ORIN.STAT配置的是Core0启动后SSW从用户程序的哪个地址开始运行。
注意:UCB_BMHD1/2/3/_ORIN.STAT就配置Core1/Core2/Core3的启动地址。
UCB_BMHD0_ORIN.STAT的地址为0xAF400004, 其值为0xAF000000, 也就是说我们项目中UCB_BMHD0_ORIN.STAT配置的程序启动地址为0xAF000000.
1.2 连接文件中的启动地址
连接文件中关于启动地址的内容:
groupreset (run_addr=RESET)
{
section "reset" ( size = 0x20, fill = 0x0800, attributes = r )
{
select ".text.start";
}
}
也就是说代码段中(.text.start)中的代码会放在RESET起始地址处(0xAF000000)。
1.3 启动代码
我们使用英飞凌官方的开源启动代码,也就在Ifx_Ssw_Tc0.c文件中:
/******************************************************************************
* reset vector address *
*****************************************************************************/
void _START(void)
{
Ifx_Ssw_jumpToFunction(__StartUpSoftware);
}
/* reset the sections defined above, to normal region */
/*Restore the options to command line provided ones*/
通过#pragma section code "start"将启动代码_START放到.text.start代码段中,也就是0xAF000000地址。
2.编译验证启动地址
查看编译后的Map文件,_START符号确实放在0xAF000000地址处。
3.调试验证启动地址
运行程序,用户程序确实从0xAF00000地址处*(_STATRT函数)启动。
4.如何修改程序起始地址
4.1 修改UCB的起始地址
注意:实际项目中可以将UCB的启动地址保存下来,需要的时候直接加载UCB的启动地址。
4.2 修改连接文件中的起始地址
直接修改连接文件中LCF_STARTPTR_NC_CP0的值即可。比如:
#defineLCF_STARTPTR_NC_CPU0 0xA0002000
5.总结
本文详细介绍了如何确定基于英飞凌Tricore芯片的程序启动地址及如何修改程序的启动地址,为我们项目后面的Memory Layout分配以及Bootloader的启动做好准备。
End
「
原文始发于微信公众号(汽车电子嵌入式):AUTOSAR项目实战(7)-程序的启动地址分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论