1、概述
DET:Default Error Tracer 默认错误追踪器.对代码进行上下文追踪的一种方式,例如:初始化失败、空指针等。
DET模块是一个在软件开发阶段,支持其他BSW模块,来实现错误检测和错误追踪的支持模块,其接收来自其他模块的错误信息,然后由开发者自行定义对于这些错误信息的处理方式,可以存储在buffer里,或者通过通信接口发送给外部的调试工具,或者通知Dem模块记录故障码。
在产品开发成熟后,进入量产阶段,此功能需要被关闭。
所有在基本软件中检测到的开发和运行时错误都会报告给该模块。
API参数允许跟踪错误的来源和类型:
·检测到错误的模块;
·在其中检测到错误的函数;
·错误类型。
此功能的执行包含了初始化阶段、运行阶段,相当于可以全程存在的。
具体的API实现,在AUTOSAR规范里面并没有一个很具体的说法,仅仅包含如下部分:
这样就给了开发人员很大的自由度。规定了一些基本信息/规则/机制。对于某个发生的错误,你需要告诉DET模块这个错误是哪个模块发生的?哪个函数发生的?错误类型是什么?
主要贯穿整个项目的函数是
Std_ReturnType Det_ReportError( uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId )
当发生错误的时候,开发者往往希望钩子函数能把问题勾出来,HOOK。规范里面写道,可以在Det函数里面执行以下功能:
·当错误发生时,在里面设置调试断点让代码停下,以便调试。
·对错误进行计数。
·发生运行时错误后,使用默认值去替换以便能继续运行。
·记录(日志)调用(成功)及参数存到缓存(RAM),类似于(堆)栈信息。
·通过通信接口发送错误信息到外部以便分析。
上述也只是举例,但是不妨碍我们一下子打开自己的思路,做需要的定制。
局限性:Det没有考虑到内存保护。
2、功能描述
默认错误跟踪器提供了在软件组件和其他基本软件模块的开发和运行时期间支持错误检测和错误跟踪的功能。为此,默认错误跟踪器接收并评估来自这些组件和模块的错误消息。
·在出现错误报告的情况下,将执行可配置的错误钩子列表。
·提供错误报告接口、复位后可选错误恢复接口、可选错误恢复信息处理接口、版本信息检索接口。
Det有一个函数Det_Start以用来开启Det,
注意:默认错误跟踪器的环境可以使用函数Det_Start来触发默认错误跟踪器模块,例如(如果需要的话)在完成错误存储的NVRAM初始化的情况下。
注意:如果默认错误跟踪程序不需要启动调用,则Det_Start函数可以为空。
注意:集成商可以通过EcuM的配置来决定何时调用Det_Init。
注意:集成商可以通过EcuM或ModeM的配置来决定何时以及是否调用Det_Start。
为了在开发和运行期间支持调试和错误跟踪,默认错误跟踪器提供了接收通知的功能错误报告。因此,所谓的错误挂钩是可配置的。错误钩子将用于转发错误通知。如果至少配置了一个错误钩子,默认错误跟踪器将通过调用配置的错误钩子来通知每个收到的错误报告。
如果在调用Det报告函数之前没有初始化默认错误跟踪器,报告函数将立即返回,不做任何其他操作(不使用Error_Hook,不执行特定于实施者的函数,不报告错误)。
注意:默认错误跟踪器将永远不会返回错误指示(即使在调用未初始化模块的情况下)。
API调用示例
上图显示了DET的接口。唯一期望的接口是可选的;它是Dit_Det。
每个使用该服务的AUTOSAR SW-C必须在其自己的SW-C描述中包含“服务端口”,这些端口将由相同的接口键入,并且必须连接到默认错误跟踪器的端口,以便生成RTE,适当的ID和所需的符号。
3、模块交互
3.1、BSW
BSW模块若自身检测到错误,会调用DET模块的Api/ Det_ReportError报告错误,DET模块内会周期性检测这个信息,并通过开发者自己定义的User_ErrorHook来通知Dem记录故障码或者基于通信的其他外部工具。
3.1、ASW(通过SWC)
Application SWC中,需要使用client-server 的port,并通过RTE连接到BSW的DET模块
4、时序解析
初始化时刻在部分时候需要调用Det_Start();
错误上报
5、ISOLAR-AB配置
ISOLAR-AB的配置比较简单,几乎都是ETAS自己定义的参数,如下图。
DetRbErrorBufferSize:设置错误缓冲区的大小,这个购买的时候ETAS的配置就是这样的。
个人理解上钩子函数应该是有的,但是也没配置,不过OS里面确实有很多钩子函数。