AUTOSAR图解==>AUTOSAR_SWS_DefaultErrorTracer
AUTOSAR 默认错误追踪器(Default Error Tracer)详细分析
目录
- 概述
- DET模块的作用
- DET模块的定位
- 架构设计
- 模块架构
- 接口设计
- 状态与行为
- 状态转换
- 错误报告流程
- API与数据结构
- API概览
- 数据类型定义
- 配置与扩展
- 模块配置
- 回调机制
- 总结
1. 概述
1.1 DET模块的作用
默认错误追踪器(Default Error Tracer, DET)是AUTOSAR基础软件栈中的关键模块,主要负责接收、处理和报告系统中各个模块产生的开发错误、运行时错误和瞬时故障。DET模块为所有AUTOSAR软件模块提供了统一的错误报告机制,使开发人员能够在开发阶段和运行阶段追踪和定位系统中的问题。
DET通过标准化的API接口实现了错误信息的集中管理,支持以下关键功能:
- 接收并评估来自软件组件和BSW模块的错误消息
- 提供统一的错误报告API,简化错误处理流程
- 支持在开发阶段和运行时阶段的错误追踪
- 通过可配置的回调函数实现灵活的错误处理扩展
- 支持与DLT(诊断日志和追踪)模块的集成
1.2 DET模块的定位
在AUTOSAR基础软件架构中,DET模块属于服务层,但其功能被整个软件栈的所有层次使用,包括:
- 应用层(SWC):应用组件可以报告应用级错误
- 运行时环境(RTE):可以报告RTE内部错误
- 基础软件层(BSW):所有基础软件模块都使用DET报告开发错误
- 微控制器抽象层(MCAL):硬件相关模块使用DET报告驱动级错误
DET模块特别强调了错误报告的通用性,通过统一API使错误追踪与具体模块实现细节解耦,简化了系统调试和问题定位的复杂度。
2. 架构设计
2.1 模块架构
DET模块的整体架构设计体现了AUTOSAR的分层思想和模块化原则,下图展示了DET的主要组件及其与其他模块的关系:
2.1.1 核心组件
DET模块内部由以下几个核心组件组成:
- 错误处理核心:负责接收和处理各类型的错误报告,是DET的中央处理单元
- 错误回调处理:管理和调用配置的回调函数,实现可扩展的错误处理机制
- 错误存储:根据配置存储错误信息,支持错误历史查询
- 错误通知:负责将错误通知到其他模块(如DLT)或外部工具
2.1.2 外部接口
DET模块提供了六个主要的API接口:
Det_Init
:初始化DET模块Det_Start
:启动DET模块(可选)Det_ReportError
:报告开发错误Det_ReportRuntimeError
:报告运行时错误Det_ReportTransientFault
:报告瞬时故障Det_GetVersionInfo
:获取模块版本信息
2.1.3 外部依赖
DET模块主要与以下外部组件交互:
- ECU管理模块(ECU Manager):负责调用DET的初始化和启动函数
- 诊断日志与追踪(DLT):接收DET转发的错误信息,用于高级诊断
- 错误回调函数:由集成商实现,用于自定义错误处理逻辑
- 调试工具:通过DET接口获取错误信息,辅助调试
2.2 接口设计
DET模块的接口设计遵循AUTOSAR的标准化原则,所有接口都有明确定义的参数和返回值。这些接口设计考虑了以下几个关键因素:
- 通用性:接口适用于所有模块类型,包括应用模块和基础软件模块
- 可配置性:通过配置可以启用或禁用错误报告和回调功能
- 轻量级:接口实现简单,运行开销小
- 可扩展性:支持通过回调机制扩展错误处理功能
接口参数的设计也很有特点,如:
ModuleId
:报告错误的模块ID,用于标识错误来源InstanceId
:模块实例ID,用于区分同一模块的不同实例ApiId
:API函数ID,指明错误发生在哪个API函数中ErrorId
:错误类型ID,指明具体的错误类型
3. 状态与行为
3.1 状态转换
DET模块在运行过程中具有不同的状态,这些状态决定了模块如何处理接收到的错误报告请求。下图展示了DET模块的状态机:
3.1.1 主要状态
DET模块具有两个主要状态:
-
未初始化状态:
- 在调用
Det_Init()
之前,DET处于此状态 - 此状态下,所有错误报告API都会立即返回,不执行任何操作
- 不调用任何回调函数,不执行任何错误处理逻辑
- 确保在模块初始化前的错误报告不会导致系统崩溃
- 在调用
-
已初始化状态:
- 调用
Det_Init()
后进入此状态 - 可以正常处理错误报告请求
- 根据配置调用对应的回调函数
- 可选地与DLT模块交互,转发错误信息
- 调用
3.1.2 子状态
在已初始化状态下,DET模块还有一些子状态:
- 等待错误报告:DET正常运行,等待错误报告请求
- 处理错误报告:DET正在处理接收到的错误报告
- 开发错误报告:处理
Det_ReportError
调用 - 运行时错误报告:处理
Det_ReportRuntimeError
调用 - 瞬时故障报告:处理
Det_ReportTransientFault
调用
- 开发错误报告:处理
3.1.3 回调执行状态
DET在处理错误报告时,如果配置了回调函数,会进入以下回调执行状态之一:
- 执行开发错误回调:调用为开发错误配置的回调函数
- 执行运行时错误回调:调用为运行时错误配置的回调函数
- 执行瞬时故障回调:调用为瞬时故障配置的回调函数
3.2 错误报告流程
DET模块的核心功能是处理错误报告,下图展示了错误报告的序列流程:
3.2.1 初始化流程
初始化流程相对简单:
- ECU管理模块调用
Det_Init()
初始化DET模块 - DET模块完成内部数据结构的初始化
- 可选地,ECU管理模块调用
Det_Start()
启动DET模块的额外功能
3.2.2 开发错误报告流程
当BSW或应用模块检测到开发错误时:
- 模块调用
Det_ReportError(ModuleId, InstanceId, ApiId, ErrorId)
- DET检查自身是否已初始化
- 如果未初始化,则立即返回
- 如果已初始化,检查是否配置了开发错误回调函数
- 如果配置了回调函数,则调用所有配置的回调函数
- 如果配置了DLT功能,则向DLT模块转发错误信息
- 返回
E_OK
给调用者
3.2.3 运行时错误和瞬时故障报告流程
运行时错误和瞬时故障的报告流程与开发错误类似,主要区别在于:
- 使用不同的API函数:
Det_ReportRuntimeError
或Det_ReportTransientFault
- 调用的回调函数不同:运行时错误回调或瞬时故障回调
- 回调函数的返回值可能会被传递给调用者,而不总是返回
E_OK
4. API与数据结构
4.1 API概览
DET模块提供了一组清晰定义的API,下图展示了DET的API和数据结构:
4.1.1 初始化和启动API
-
Det_Init
- 函数原型:
void Det_Init(const Det_ConfigType* ConfigPtr)
- 功能:初始化DET模块
- 参数:指向配置数据的指针
- 返回值:无
- 重入性:非重入
- 函数原型:
-
Det_Start
- 函数原型:
void Det_Start(void)
- 功能:启动DET模块(可选功能)
- 参数:无
- 返回值:无
- 重入性:非重入
- 函数原型:
4.1.2 错误报告API
-
Det_ReportError
- 函数原型:
Std_ReturnType Det_ReportError(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId)
- 功能:报告开发错误
- 参数:
ModuleId
:模块IDInstanceId
:模块实例IDApiId
:API函数IDErrorId
:错误类型ID
- 返回值:
Std_ReturnType
(通常为E_OK
) - 重入性:可重入
- 函数原型:
-
Det_ReportRuntimeError
- 函数原型:
Std_ReturnType Det_ReportRuntimeError(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId)
- 功能:报告运行时错误
- 参数:同
Det_ReportError
- 返回值:如果配置了回调,则返回回调的返回值;否则返回
E_OK
- 重入性:可重入
- 函数原型:
-
Det_ReportTransientFault
- 函数原型:
Std_ReturnType Det_ReportTransientFault(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 FaultId)
- 功能:报告瞬时故障
- 参数:同
Det_ReportError
,但最后一个参数为FaultId
- 返回值:如果配置了回调,则返回回调的返回值;否则返回
E_OK
- 重入性:可重入
- 函数原型:
4.1.3 版本信息API
Det_GetVersionInfo
- 函数原型:
void Det_GetVersionInfo(Std_VersionInfoType* versioninfo)
- 功能:获取DET模块的版本信息
- 参数:指向版本信息结构的指针
- 返回值:无
- 重入性:可重入
- 函数原型:
4.2 数据类型定义
DET模块使用以下几个关键数据类型:
-
Det_ConfigType
:- 用途:DET模块的配置数据结构
- 内容:实现特定,由集成商定义
-
Std_ReturnType
:- 用途:标准返回类型
- 值:
E_OK (0x00)
:成功E_NOT_OK (0x01)
:错误
-
Std_VersionInfoType
:- 用途:版本信息结构
- 成员:
uint16 vendorID
:供应商IDuint16 moduleID
:模块IDuint8 sw_major_version
:软件主版本号uint8 sw_minor_version
:软件次版本号uint8 sw_patch_version
:软件补丁版本号
-
Det_DevelopmentErrorType
:- 用途:DET自身的开发错误类型
- 值:
DET_E_PARAM_POINTER (0x01)
:空指针错误
5. 配置与扩展
5.1 模块配置
DET模块的配置主要通过以下机制实现:
5.1.1 预编译配置
通过预处理器宏和头文件配置,主要包括:
DET_DEV_ERROR_DETECT
:是否启用开发错误检测DET_FORWARD_TO_DLT
:是否将错误转发到DLT模块DET_USE_RAMLOG
:是否使用RAM日志功能DET_DEINIT_API
:是否启用去初始化APIDET_VERSION_INFO_API
:是否启用版本信息API
5.1.2 链接时配置
通过链接不同的实现文件实现配置,主要包括:
- 选择不同的错误处理策略实现文件
- 选择不同的错误存储实现文件
- 选择是否包含与DLT集成的代码
5.1.3 后编译配置
通过配置工具生成的配置结构传递给Det_Init
函数:
DetErrorHook
:开发错误回调函数数组DetReportRuntimeErrorCallout
:运行时错误回调函数数组DetReportTransientFaultCallout
:瞬时故障回调函数数组- 其他实现特定的配置参数
5.2 回调机制
DET模块的一个重要特性是可配置的回调机制,允许集成商扩展错误处理功能:
5.2.1 回调函数类型
DET支持三种类型的回调函数:
-
DetErrorHook
:- 函数原型:
Std_ReturnType DetErrorHook(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId)
- 用途:处理开发错误
- 函数原型:
-
DetReportRuntimeErrorCallout
:- 函数原型:
Std_ReturnType DetReportRuntimeErrorCallout(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId)
- 用途:处理运行时错误
- 函数原型:
-
DetReportTransientFaultCallout
:- 函数原型:
Std_ReturnType DetReportTransientFaultCallout(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 FaultId)
- 用途:处理瞬时故障
- 函数原型:
5.2.2 回调机制的用途
回调函数可以实现多种自定义错误处理策略,例如:
- 将错误记录到非易失性存储器
- 触发系统复位或安全模式
- 发送错误通知到远程诊断设备
- 激活备用功能或降级模式
- 在调试器中设置断点
5.2.3 回调配置
回调函数通过AUTOSAR配置工具配置,每种类型的回调可以配置多个,按照配置的顺序调用。配置参数包括:
DetErrorHook
:指向开发错误回调函数的指针数组DetReportRuntimeErrorCallout
:指向运行时错误回调函数的指针数组DetReportTransientFaultCallout
:指向瞬时故障回调函数的指针数组
6. 总结
AUTOSAR默认错误追踪器(DET)作为AUTOSAR软件栈中的核心服务模块,通过提供统一的错误报告和处理机制,大大简化了系统调试和错误处理的复杂度。DET模块具有以下主要特点:
- 统一接口:为所有模块提供一致的错误报告API,简化集成
- 灵活配置:支持多种配置方式,适应不同的项目需求
- 可扩展性:通过回调机制支持自定义错误处理策略
- 层次独立:可被所有软件层次使用,包括应用层、RTE和BSW
- 轻量高效:设计简洁,运行开销小
- 标准兼容:完全符合AUTOSAR标准,提高代码可移植性
DET模块的设计体现了AUTOSAR的核心理念:标准化、模块化和可配置性。通过集中处理各类错误,DET使开发人员能够更加专注于业务逻辑的实现,提高了开发效率和代码质量。同时,DET的可扩展设计也为系统集成商提供了灵活定制错误处理策略的能力,满足不同项目的特定需求。
在AUTOSAR系统开发中,充分理解和正确使用DET模块是提高软件质量和可靠性的关键因素之一。无论是模块开发者还是系统集成商,都应该熟悉DET的工作原理和使用方法,确保系统具有良好的错误检测和处理能力。