Autosar之Det模块
简介
Det模块虽然表面上看起来不复杂,但是有一点毋庸置疑,它的使用率非常的高,几乎所有模块都会使用它,不光包含基础软件模块(BSW),应用软件组件(SWC)依然会使用它。Det模块可以理解为一个错误检测/追踪/管理模块,或者理解为探测断言(Assert)。
在4.2版本以前,DET(Development Error Tracer)开发错误追踪器。显然,其名字已经非常明确了它的定位,就是开发阶段的开发错误追踪器,再直白点,简单来说对应代码,一般就是对各个模块的函数参数进行检查或者上下文环境检测等,看看是否合法,比如,函数的输入参数是一个指针类型,看看是否为空指针;或者函数的输入参数的取值是否超过取值范围等。
但是从4.2版本开始,DET(Default Error Tracer)的角色发生了变化。虽然DET模块的缩略语为DET,但是已然不是曾经的DET。因为这里的Default不但包含了以前的Development,还新增加了Runtime Error,Transient Fault,Production Errors,Extended Production Error等函数API接口。
按照我们通常的理解,以前的Development理论上其关注点就在开发阶段,那么测试完成发布Release以后,理论上是可以将其关闭的,本身AUTOSAR的效率一直饱受病垢,关闭DET功能会提升很多效率。但是现在改为Default后,它不再只关注开发阶段,运行时(Runtime)也要关注,所以我们就不能在发布时将其关闭。
由于每个功能函数/模块对错误检测/处理的需求不一样,所以这个模块和其他模块还有点区别,就是这个模块虽然提供了标准的API接口,但是并没有规定这些API里面具体需要干什么,完全有开发者/设计者来决定(比如,当错误发生时,在里面设置调式断点让代码停下,以便调试;对错误进行计数;发生运行时错误后,使用默认值去替换以便能继续运行;记录日志调试成功及参数存储到缓存RAM,类似于堆栈信息;通过通信接口发送错误信息到ECU外部客户端以便分析)。
虽然协议没有规定每个函数体具体需要实现什么,但是其规定了一些基本信息/规则/机制。对于某个发生的错误,你需要告诉DET模块这个错误是哪个模块