当前位置: 首页 > news >正文

AUTOSAR图解==>AUTOSAR_SWS_DefaultErrorTracer

AUTOSAR 默认错误追踪器(Default Error Tracer)详细分析

基于AUTOSAR 4.4.0规范的深入解析

目录

  1. 概述
    1. DET模块的作用
    2. DET模块的定位
  2. 架构设计
    1. 模块架构
    2. 接口设计
  3. 状态与行为
    1. 状态转换
    2. 错误报告流程
  4. API与数据结构
    1. API概览
    2. 数据类型定义
  5. 配置与扩展
    1. 模块配置
    2. 回调机制
  6. 总结

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模块具有两个主要状态:

  1. 未初始化状态

    • 在调用Det_Init()之前,DET处于此状态
    • 此状态下,所有错误报告API都会立即返回,不执行任何操作
    • 不调用任何回调函数,不执行任何错误处理逻辑
    • 确保在模块初始化前的错误报告不会导致系统崩溃
  2. 已初始化状态

    • 调用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 初始化流程

初始化流程相对简单:

  1. ECU管理模块调用Det_Init()初始化DET模块
  2. DET模块完成内部数据结构的初始化
  3. 可选地,ECU管理模块调用Det_Start()启动DET模块的额外功能
3.2.2 开发错误报告流程

当BSW或应用模块检测到开发错误时:

  1. 模块调用Det_ReportError(ModuleId, InstanceId, ApiId, ErrorId)
  2. DET检查自身是否已初始化
  3. 如果未初始化,则立即返回
  4. 如果已初始化,检查是否配置了开发错误回调函数
  5. 如果配置了回调函数,则调用所有配置的回调函数
  6. 如果配置了DLT功能,则向DLT模块转发错误信息
  7. 返回E_OK给调用者
3.2.3 运行时错误和瞬时故障报告流程

运行时错误和瞬时故障的报告流程与开发错误类似,主要区别在于:

  • 使用不同的API函数:Det_ReportRuntimeErrorDet_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:模块ID
      • InstanceId:模块实例ID
      • ApiId:API函数ID
      • ErrorId:错误类型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:供应商ID
      • uint16 moduleID:模块ID
      • uint8 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:是否启用去初始化API
  • DET_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的工作原理和使用方法,确保系统具有良好的错误检测和处理能力。

http://www.xdnf.cn/news/2719.html

相关文章:

  • 计算机网络 - UDP协议
  • 4.15BUUCTF Ez_bypass,HardSQL,AreUSerialz,BabyUpload,CheckIn
  • 【Docker】运行错误提示 unknown shorthand flag: ‘d‘ in -d ----详细解决方法
  • jQuery入门和选择器
  • JavaScript-立即执行函数(Immediately Invoked Function Expression,IIFE)
  • 【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记
  • dumpsys--音频服务状态信息
  • ASP.NET Core Web API 配置系统集成
  • 解决 VSCode 中 NVM 配置后无法识别 Node 和 NPM 的问题
  • 京东3D空间视频生成技术探索与应用
  • 游戏引擎学习第230天
  • [图论]Kruskal
  • Windows快速切换屏幕/桌面
  • 如何自学机器学习?零基础到实战的完整路径
  • 超详细VMware虚拟机扩容磁盘容量-无坑版
  • 探索关系型数据库 MySQL
  • 驱动-自旋锁
  • opencv函数展示2
  • 4.17学习总结
  • 智能云图库-12-DDD重构
  • 【从零实现高并发内存池】thread cache、central cache 和 page cache 回收策略详解
  • DSO:牛津大学推出的物理一致性3D模型优化框架
  • Java与MySQL数据库连接的JDBC驱动配置教程
  • Java基础知识面试题(已整理Java面试宝典pdf版)
  • Operator 开发入门系列(一):Hello World
  • 什么是分库分表?
  • Linux中NFS服务设置
  • 《MySQL:MySQL表结构的基本操作》
  • 【天梯赛练习】L2-035 完全二叉树的层序遍历
  • 阿里云服务器的docker环境安装nacos--实践