前言
汽车电子嵌入式(公众号/CSDN)开始更新全新的AUTOSAR项目实战专栏内容,从0到1搭建一个AUTOSAR工程,内容会覆盖AUTOSAR通信协议栈、存储协议栈、诊断协议栈、MCAL、系统服务、标定、Bootloader、复杂驱动、功能安全等所有常见功能和模块,全网同步更新开发设计文档(后期也会更新视频内容)。本文为前期基础工程搭建过程遇到的问题分析--数据地址访问对齐问题分析。
AUTOSAR BSW Tool:Vector
AUTOSAR MCAL Tool:EB
Hardware Platform: Infineon Tricore TC387
目录
注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!
正文
问题描述:Main函数调用Os_Init后发生了异常Trap.
参考《TC3xx芯片的Trap详解(二)》《TC3xx芯片的Trap详解》二文可知:D[15]寄存器保存了Trap/Exception发生后TIN号。
在DataSheet中没有知道如何确定TCN号,从后面的调试分析中可以得知,异常发生后,D[4] = (TCN << 16) | TIN,也就是可以通过D[4]寄存器确定TCN号。
也就是说,异常的时候:
D[15]: 0x00000004 --> TIN为4
D[4]: 0x00020004 --> TCN为2
也就是说,Os_Init的时候产生了Class2中ALN类型的Trap, 也就是数据地址对齐的Trap.
注意1:CPU数据同步异常(Trap)也可以直接查看DSTR寄存器来定位Trap类型,如下图所示,Os_Init的时候产生了ALN类型的Trap.
异常的时候:
CPU0_DEAD0: 0xF0038001 --> 也就是函数在写Interrupt Router SRC Register时发生了异常。
注意2:当数据内存操作的地址不符合所需的对齐规则时,就会引发ALN陷阱。更多关于数据对齐的内容参考如下数据手册内容。
分析:查看出问题时候的函数调用栈, core0_Main -> Os_Init ->Os_CoreIsSingleCoreOs -> Os_Hal_IntInterruptSourceInit, 也就是在最后初始化中断Source号的时候发生产生了异常,那大概率是中断Source号配错了导致的问题。
如下图所示,正确配置CAN中断的Isr Interrupt Source号后问题就解决了。
从问题分析的结果来看就是一个错误的CAN中断号配置错误导致的Trap,好像没什么大不了的。但是,本文介绍的Trap异常分析方法还是非常重要的。同时将该问题分析纳入到个人的问题分析知识库中,后面再遇到时能快速的定位问题(再简单的问题在实际工程项目中都会遇到,项目时间及开发人员的水平不一样,各种问题都能出现。。。)。
第一步:断点到异常处理函数Os_Hal_UnhanledExceptionHandler处。
第二步:通过CPUx_DSTR寄存器或者D[15]和D[4]寄存器确定异常的TCN和TIN号。
第三步:通过A11查看函数返回的地址,也就是确定哪个函数(哪段代码)出的问题。
第四步:通过CPUx_DEADx寄存器确定函数访问哪块数据区域出的问题。
第五步:通过以上信息来定位问题。
注意:以上异常Trap问题分析方法仅限于同步异常问题分析,如果是异步异常,发生问题时的上下文可能是不可信的了,目前作者也没有通用的异步异常问题分析方法。
End
「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」
点击文章最后左下角的阅读原文可以获取更多信息
或者复制如下链接到浏览器获取更多信息
https://blog.csdn.net/qq_36056498/article/details/132125693
文末福利
2.为便于技术交流,创建了汽车电子嵌入式技术交流群,可尽情探讨AP,CP,DDS,SOME/IP等前沿热点话题,后台回复“加群”即可加入;
注:本文引用了一些第三方工具和文档,若有侵权,请联系作者删除!
推荐阅读
汽车电子嵌入式精彩文章汇总第一期:20210530-20230703
汽车电子嵌入式精彩文章汇总第2期
汽车电子嵌入式精彩文章汇总第3期
【OS】AUTOSAR OS Event实现原理
【OS】AUTOSAR OS Spinlock实现原理(下篇)
【OS】AUTOSAR OS Spinlock实现原理(上篇)
CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗
TC3xx芯片CAN模块详解
AUTOSAR OS Alarm实现原理
AUTOSAR OsTask切换原理
TC3xx 芯片SPI模块详解
AUTSOAR ComStack如何实现PDU只收不发的
AUTOSAR OsStack监控原理
AUTOSAR架构下ICU唤醒详解
CanNm报文的触发发送详解
Can报文能发不能收问题分析
TC3xx芯片PFlash的ECC校验问题补充
AUTOSAR架构下唤醒源检测函数EcuM_CheckWakeup详解
什么是Copy Table及如何使用Copy Table
AUTOSAR架构下EcuM_StartupTwo函数功能详解
符合AUTOSAR标准的RTAOS-Schedule Tables详解(上篇)
AUTOSAR OS Schedule Table实现原理
符合AUTOSAR标准的RTAOS-Schedule Tables详解(下篇)
TJA1145收发器重要功能介绍
AUTOSAR架构下基于TJA1145收发器通信丢失问题分析
AUTOSAR架构下LIN报文发送失败问题分析
End
欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!
汽车电子嵌入式
微信扫描二维码,关注我的公众号