英飞凌TC3XX芯片执行软件复位后初始化失败的问题

2 篇文章 0 订阅
1 篇文章 0 订阅

1、问题描述

在使用TC3xx芯片开发过程中,调用Mcu_PerformReset()接口函数进行软件复位,发现复位后restart,卡死在初始化过程中。
调用call stack发现,core0压栈情况如下
请添加图片描述
core1压栈情况为
请添加图片描述

2、问题定位

查询memory地址发现,core1的地址为非法地址。在core0的det中打断点,查看local如下图
在这里插入图片描述
查询手册AUTOSAR_TR_BSWModuleList.pdf
在这里插入图片描述
找到ModuleId为101的对应模块Mcu。在Mcu.h中查询到ApiId为0对应Api为Mcu_Init()
在这里插入图片描述
ErrorId为17对应错误为Mcu初始化失败
在这里插入图片描述

3、猜想及验证

由于调用的接口为软件复位,查询手册可知软件复位不会清ram,猜测可能是mcu初始化时校验ram,发现其中初始值不为0导致的错误。
修改定段信息,将原本定段为NOINIT的变量改为定段到ZERO_INIT中,即初始化为0。
在这里插入图片描述
重新编译验证发现可以正常restart,证实了猜想。

4、问题解决

方案一 通过修改定段

3中所示,修改MemMap_Common.h文件,将定段为NOINIT的变量改为定段到ZERO_INIT中。

方案二 调用autosar下电流程

调用Vector SIP包中ECUM模块的接口执行复位,在EcuM_AL_Reset函数中将ram清0。
复位函数接口如下
在这里插入图片描述
EcuM_AL_Reset中清零ram代码如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值