[BUG记录]0X10 会话切换服务响应NRC 0x10
目录
- 关键词
- 平台说明
- 一、背景
- 二、分析过程
- 2.1 响应NRC 0x10 的情况
- 三、措施
- 四、lesson learned
关键词
嵌入式、C语言、autosar、TDA4
>>>>>回到总目录<<<<<<
平台说明
项目 | Value |
---|---|
OS | autosar OS |
autosar厂商 | vector |
芯片厂商 | TI |
编程语言 | C,C++ |
编译器 | HighTec (GCC) |
一、背景
接手到一个bug排查,问题如下:
在0x10服务中,自定义了一个会话(假设为 0x10 0x46会话)。发现上电后从默认会话切换到0x46有概率会响应NRC 0x10。不是100%复现,概率也不一定。
二、分析过程
2.1 响应NRC 0x10 的情况
1.CPU负责过高或者CAN 总线负载过高会导致ECU无法处理上位机的请求。
2.正在执行连续FLASH 操作导致ECU无法及时处理上位机的请求。
3.请求了不支持的会话类型。
4.请求格式错误。
5.ECU处于安全锁定状态。
6.0x23服务读取正在被操作的地址的时候会响应NRC 0X10.
7.当上一个服务正在被处理的时候又收到一个新的服务请求。
8.当服务的return值超范围的时候。
9.其他异常情况。
依次排查后发现,在DCM_10serverPreHandler函数中,有人将DCM_E_BUSYREPEATREQUEST赋值给了return,正确用法应该是赋值给ErrorCode。
在抽象层代码中我们可以看到在函数Dcm_RepeaterProcessSvcPreHandler 中,如果return 值 不为E_OK,DCM_E_PENDING或者 E_NOT_OK 则会响应NRC 0x10.
三、措施
修改错误代码后测试正常。
四、lesson learned
注意函数返回值。
后续更新关于0X10 服务的注意事项。
>>>>>回到总目录<<<<<<