图解AUTOSAR_CP_DiagnosticLogAndTrace
AUTOSAR 诊断日志和跟踪(DLT)模块详解
目录
- 1. 概述
- 2. DLT模块架构
- 2.1 模块位置
- 2.2 内部组件
- 2.3 接口定义
- 3. DLT操作流程
- 3.1 初始化流程
- 3.2 日志和跟踪消息处理
- 3.3 控制命令处理
- 4. 数据结构与配置模型
- 4.1 配置类
- 4.2 消息格式
- 4.3 内部数据结构
- 5. 状态机
- 5.1 状态转换
- 5.2 消息处理状态
- 5.3 命令处理状态
- 6. 总结
1. 概述
AUTOSAR 诊断日志和跟踪(DLT)模块是AUTOSAR经典平台中的一个关键服务模块,用于收集、格式化和传输软件组件和基础软件模块的日志和跟踪信息。DLT模块提供了一个标准化的机制,支持ECU上的应用进行调试、诊断和性能监控,尤其在开发阶段和测试阶段具有重要价值。
DLT模块的主要功能包括:
- 提供统一的日志和跟踪消息接口
- 支持不同级别的日志过滤
- 实现消息的格式化和缓存
- 通过通信接口传输日志到外部工具
- 处理来自外部的控制命令
- 管理应用程序上下文和日志级别
在AUTOSAR标准中,DLT模块遵循AUTOSAR R21-11规范,按照Log and Trace Protocol进行消息封装和传输。
2. DLT模块架构
2.1 模块位置
DLT模块位于AUTOSAR软件架构的服务层,与其他诊断相关模块如DEM(诊断事件管理器)和DCM(诊断通信管理器)相邻,但功能各有侧重。DLT主要关注开发诊断需求,而非运行时监控。
2.2 内部组件
DLT模块内部由多个功能组件组成,各负责不同的功能:
2.2.1 架构图解析
以上架构图展示了DLT模块的整体结构和与其他模块的交互关系。图中主要包含以下几个部分:
-
应用层:
- 应用软件组件(SW-C):使用DLT服务发送日志和跟踪消息
- VFB跟踪钩子函数:用于RTE层通信数据的隐式跟踪
-
RTE层:
- 运行时环境(RTE):连接应用层与基础软件层,传递VFB跟踪数据
-
服务层-DLT模块内部组件:
- 日志和跟踪接口:提供API供软件组件使用
- 过滤器管理:基于配置过滤不同级别的消息
- 缓冲区管理:处理消息的缓存和溢出策略
- 消息格式化:将原始数据转换为标准DLT消息格式
- 命令处理器:处理外部工具发送的控制命令
- 会话管理:管理应用和上下文ID的注册
-
ECU抽象层:
- PDU路由器:负责消息的传输路由
-
其他服务模块:
- NVRAM管理器:存储持久化配置
- 通用定时器:提供时间戳
- 同步时间基管理器:提供全局同步时间
- 默认错误追踪器:处理开发错误报告
2.3 接口定义
DLT模块提供了多个接口用于与其他组件交互:
- DltService接口:供软件组件调用,发送日志和跟踪消息
- LogTraceSessionControl接口:通知软件组件日志级别和跟踪状态变化
- VFB跟踪接口:接收RTE层的VFB通信数据
- PDU路由接口:与通信栈交互,发送消息到外部工具
- 其他服务接口:与NvM、GPT、StbM和DET等模块交互
3. DLT操作流程
DLT模块的操作涉及多个参与者之间的交互,包括软件组件、DLT模块、PDU路由器、外部工具等。下图展示了DLT模块的主要操作序列:
3.1 初始化流程
初始化流程主要包括以下步骤:
- 上下文注册:软件组件通过调用
Dlt_RegisterContext
函数注册应用ID和上下文ID - 初始化内部数据结构:DLT模块创建和初始化用于管理应用和上下文的数据结构
- 通知外部工具:通过发送
GetLogInfo
控制消息通知外部工具有新的上下文注册(可选功能)
3.2 日志和跟踪消息处理
日志和跟踪消息处理流程如下:
- 消息发送:软件组件调用
Dlt_SendLogMessage
或Dlt_SendTraceMessage
函数发送消息 - 过滤检查:DLT模块根据当前配置的日志级别和跟踪状态过滤消息
- 消息格式化:对通过过滤的消息添加时间戳等头信息并进行格式化
- 消息传输:将格式化后的消息通过PDU路由器发送到外部工具
3.3 控制命令处理
外部工具可以发送控制命令到DLT模块,处理流程如下:
- 命令接收:DLT模块接收来自外部工具的控制命令(如
SetLogLevel
) - 命令执行:解析命令内容并执行相应操作,如更新日志级别
- 配置持久化:如需要,通过NVM管理器保存更新后的配置
- 通知软件组件:向受影响的软件组件发送日志级别或跟踪状态变化通知
- 响应返回:向外部工具发送命令执行结果
4. 数据结构与配置模型
DLT模块的配置模型和数据结构定义了模块的可配置参数和运行时数据组织方式。以下是DLT模块的配置模型和主要数据结构:
4.1 配置类
DLT模块的配置主要包含以下几个部分:
-
DltGeneral:
DltDevErrorDetect
:是否启用开发错误检测DltVersionInfoApi
:是否支持版本信息APIDltDefaultLogLevel
:默认日志级别DltDefaultTraceStatus
:默认跟踪状态DltRingBufferSize
:环形缓冲区大小DltGeneralBufferOverflowStrategy
:缓冲区溢出策略(拒绝或覆盖)DltGeneralNvRamSupport
:是否支持配置持久化DltGeneralRegisterContextNotification
:是否在上下文注册时通知外部工具
-
DltLogChannel:
DltLogChannelId
:日志通道IDDltLogChannelName
:日志通道名称DltLogChannelThreshold
:日志通道过滤阈值DltLogChannelEnable
:是否启用该日志通道
-
DltSwc和DltSwcContext:
DltSwcId
:软件组件IDDltSwcName
:软件组件名称DltSwcSupportLogLevelAndTraceStatusChangeNotification
:是否支持日志级别变化通知DltSwcContextId
和DltSwcApplicationId
:预配置的上下文ID和应用ID
4.2 消息格式
DLT消息由以下主要结构组成:
-
消息信息结构:
Dlt_MessageLogInfoType
:包含日志级别、应用ID、上下文ID和时间戳Dlt_MessageTraceInfoType
:包含跟踪状态、应用ID、上下文ID和时间戳
-
消息头结构:
Dlt_StdHeaderType
:标准头,包含消息计数器、长度、ECU ID等Dlt_ExtHeaderType
:扩展头,包含消息信息、应用ID和上下文ID
4.3 内部数据结构
DLT模块内部使用多种数据结构管理运行时信息:
-
上下文管理:
Dlt_ContextEntryType
:存储已注册的应用ID、上下文ID及其日志级别和跟踪状态
-
缓冲区管理:
Dlt_RingBufferType
:实现环形缓冲区,管理消息的存储和读取
-
控制消息处理:
Dlt_ControlMessageType
:表示从外部工具接收的控制命令
5. 状态机
DLT模块的行为可以用状态机来描述,展示模块在不同状态下的行为和转换条件:
5.1 状态转换
DLT模块的主要状态包括:
-
未初始化状态:
- 模块配置尚未加载
- 无法处理日志和跟踪消息
- 可能在启动阶段缓存消息
-
初始化状态:
- 读取配置
- 初始化缓冲区和内部数据结构
- 设置初始消息计数器
-
运行状态:
- 处理日志和跟踪消息
- 响应控制命令
- 管理上下文注册
5.2 消息处理状态
运行状态中消息处理的子状态包括:
- 接收消息:接收软件组件发送的日志或跟踪消息
- 过滤消息:根据配置的日志级别或跟踪状态过滤消息
- 格式化消息:为通过过滤的消息添加头信息并格式化
- 发送消息:将消息发送到PDU路由器
- 丢弃消息:对未通过过滤的消息执行丢弃操作
5.3 命令处理状态
运行状态中控制命令处理的子状态包括:
- 解析命令:解析接收到的控制命令内容
- 执行命令:根据命令类型执行相应操作
- 更新配置:更新日志级别或跟踪状态等配置
- 持久化配置:将配置变更保存到非易失性存储器
- 创建响应:生成命令执行结果的响应消息
6. 总结
AUTOSAR 诊断日志和跟踪(DLT)模块是AUTOSAR经典平台中不可或缺的诊断和调试工具,为软件开发人员提供了强大的日志和跟踪功能。通过本文的详细解析,我们了解了DLT模块的以下几个关键方面:
-
架构设计:
- 模块位于服务层,连接应用软件与底层通信
- 内部由多个功能组件组成,各司其职
- 提供标准化接口与其他组件交互
-
操作流程:
- 支持应用上下文的注册与注销
- 实现日志和跟踪消息的过滤、格式化和传输
- 处理外部工具的控制命令
-
配置模型:
- 提供灵活的配置选项,支持多种使用场景
- 通过日志通道和过滤阈值实现精细控制
- 支持配置持久化和动态更新
-
状态管理:
- 定义清晰的状态转换逻辑
- 细分消息处理和命令处理的子状态
- 保证模块行为的一致性和可预测性
DLT模块的主要优势包括:
- 标准化接口:提供统一的日志和跟踪接口,简化应用开发
- 可配置性:支持灵活配置,适应不同的诊断需求
- 高效过滤:通过多级过滤机制减少不必要的消息处理和传输
- 实时控制:支持运行时更新日志级别和跟踪状态
- 完善的协议:基于标准化的Log and Trace Protocol,确保工具兼容性
作为AUTOSAR经典平台的重要组成部分,DLT模块极大地提升了车载软件的可调试性和可诊断性,对于复杂ECU软件的开发和测试具有重要价值。