【AUTOSAR CP errCount报错解决】errType=13

目录

问题描述:

问题排查:

解决方案

方案验证


问题描述:

调试AUTOSAR CP工程时,将工程烧入MCU后,Trace32的Watch界面,用于监测error的变量errCount数值一直持续增加,且显示errType=13。当errCount累积到5w+时,Trace32界面显示“hard reset detected”,此时程序停止运行。

问题排查:

1)在Os.h文件中查找errType=13对应的错误类型,

#define E_OS_ACCESS ((StatusType)1U)
......
#define E_OS_STACKFAULT ((StatusType)13U)
......

故确定是因为堆栈出了问题,需进一步排查是哪个模块的堆栈问题。

2)err->task显示为0x80088620,查找对应的Map文件后,发现该内存地址位于

                                  |     Size      | Space addr  | ...
.rodata.Os_Cfg.Os_const_tasks0    | 0x000001b8    | 0x80088544  | ...
.rodata.Os_Cfg.Os_const_tasks1    | 0x000000a0    | 0x800886fc  | ...

task0与task1对应的地址之间,故该出错的task属于tasks0。而查阅配置发现,tasks0中添加了11个子task,故每个task占用内存0x1b8÷11=440/11=44Bytes,倒推计算出问题的0x80088620为第六个task,因为0x80088620-0x80088544=0xDC=220Bytes。故应该查找tasks0[5]所对应的子task。查阅Os_Cfg.h代码发现:

#define Core0_OsTask_BSW_10ms (&Os_const_tasks0[5])

故出错的err->Task为Core0_OsTask_BSW_10ms。

3)查阅代码Core0_OsTask_BSW_10ms.c,发现

TASK(Core0_OsTask_BSW_10ms)
{

}

该Task中包含14项MainFunction,推测因为Task内含函数过多,导致堆栈短缺报错。

解决方案

新建一个Core相同,Cycle相同的新Task,将Core0_OsTask_BSW_10ms 中映射的RunnableEntity移一半去新建的Task内,减轻原Core0_OsTask_BSW_10ms 的负载。

方案验证

重新生成代码编译后,烧录至MCU,观察到Trace32的errCount始终保持为0,问题解决成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值