AUTOSAR项目实战(7)-程序的启动地址分析

admin 2025年5月19日10:04:10评论1 views字数 2703阅读9分0秒阅读模式

目录

AUTOSAR项目实战(7)-程序的启动地址分析

前言

汽车电子嵌入式(公众号/CSDN)开始更新全新的AUTOSAR项目实战专栏内容,从01搭建一个AUTOSAR工程,内容会覆盖AUTOSAR通信协议栈、存储协议栈、诊断协议栈、MCAL、系统服务、标定、Bootloader、复杂驱动、功能安全等所有常见功能和模块,全网同步更新开发设计文档(后期也会更新视频内容)。本文为前期基础工程搭建过程-程序的启动地址分析

参考文章:

1.TC3xx芯片的UCB详解

2.AUTOSAR架构下多核启动

3. https://zhuanlan.zhihu.com/p/644563274

AUTOSARBSW ToolVector

AUTOSAR MCAL ToolEB

Hardware Platform: Infineon TricoreTC387

Build ToolTasking

Debug Tool: UDE

AUTOSAR项目实战系列文章:

AUTOSAR项目实战(1)-数据地址访问对齐问题分析

AUTOSAR项目实战(2)-内存访问异常问题分析

AUTOSAR项目实战(3)-OsCounter访问权限问题分析

AUTOSAR项目实战(4)-系统总线及外设错误问题分析

AUTOSAR项目实战(5)-MCU模块配置实践

AUTOSAR项目实战(6)-Port及Dio模块配置实践

AUTOSAR架构下XCP从0到1开发配置实践

AUTOSAR架构下XCP DAQ功能配置实现

正文

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的启动地址。

AUTOSAR项目实战(7)-程序的启动地址分析

UCB_BMHD0_ORIN.STAT的地址为0xAF400004, 其值为0xAF000000, 也就是说我们项目中UCB_BMHD0_ORIN.STAT配置的程序启动地址为0xAF000000.

AUTOSAR项目实战(7)-程序的启动地址分析

1.2 连接文件中的启动地址

连接文件中关于启动地址的内容:

#define LCF_STARTPTR_NC_CPU0 0xA0000000#define RESET LCF_STARTPTR_NC_CPU0groupreset (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                                * *****************************************************************************/#if defined(__HIGHTEC__)#pragma section#pragma section ".start" x#endif#if defined(__TASKING__)#pragma protect on#pragma section code "start"#endif#if defined(__DCC__)#pragma section CODE ".start" X#endif#if defined(__ghs__)#pragma ghs section text=".start"#endifvoid _START(void){    Ifx_Ssw_jumpToFunction(__StartUpSoftware);}/* reset the sections defined above, to normal region */#if defined(__HIGHTEC__)#pragma section#endif#if defined(__TASKING__)#pragma protect restore#pragma section code restore#endif#if defined(__DCC__)#pragma section CODE#endif#if defined(__ghs__)#pragma ghs section text=default#endif/*Restore the options to command line provided ones*/#if defined(__HIGHTEC__)#pragma GCC reset_options#elif defined(__TASKING__)#pragma endoptimize#endif

通过#pragma section code "start"将启动代码_START放到.text.start代码段中,也就是0xAF000000地址。

2.编译验证启动地址

查看编译后的Map文件,_START符号确实放在0xAF000000地址处。

AUTOSAR项目实战(7)-程序的启动地址分析

3.调试验证启动地址

运行程序,用户程序确实从0xAF00000地址处*_STATRT函数)启动。

AUTOSAR项目实战(7)-程序的启动地址分析

4.如何修改程序起始地址

4.1 修改UCB的起始地址

AUTOSAR项目实战(7)-程序的启动地址分析
AUTOSAR项目实战(7)-程序的启动地址分析
AUTOSAR项目实战(7)-程序的启动地址分析

注意:实际项目中可以将UCB的启动地址保存下来,需要的时候直接加载UCB的启动地址。

AUTOSAR项目实战(7)-程序的启动地址分析
AUTOSAR项目实战(7)-程序的启动地址分析

4.2 修改连接文件中的起始地址

直接修改连接文件中LCF_STARTPTR_NC_CP0的值即可。比如:

#defineLCF_STARTPTR_NC_CPU0 0xA0002000

5.总结

本文详细介绍了如何确定基于英飞凌Tricore芯片的程序启动地址及如何修改程序的启动地址,为我们项目后面的Memory Layout分配以及Bootloader的启动做好准备。

End

原文始发于微信公众号(汽车电子嵌入式):AUTOSAR项目实战(7)-程序的启动地址分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月19日10:04:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AUTOSAR项目实战(7)-程序的启动地址分析https://cn-sec.com/archives/4078969.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息