AUTOSAR_SWS_DiagnosticLogAndTrace
Specification of Diagnostic Log and Trace
简介和功能概述
该规范描述了 AUTOSAR 基础软件模块 Dlt 的功能和配置。
它接收来自 DET、DEM、软件组件的 Log 信息或 RTE 的 Trace 信息。Dlt 模块通过通信总线传输此数据,以使此信息在 ECU 外部可见。
为此,Dlt 模块定义了 API 在总线上发送和接收专用 Log/Trace 信息。
此外,NvM 模块还可选择被用于持久地存储 Dlt 模块的更新过滤器的设置。这使 ECU 能够传输(所需的)特定级别的 Log/Trace 信息,而无需在每次 ECU 启动时,通过 Log 记录工具从通信总线发出明确的设置请求。
Dlt 模块位于 PduR 顶部,RTE 下方,如 1.1 所示。
注意:
- Dlt 消息格式
- 可用命令
- 协议(用于与外部 Log 和 Trace 工具通信)
首字母缩略词和缩写
约束
VFB Trace 仅支持非冗余模式。即,Dlt 模块将以原始格式发送参数,只需将参数复制到 Trace 消息的内存中即可。
Dlt 数据类型模型不支持任意嵌套的复杂数据类型,而 AUTOSAR 却支持。
- 因此,没有通用方法将
- 提供给 VFB Trace 挂钩函数的参数
- 转换为
- 冗余模式所需的 Dlt 数据类型。
Dlt 模块无法生成 ASAM Fibex 描述,因为其内存表示可能不符合参数的 SWCD 数据类型的描述。
适用的汽车领域
该基础软件模块可用于所有汽车领域。
对其他模块的依赖
RTE
RTE(RTE 软件规范)(包括 VFB 和 BSW 调度程序)用于与软件组件交互以生成 Log 和 Trace 消息,并循环调用 Dlt 模块的 Tx 函数。
PduR
为了在通信总线上传输 Dlt 报文,Dlt 模块与 PduR(PDU 路由器)进行交互。
NvM
为了加载和存储变更的配置,如过滤器设置和/或 Log 通道的分配,可以选择使用 NvM 模块(NVRAM 管理器规范)。
GPT
为了获得时间戳,可以使用 GPT 模块。
StbM
为了获得标准/扩展格式的同步时间值(从全局时间基准派生的本地时间基准),可以使用 StbM 模块(同步时间基准管理器规范)来实现此目的。
DET
为了能够报告默认错误并将 DET 错误转发到通信总线,Dlt 模块必须与 DET 模块(默认错误跟踪器规范)交互。但是,与 DET 的交互是可选的。
DEM
为了能够报告开发错误并在通信总线上传输 DEM 事件,Dlt 模块必须使用 CDD 和/或软件组件与 DEM 模块(诊断事件管理器规范)进行交互。DEM 和 Dlt 之间没有标准化的交互。
需求可追溯性
Dlt 规范
以下章节描述了 Dlt 模块与软件组件、PduR 和外部客户端(Log 工具)交互所需的 AUTOSAR 特定数据和控制路径。
Dlt 命令
Dlt 协议指定了各种 Dlt 命令,这些命令由唯一的服务 ID 标识。Dlt 命令用于在运行时修改 Dlt 模块的行为,例如获取有关当前 Dlt 配置的信息或更改过滤器设置。
[SWS_Dlt_00643]
[RS_LT_00032]
注意:
定义的 Dlt 命令的布局(可通过 Dlt 控制消息接收)在 Log 和 Trace 协议规范中被定义。
Dlt 与软件组件的交互
Dlt 模块向软件组件提供可用于发送 Log 和 Trace 消息的接口,如 7.1 所示。
可选地,软件组件可以提供一个端口,用于通知 Log 级别的阈值和 Trace 状态的更改,这些端口由 Dlt 模块为
- DltSwcApplicationId
- DltSwcContextId
的每个元组单独提供。这些通知可用于避免软件组件早先生成的 Log 和 Trace 消息在之后被 Dlt 模块过滤。
由于 Dlt 模块支持软件组件的多个实例,它们使用相同的
- DltSwcApplicationId
- DltSwcContextId
元组,因此额外的 DltSwcSessionId 参数允许被用以区分来自同一软件组件的不同实例的 Log/Trace 消息。
为了从技术上将这些软件组件彼此区分开,并避免软件组件在调用
- SendLogMessage
- SendTraceMessage
时必须使用唯一的 DltSwcSessionId,Dlt 模块为每个配置的软件组件提供了一个专用的 PPortPrototype(参见配置参数 DltSwcSessionId),其中 SessionId 作为端口定义参数被管理。
如果配置的软件组件被标记为对 Log 级别和 Trace 状态的变更的通知感兴趣,则 Dlt 模块还会提供相应的 RPortPrototype 来通知相应的软件组件。
有关哪个软件组件负责哪个
- DltSwcApplicationId
- DltSwcContextId
元组的信息是
- 在软件组件中配置的
- 由软件组件在运行时通过分别调用以下接口被动态更新的。
- Dlt_RegisterContext
- Dlt_UnregisterContext
[SWS_Dlt_00644]
[ ]
- Dlt 模块应为每个配置的软件组件提供一个 PPortPrototype SwcMessageService,由接口 DltSwcMessageService 类型化(参见 DltSwc)。
[SWS_Dlt_00645]
[ ]
- 由接口 DltSwcMessageService 类型化的 PPortPrototype SwcMessageService 具有类型为 Dlt_SessionIDType 的端口定义参数。
[SWS_Dlt_00646]
[ ]
- Dlt 模块应为每个配置的软件组件(参见配置容器 DltSwc)提供一个 RPortPrototype SessionControlCallback,由接口 LogTraceSessionControl 类型化,其中配置参数 DltSwcSupportLogLevelAndTraceStatusChangeNotification 被设置为 TRUE。
[SWS_Dlt_00647]
[ ]
- 如果需要从配置参数 DltSwcContext 中被推断出来的 Log 级别或 Trace 状态发生了变化,软件组件负责的
- DltSwcApplicationId
- DltSwcContextId
- 元组应被通知。
在 Dlt 中注册 ApplicationId 和 ContextId
Dlt 模块能够通知软件组件有关 Log 级别变更的信息。为此,它们必须在运行时使用
- DltSwcApplicationId
- DltSwcContextId
元组在 Dlt 模块上注册。
注意:
由于软件组件的开发是本规范的一部分,因此 Dlt 模块必须在运行时收集此信息。
[SWS_Dlt_00765]
[ ]
- Dlt 模块应记住向 Dlt 模块注册的软件组件的所有
- DltSwcApplicationId
- DltSwcContextId
- 元组。
[SWS_Dlt_00766]
[ ]
- Dlt 模块应管理每个
- DltSwcApplicationId
- DltSwcContextId
- 元组的 Log 级别和 Trace 状态。
注意:
此外,动态注册使 Dlt 模块支持查看哪些软件组件/运行实体处于活动状态以及哪些不处于活动状态。这对于在 Log 级别或 Trace 状态发生变化时知道要通知哪个软件组件至关重要。
当软件组件调用 DltSwcMessageService 接口的 Dlt_RegisterContext 方法时,会向 Dlt 模块提供端口定义的参数值 SessionId。
该端口定义的参数值对应于软件组件/运行实体的 LogTraceSessionControl 接口,用于向软件组件/运行实体提供有关 Log 级别变化的信息。
[SWS_Dlt_00021]
[RS_LT_00033]
- Dlt 模块应记住
- DltSwcApplicationId
- DltSwcContextId
- 的注册元组与该元组注册时所使用的端口接口之间的关系。
[SWS_Dlt_00768]
[ ]
- 如果参数 DltGeneralRegisterContextNotification 被设置为 TRUE,则每次调用 Dlt_RegisterContext 时,Dlt 模块都应发送包含被提供的
- DltSwcApplicationId
- DltSwcContextId
- 的 Dlt 控制消息 Dlt_GetLogInfo。
在 Dlt 中取消注册 ApplicationId 和 ContextId
如果软件组件即将停止,则应自行注销。此信息可用于通知外部客户端(例如 Log 记录设备)关于当前软件组件的状态。
[SWS_Dlt_00773]
[ ]
- Dlt 模块应从注册应用程序列表中删除所有向 Dlt 模块取消注册的软件组件的
- DltSwcApplicationId
- DltSwcContextId
- 元组。
注意:
对于这些元组,Dlt 模块将不再尝试通知相应的软件组件有关 Log 级别的变更。
[SWS_Dlt_00774]
[ ]
- 如果参数 DltGeneralRegisterContextNotification 被设置为 TRUE,则每次调用 Dlt_UnregisterContext 时,Dlt 模块都应发送包含被提供的
- DltSwcApplicationId
- DltSwcContextId
- 的 Dlt 控制消息 Dlt_GetLogInfo,并将参数状态设置为 5。
使用端口定义的参数值来定义 SessionId
对于
- Dlt_SendLogMessage
- Dlt_SendTraceMessage
- Dlt_RegisterContext
- Dlt_UnregisterContext
的每个函数调用,都需要提供一个端口定义的参数值。
[SWS_Dlt_00022]
[ ]
- 端口定义的参数值应被 Dlt 模块用作 SessionId。
注意:
Session 是软件组件的一部分,Log 级别监视器负责该部分。对于每个 Log 级别监视器,应使用相同的 SessionId(端口定义的参数值)。
[SWS_Dlt_00023]
[ ]
- 端口定义的参数值与定义的 SessionId 相对应。该值应从 0x1000 开始(对于 BSW 模块而言,该值为模块所占用的 ID)。
[SWS_Dlt_00332]
[ ]
- 连接到 Dlt 模块的软件组件的每个端口都应具有唯一的 SessionId 作为端口定义的参数。SessionId 的范围应是连续的。
VFB Trace
VFB Trace 在 RTE 中被指定。VFB Trace 的含义是将软件组件通信数据(流经 RTE)隐式(系统固有)转发到 Dlt 模块。在这种情况下,Trace 意味着软件组件没有显式调用来将此数据转发到 Dlt。本节描述了 RTE 与 Dlt 模块的交互以记录 VFB Trace 以及 Trace 数据的内部控制。
Dlt 为 VFB Trace 提供的接口
如果 Dlt 模块被用作 VFB Trace 客户端,则必须对 RTE 进行相应配置。这意味着必须将 RTE 配置参数 RteVfbTraceClientPrefix 配置为值“Dlt”。
配置(是否启用 VFB Trace 以及支持/激活哪些可 Trace 事件)仅在 RTE 模块中被配置。
然后,RTE 生成器根据其配置,在生成阶段为每个已配置的 VFB Trace 挂钩函数使用 BswModuleEntry 更新 RTE 基础软件模块描述。这些 BswModuleEntry 准确描述了已配置的 Trace 客户端必须提供的预期函数原型:
- 预期的函数的名称由 shortName 定义。
- 预期签名的其余部分由所包含的参数定义。
Dlt 模块必须为所有 BswModuleEntry 提供实现,这些实现由 RTE 的 BswModuleDescription 的属性 outgoingCallback 引用,其 shortName 以“Rte_Dlt”开头。
[SWS_Dlt_00284]
[RS_LT_00008]
- Dlt 模块应符合 AUTOSAR_RTE_SWS 中所描述的 VFB Trace。
[SWS_Dlt_00276]
[RS_LT_00009]
- Dlt 模块应支持跟踪 AUTOSAR_RTE_SWS 中所描述的所有类型的 Trace 事件的可能性。
[SWS_Dlt_00027]
[ ]
- 对于 BswModuleEntry 给出的每个配置事件,Dlt 模块应提供钩子函数的实现,它拥有一个以“Rte_Dlt”开头的 shortName,由 RTE 的 BswModuleDefinition 提供。
[SWS_Dlt_00335]
[ ]
- 这个钩子函数的原型是从 RTE 的基础软件模块描述的 BswModuleEntry 中获取的。
生成钩子函数
[SWS_Dlt_00285]
[RS_LT_00009]
- 由于 Dlt_SendTraceMessage 接口是软件组件接口,因此需要实现一个与Dlt_SendTraceMessage 等效的内部函数,以供生成的钩子函数调用。
[SWS_Dlt_00277]
[RS_LT_00009]
- 在钩子函数中,应调用 Dlt_SendTraceMessage 的内部表示。此调用应处于非详细模式。
[SWS_Dlt_00278]
[ ]
- 此钩子函数调用的有效载荷应由钩子函数提供的参数填充。应提供随参数传输的所有数据。
[SWS_Dlt_00632]
[ ]
- 参数数据应以原始格式写入有效载荷。
[SWS_Dlt_00279]
[ ]
- 每个钩子函数都应获得自己的 DltSwcContextId。在某些情况下,多个事件可以捆绑到同一个 ContextId 上。如果跟踪了大量信号,则应主要这样做。
[SWS_Dlt_00337]
[ ]
- ApplicationId 应为“VFBT”。
[SWS_Dlt_00484]
[ ]
- 生成的 Trace 消息中的消息类型(MSTP)条目应被设置为
- DLT_TYPE_APP_TRACE
- 此情况下的消息跟踪信息(MSTI)条目应被设置为
- DLT_TRACE_VFB
[SWS_Dlt_00280]
[ ]
- 因为使用了非详细模式,所以每次调用 Dlt_SendTraceMessage 时都应使用 [SWS_Dlt_00031] 中定义的唯一消息 ID。
注意:
应生成并提供消息 ID 有效负载的描述。此描述可从描述接口的软件组件描述文件中生成。
[SWS_Dlt_00281]
[ ]
- 在每个钩子函数中,应检查 ContextId 的 Trace 状态,例如:
/*
在调用 Dlt_SendTraceMessage 之前检查 ContextId 的 Trace 状态
“vfb_actual_trace_status_contextXY”保存特定 ContextId 的 Trace 状态
*/
if (vfb_actual_trace_status_contextXY) {
<internal_Dlt_SendTraceMessage>(...);
[SWS_Dlt_00282]
[ ]
- Dlt 应为每个 VFB Trace 挂钩函数使用(他们)自己的 DltSwcContextId,从而为每个 VFB Trace DltSwcContextId 单独处理 Trace 的状态。这可以通过使用单独的变量来完成。
[SWS_Dlt_00283]
[ ]
- 应实现一个单独的函数来修改 VFB Trace 挂钩函数的 Trace 状态。该函数应与软件组件 LogTraceSessionControl 接口协调一致。
来自 DEM 的 Log 消息
[SWS_Dlt_00377]
[ ]
- 为 DEM 事件发送的 Log 消息的 ApplicationId、ContextId 和 MessageId 应具有以下值:
ApplicationID = "DEM"
ContextId = "STD0"
MessageID = 0x00000001
来自 DET 的 Log 消息
软件组件和 BSW 模块可以向 DET 模块报告错误。可以使用 Dlt_DetForwardErrorTrace 将此类错误与适当内容组合并作为消息转发到 Dlt 模块。
注意:
DET 函数 Det_ReportError 的所有参数都通过 DET 扇出(Fan-Out)功能被转发到 Dlt 函数 Dlt_DetForwardErrorTrace。
[SWS_Dlt_00430]
[RS_LT_00006]
- Dlt 模块应提供 Dlt_DetForwardErrorTrace 函数来实现 DET 的扇出功能。
[SWS_Dlt_00376]
[ ]
- DET 发送的 Log 消息的 ApplicationId、ContextId 和 MessageId 应具有以下值:
ApplicationID = "DET"
ContextId = "STD"
MessageID = 0x00000002
LogLevel = "Error"
关于消息 ID 生成的建议
非详细消息的有效负载包含消息 ID。消息 ID 对于 ECU 来说必须是唯一的。
问题在于,消息 ID 由软件组件(Dlt 用户)提供,并且在编码 Log 和 Trace 消息的调用完成时,没有实例可以保证所用消息 ID 的唯一性。
一种可能的解决方案是将所有 Log 消息映射到虚拟内存段中,然后使用内存地址作为消息 ID。另一种解决方案是使用一个授权工具来负责消息 ID 的唯一性。
此外,可以在后期构建过程中修复消息 ID 值,从而可以保证对于 ECU 而言的唯一性。
为每个与消息 ID 相关的消息提供描述非常重要。
[SWS_Dlt_00031]
[ ]
- 用于 DEM(0x00000001)和 DET(0x00000002)以及 Trace(0x00000003)的消息的 MessageId 应被保留,因此不能用于软件组件。
Startup 行为
Dlt 模块指定了几个配置参数,可以在运行时通过 API 调用或通过 Dlt 控制消息进行重新配置。
这意味着,基于这些配置参数的数据结构必须在 Dlt 模块启动期间被加载到运行时变量中。
此外,即使 Dlt 模块本身尚未初始化,软件组件和/或 BSW 模块也可能已经生成 Log 和 Trace 数据。对于这种情况,Dlt 模块提供了缓冲这些数据的可能性,直到 Dlt 模块被初始化为止。
所描述的功能产生以下要求:
[SWS_Dlt_00003]
[RS_LT_00036]
- 即使 Dlt 模块尚未被初始化,Dlt 模块也应该能够缓冲来自 Dlt_SendLogMessage 和/或 Dlt_SendTraceMessage 调用的数据。
[SWS_Dlt_00648]
[ ]
- 当调用 Dlt_Init 时,应启动可选计时器 DltGeneralStartUpDelayTimer(如果已配置)。
[SWS_Dlt_00649]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被关闭,则应使用静态 Dlt 模块配置进行初始化。
[SWS_Dlt_00005]
[ ]
- 一旦 Dlt 模块由 Dlt_Init 初始化,并且可选计时器 DltGeneralStartUpDelayTimer 到期,则所有已缓冲的 Log 和 Trace 数据都应根据 [SWS_Dlt_00651] 来使用配置的过滤器设置进行处理。
配置的持久存储
Dlt 模块提供了在 NVRamManager 模块中存储配置数据的可能性。因此,建议仅在 NVRamManager 模块初始化后才调用 Dlt_Init 函数。
Dlt 模块的持久性功能支持配置值的非易失性保存,这些配置值可以在运行时被修改。
这个想法是允许在运行时定制 Log 配置,并确保在 ECU 重置或重启后恢复此配置。
[SWS_Dlt_00451]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被设置为 TRUE,则 Dlt 模块应使用非易失性内存块来持久地存储当前的 Dlt 配置。
[SWS_Dlt_00449]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被设置为 TRUE,则 Dlt 模块必须验证所使用的非易失性内存块的有效性。
[SWS_Dlt_00350]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被设置为 TRUE,则应使用存储在非易失性内存块中的 Dlt 配置作为初始值。
注意:
本例中的初始值是 ECU 首次启动时需要被持久地存储的值的初始值。
[SWS_Dlt_00078]
[RS_LT_00039]
- 仅当参数 DltGeneralNvRAMSupport 被设置为 TRUE 并且 Dlt 命令 Dlt_StoreConfiguration 明确请求存储时,才可将当前的配置存储到 NvRAM 中。
注意:
要将当前配置存储到 NvRAM,请使用 API NvM_WriteBlock。
发送 Log 和 Trace 消息
Dlt 数据路径描述了 Dlt Log 和 Trace 消息从源头到接收器的流程。源头可以是软件组件或 BSW 模块,而 PDU 路由器代表接收器。
图 7.2 概述了在通信总线上发送 Dlt 消息的各个步骤:
Log 和 Trace 消息的发送是通过专用函数 Dlt_SendLogMessage 和 Dlt_SendTraceMessage 完成的。
有两个附加函数允许为 Log 和 Trace 消息提供附加属性。这两个函数分别名为 Dlt_SendLogMessageWithAttributes 和 Dlt_SendTraceMessageWithAttributes。这两个函数是前面提到的函数的纯超集,它们在标准中被保留以实现向后兼容性和便捷性,适用于不需要附加属性的常见情况。
请注意,在本文档的整个过程中,每当提到
- Dlt_SendLogMessage
- Dlt_SendTraceMessage
函数时,除非另有说明,否则需要将其理解为
- Dlt_SendLogMessage 或 Dlt_SendLogMessageWithAttributes
- Dlt_SendTraceMessage 或 Dlt_SendTraceMessageWithAttributes
的简写符号。
[SWS_Dlt_00787]{DRAFT}
[ ]
- 调用函数 Dlt_SendLogMessageWithAttributes 并将 Attributes 参数设置为 NULL 应等同于调用函数 Dlt_SendLogMessage 并使用其余参数。
[SWS_Dlt_00782]{DRAFT}
[ ]
- 调用函数 Dlt_SendTraceMessageWithAttributes 并将 Attributes 参数设置为 NULL 应等同于调用函数 Dlt_SendTraceMessage 并使用其余参数。
[SWS_Dlt_00783]{DRAFT}
[ ]
- 如果配置参数 DltProtocolVersion 被设置为 1,则对 Dlt_SendLogMessageWithAttributes 或 Dlt_SendTraceMessageWithAttributes 的调用(其中 Attributes 参数为非 NULL)将返回 DLT_E_NOT_SUPPORTED。
[SWS_Dlt_00650]
[ ]
- 在调用 Dlt_SendLogMessage 或 Dlt_SendTraceMessage 的上下文中,以下步骤描述了逻辑顺序:
- 生成时间戳(参见章节“生成时间戳”)
- 消息过滤(参见章节“消息过滤”)
- 选择目标 LogChannel(参见章节“选择目标 LogChannel”)
- 检查消息长度(参见章节“检查消息长度”)
- 应用当前 LogChannel 的阈值(参见章节“应用 LogChannel LogLevelThreshold”)
- 将 Dlt 消息复制到 LogChannel 的特定缓冲区(参见章节“将 Dlt 消息复制到 LogChannel 缓冲区”)
- 应用消息的 Attributes(如果存在且受支持)(请参阅章节“应用消息的 Attributes(如果存在且受支持)”)
注意:
由于实施中的优化,顺序可能会发生改变。例如,典型的优化可能是,Dlt 模块为每个 Dlt 消息创建的 Dlt 标头不会被保存到每个 Dlt 消息的 LogChannel 的特定缓冲区中,而是在将消息发送到 PduR 之前直接动态创建。
[SWS_Dlt_00651]
[ ]
- 在对 Dlt_SendLogMessage 或 Dlt_SendTraceMessage 的调用的上下文中,以下步骤必须被推迟(分离)执行:
- 根据 TrafficShaping 的设置向 PduR 发送 Dlt 消息(参见章节“从 LogChannel 缓冲区发送消息”)
- 根据消息头设置创建 Dlt 消息头(参见章节“创建 Dlt 消息头”)
- 从 LogChannel 的特定缓冲区中删除 Dlt 消息(参见章节“从 LogChannel 缓冲区中删除消息”)
生成时间戳
根据当前的配置,可能会将时间戳添加到 Dlt 消息中。
[SWS_Dlt_00652]
[ ]
- 只有当参数 DltHeaderUseTimestamp 被设置为 TRUE 时,Dlt 模块才会获取时间戳。
[SWS_Dlt_00653]
[ ]
- 如果参数 DltHeaderUseTimestamp 被设置为 TRUE,但 Dlt 模块由于某种原因无法获取时间戳,则时间戳应被设置为 0x00000000。
[SWS_Dlt_00654]
[ ]
- 如果参数 DltHeaderUseTimestamp 被设置为 TRUE,并且配置了 DltGeneralGptChannelRef,则 Dlt 模块应使用配置的通道引用(参见 DltGeneralGptChannelRef)调用 API Gpt_GetTimeElapsed 来获取经过的时间。
[SWS_Dlt_00655]
[ ]
- 如果参数 DltHeaderUseTimestamp 被设置为 TRUE,并且配置了 DltGeneralStbMTimeBaseRef,则 Dlt 模块应使用配置的时间基准引用调用 API StbM_GetCurrentTime(参见 DltGeneralStbMTimeBaseRef)来获取当前同步的时间并计算经过的时间。
消息过滤
消息过滤意味着根据分配给该消息的
- DltSwcApplicationId
- DltSwcContextId
元组来选择接受还是丢弃此次传入的 Log 或 Trace 消息。
Log 消息(Dlt_SendLogMessage)和 Trace 消息(Dlt_SendTraceMessage)之间的过滤略有不同。
[SWS_Dlt_00656]
[ ]
- 对于 Dlt Log 消息,最高级别的 LogLevel 阈值应被定义为 DLT_LOG_VERBOSE。
[SWS_Dlt_00657]
[ ]
- 对于 Dlt Log 消息,最低级别的 LogLevel 阈值应被定义为 DLT_LOG_OFF。
注意:
Dlt_MessageLogLevelType 定义了所有可能的 Log 消息过滤级别。
[SWS_Dlt_00658]
[ ]
- 对于 Log 消息过滤,Dlt 内部管理了 LogLevel 阈值到
- DltSwcApplicationId
- DltSwcContextId
- 元组的映射(参见配置参数 DltLogLevelThreshold)。
[SWS_Dlt_00659]
[ ]
- 对于 Trace 消息过滤,Dlt 在内部管理了 Trace 激活状态到
- DltSwcApplicationId
- DltSwcContextId
- 元组的映射(参见配置参数 DltTraceStatusAssignment)。
注意:
查找正确的映射元素(Log 消息中包含 LogLevel 阈值,Trace 消息中包含 Trace 激活状态)的匹配算法对于 Log 消息和 Trace 消息而言是相同的。
[SWS_Dlt_00661]
[ ]
- 对于 Dlt_SendLogMessage 或 Dlt_SendTraceMessage 调用中包含的
- DltSwcApplicationId
- DltSwcContextId
- 元组,Dlt 模块应为其找到匹配的映射元素(LogLevel 阈值以及 Trace 激活状态)。为此,应执行以下步骤:
- 检查是否存在映射元素,其中映射元素的
- DltSwcApplicationId
- DltSwcContextId
- 元组等于 Log / Trace 消息的
- DltSwcApplicationId
- DltSwcContextId
- 元组。如果存在这样的映射元素,则找到该元素。
- 如果在步骤 1 中未找到匹配项,则检查是否存在以下映射元素,其中
- 映射元素的 DltSwcApplicationId 等于 Log / Trace 消息的 ApplicationID
- 映射元素的 DltSwcContextId 等于通配符(值 0x00000000)
- 如果存在这样的映射元素,则找到该元素。
- 如果在步骤 1 和 2 中未找到匹配项,则此时匹配的映射元素分别为
- 当前的 DefaultLogLevelThreshold
- 当前的 DefaultTraceStatus。
[SWS_Dlt_00662]
[ ]
- 在 Dlt_SendLogMessage 案例中,找到的映射元素是 LogLevel 阈值,如果 Log 消息的 LogLevel 的值在数值上高于这个 LogLevel 阈值,则不再处理该 Log 消息并返回 E_OK。
[SWS_Dlt_00663]
[ ]
- 在 Dlt_SendTraceMessage 案例中,找到的映射元素是 Trace 激活状态。如果 Trace 激活状态的值为 FALSE,则不再处理该 Trace 消息并返回 E_OK。
选择目标 LogChannel
在此步骤中,Dlt 模块将识别在哪个 LogChannel 上传输 Log 或 Trace 消息。
[SWS_Dlt_00664]
[ ]
- 对于 LogChannel 的选择,Dlt 模块管理 LogChannel 到
- DltSwcApplicationId
- DltSwcContextId
- 元组的映射。(参见配置参数 DltLogChannelAssignmentSwcContextRef)。
注意:
对于 Dlt_SendLogMessage 或 Dlt_SendTraceMessage 调用中包含的给定
- DltSwcApplicationId
- DltSwcContextId
元组,可以为其配置多个 LogChannel。
[SWS_Dlt_00665]
[ ]
- 对于 Dlt_SendLogMessage 或 Dlt_SendTraceMessage 调用中包含的
- DltSwcApplicationId
- DltSwcContextId
- 元组,为了找到与之相匹配的 LogChannel,Dlt 模块应执行以下步骤:
- 在所有映射元素中,找出其
- DltSwcApplicationId
- DltSwcContextId
- 元组等于 Log / Trace 消息的
- DltSwcApplicationId
- DltSwcContextId
- 元组的映射元素,并将该元素(LogChannel)添加到 LogChannel 的输出列表中。
- 从所有映射元素中,找出
- 其 ApplicationID 等于 Log / Trace 消息的 ApplicationID
- 并且
- 其 ContextId 等于通配符(值 0x00000000)
- 的映射元素,并将此元素(LogChannel)添加到 LogChannel 的输出列表中。
- 如果完成步骤 1 和 2 之后,LogChannel 输出列表仍然为空,则应将默认 LogChannel(参见配置参数 DltDefaultLogChannelRef)添加到 LogChannel 输出列表中。
检查消息长度
[SWS_Dlt_00666]
[ ]
- 对于包括了所需 Dlt 消息头在内的 Dlt 消息,如果其长度超过了 DltLogChannelMaxMessageLength 为所有已分配的 LogChannel 提供的配置值,则丢弃此 Dlt 消息并返回 DLT_E_MSG_TOO_LARGE。
注意:
对于至少一个已分配的 LogChannel 来说,如果待处理的消息足够短,则应继续为所有满足此要求的 LogChannel 处理此消息。
应用 LogChannel LogLevel 阈值
在此步骤中,对于每个已识别的 Log 和 Trace 通道,Dlt 模块决定当前 Log 或 Trace 消息是否应通过。
[SWS_Dlt_00667]
[ ]
- 对于已识别的 LogChannel,如果 Log 消息的 LogLevel 数值高于 LogChannel 阈值的配置值,则此消息应被丢弃,并返回 E_OK。考虑到 [SWS_Dlt_00665],此操作应在 LogChannel 输出列表中的每个 LogChannel 上执行。
[SWS_Dlt_00668]
[ ]
- 对于已识别的 LogChannel,如果配置参数 DltTraceStatus 为 FALSE 时,则应过滤掉其正在处理的 Trace 消息。这意味着不会继续对它们(Trace 消息)进行下一步处理,并返回 E_OK。
将 Dlt 消息复制到 LogChannel 缓冲区
在此步骤中,Dlt 模块将 Dlt 消息复制到为该 Dlt 消息分配的所有 LogChannel 缓冲区中。
[SWS_Dlt_00669]
[ ]
- Dlt 模块应将通过消息过滤器的 Log / Trace 消息复制到所有指定的目标 LogChannel 缓冲区,其中消息长度不大于相应 LogChannel 的 DltLogChannelMaxMessageLength。
[SWS_Dlt_00670]
[ ]
- 如果没有足够的空间将完整的消息复制到任何指定的 LogChannel 缓冲区,则应返回 DLT_E_NO_BUFFER,并丢弃该 Dlt(Log 或 Trace)消息。
- 此外,检查每个已分配的缓冲区是否已经满了,即检查 Dlt 存储缓冲区溢出事件的内部标志:
- 如果该缓冲区的缓冲区溢出标志没有被设置:
- 设置缓冲区溢出标志以指示发生缓冲区溢出。
- Dlt(Log 或 Trace)消息应被丢弃。
- 如果该缓冲区的缓冲区溢出标志已被设置:
- Dlt(Log 或 Trace)消息应被丢弃。
- 根据配置发送 Dlt 控制消息“BufferOverflowNotification”。请参阅章节(“BufferOverflowNotification”)
注意:
循环调用的 Dlt_TxFunction 检查
- 缓冲区溢出标志的状态
- 发送缓冲区溢出通知的去抖时间
该函数还根据缓冲区溢出通知循环设置标志。
[SWS_Dlt_00671]
[ ]
- 如果新消息已被成功复制到指定的 LogChannel 缓冲区,则消息计数器应增加 1。应为 Dlt 消息存储此消息计数器值。
注意:
当 Dlt 消息即将被发送时,该消息计数器值将被写入消息计数器字段(MCNT)。
[SWS_Dlt_00672]
[ ]
- 如果新消息已被成功复制到至少一个 LogChannel 缓冲区中,则应返回 DLT_OK。
应用消息 Attribute(如果存在且受支持)
当使用
- Dlt_SendLogMessageWithAttributes
- Dlt_SendTraceMessageWithAttributes
并且配置参数 DltProtocolVersion 被设置为 2 或更高时,可以将可选 Attribute 添加到消息中。
作为指向 Dlt_MessageAttributesType 类型的指针,这些 Attribute 将在函数的附加参数中被给出。
Dlt_MessageAttributesType 结构被设计为可扩展的。此结构的任何未来扩展都将作为新字段被提供,要么(默认)具有“无效”状态(例如空指针),要么具有单独的布尔标志,以表示后续字段存在有意义的值。
因此,在调用本标准定义的从 Dlt_MessageAttributesType 结构体中读取值的函数(例如 Dlt_SendLogMessageWithAttributes)之前,应用程序应确保该结构体的所有成员(包括任何其他非标准化成员)都已被默认初始化。
例如,可以通过以下方式完成:
- Dlt_MessageAttributesType properties = { 0 };
Dlt_MessageAttributesType 类型的 messageTags 字段构成了指向字符串数组的指针。此数组必须以空指针“结尾”。通常可以使用以下实现代码读取此字段:
const char** tags = attributes->messageTags;
int i;
for (i = 0; tags && (tags[i] != NULL); ++i)
{
const char* t = tags[i];
....
}
从 LogChannel 缓冲区发送消息
[SWS_Dlt_00780]
[ ]
- 通过 PduR API 发送 Dlt 消息应与
- Dlt_SendLogMessage
- Dlt_SendTraceMessage
- API 调用分离。
注意:
进行解耦的原因如下:
- 缩短触发了 Log / Trace 消息的软件组件/ BSW 调用的运行时间,以减少阻塞时间。
- 如果启用了流量控制功能,则无论如何都必须由异步循环 BSW 实体来处理传输。
- 如果启用了重试功能,则无论如何都需要一个负责重试的解耦 BSW 实体。
[SWS_Dlt_00673]
[ ]
- 在 Dlt_TxFunction 函数的上下文中,Dlt 模块应传输在 LogChannel 特定缓冲区中收集到的 Dlt 消息。
[SWS_Dlt_00674]
[ ]
- 在调用 PduR_DltTransmit 之前,必须组装 Dlt 消息头。
注意:
有关 Dlt 消息头组装的详细信息,请参阅下一节。
[SWS_Dlt_00675]
[ ]
- Dlt 模块应使用 PduR_DltTransmit 函数发送配置有 DltTxPduId 的 Dlt 消息。
[SWS_Dlt_00677]
[ ]
- Dlt 模块应监控 LogChannel 特定缓冲区中每个 Dlt 消息的传输计数器。每次 Dlt 模块为缓冲区中的 Dlt 消息调用 PduR_DltTransmit 时,传输计数器都应增加 1。
创建 Dlt 消息头
[SWS_Dlt_00676]
[ ]
- 如果参数 DltProtocolVersion 被设置为 2 或更高,则如果传递给 API
- Dlt_SendLogMessageWithAttributes
- Dlt_SendTraceMessageWithAttributes
- 的 Dlt_MessageAttributesType 值的 messageTags 字段值为非 NULL 指针,则应将消息头的 WTGS 位设置为 TRUE。否则,应将 WTGS 位设置为 FALSE。
[SWS_Dlt_00660]
[ ]
- 如果参数 DltProtocolVersion 设置为 2 或者更高,并且 WTGS 位已经设置为 TRUE,那么 TAGS 字段应当被填充为如下形式:
- NOTG 字段应被设置为已传递给 API
- Dlt_SendLogMessageWithAttributes
- Dlt_SendTraceMessageWithAttributes
- 的 Dlt_MessageAttributesType 值的 messageTags 字段所指向的数组所包含的非 NULL 指针的数量。
- messageTags 数组元素指向的字符串应按照 [PRS_Dlt_01031] 定义的规则填充。
- 否则,应省略 TAGS 字段。
组装 Dlt 消息头
[SWS_Dlt_00678]
[ ]
- 如果
- DltUseVerboseMode
- DltUseExtHeaderInNonVerbMode
- 参数中至少有一个被设置为 TRUE,则 UEH 位应被设置为 1。否则,UEH 位应设置为 0。
[SWS_Dlt_00679]
[ ]
- 如果当前平台是大端序,则 MSBF 位应被设置为 1。
[SWS_Dlt_00680]
[ ]
- 如果当前平台是小端序,则 MSBF 位应被设置为 0。
[SWS_Dlt_00681]
[ ]
- 如果参数 DltHeaderUseEcuId 被设置为 TRUE,则 WEID 位应被设置为 1。否则,WEID 位应被设置为 0。
[SWS_Dlt_00682]
[ ]
- 如果参数 DltHeaderUseSessionID 被设置为 TRUE,则 WSID 位应被设置为 1。否则,WSID 位应被设置为 0。
[SWS_Dlt_00683]
[ ]
- 如果参数 DltHeaderUseTimestamp 被设置为 TRUE,则 WTMS 位应被设置为 1。否则,WTMS 位应被设置为 0。
[SWS_Dlt_00684]
[ ]
- VERS 位应始终被设置为 001。
[SWS_Dlt_00685]
[ ]
- 当 Dlt 消息被复制到 LogChannel 的缓冲区时,MCNT 字段应被设置为该 Dlt 消息该字段对应的存储值。
[SWS_Dlt_00686]
[ ]
- 仅当 DltHeaderUseEcuId 被设置为 TRUE 时,可选字段 ECU 才存在。
[SWS_Dlt_00687]
[ ]
- 可选字段 ECU 应被设置为 DltEcuIdValue 中配置的值,若配置的 ECU ID 短于 4 个字节,则剩余字节应被填充为 0x00。
[SWS_Dlt_00688]
[ ]
- 可选的 SEID 字段应被设置为通过 DltSwcSessionId 配置的值,并且仅当 DltHeaderUseSessionID 被设置为 TRUE 时才存在。
[SWS_Dlt_00689]
[ ]
- 如果 DltHeaderUseTimestamp 被设置为 TRUE,则可选字段 TMSP 应包含派生的时间戳。
[SWS_Dlt_00690]
[ ]
- LEN 字段应被设置为最终组装的 Dlt 数据消息的总长度,该长度应为
- 消息头的长度
- 可选扩展消息头的长度
- 有效负载的长度
- 三者之和。
[SWS_Dlt_00784]
[ ]
- 若参数 DltProtocolVersion 被设置为 2 或更高,则 WPVL 位应被设置为已传递给 API
- Dlt_SendLogMessageWithAttributes
- Dlt_SendTraceMessageWithAttributes
- 的 Dlt_MessageAttributesType 值的 withPrivacyLevel 字段的值。否则,WPVL 位应被设置为 FALSE。
[SWS_Dlt_00785]
[ ]
- 如果参数 DltProtocolVersion 设置为 2 或更高,并且 WPVL 位已被设置为 TRUE,则 PRLV 字段应被设置为已传递给 API
- Dlt_SendLogMessageWithAttributes
- Dlt_SendTraceMessageWithAttributes
- 的 Dlt_MessageAttributesType 值的 privacyLevel 字段的值。否则,应省略 PRLV 字段。
组装 Dlt 扩展消息头
[SWS_Dlt_00691]
[ ]
- 如果参数 DltUseExtHeaderInNonVerbMode 被设置为 TRUE,则必须为 Dlt 数据消息生成 Dlt 扩展消息头。
[SWS_Dlt_00692]
[ ]
- 如果参数 DltUseVerboseMode 被设置为 TRUE,则 VERB 位应被设置为“1”。否则,VERB 位应被设置为 0。
[SWS_Dlt_00693]
[ ]
- 如果由于 API 调用 Dlt_SendLogMessage 而必须组装 Dlt 消息,则 MSTP 字段应被设置为 0x0。
[SWS_Dlt_00694]
[ ]
- 如果由于 API 调用 Dlt_SendTraceMessage 而必须组装 Dlt 消息,则 MSTP 字段应被设置为 0x1。
[SWS_Dlt_00695]
[ ]
- MTIN 字段应根据 API Dlt_SendLogMessage 传递的 Dlt_MessageLogInfoType 值进行设置。
[SWS_Dlt_00696]
[ ]
- MTIN 字段应根据 API Dlt_SendTraceMessage 传递的 Dlt_MessageTraceInfoType 值进行设置。
从 LogChannel 缓冲区中删除消息
[SWS_Dlt_00697]
[ ]
- 在以下情况下,应从 LogChannel 特定缓冲区中删除已调用 PduR_DltTransmit 的 Dlt 消息:
- PduR_DltTransmit 返回了 E_NOT_OK
- 已收到此 TxPduId 的有效(成功) TX 确认
- 已收到此 DltTxPduId 的无效(失败) TX 确认,并且 Dlt 消息的传输计数器大于配置的 DltLogChannelMaxNumOfRetries。
Dlt 命令的接收
Dlt 模块可以通过 Rx 数据路径和/或专用 API 调用接收 Dlt 命令。这些 Dlt 命令可用于控制 Dlt 模块。
[SWS_Dlt_00698]
[ ]
- 如果参数 DltGeneralRxDataPathSupport 被设置为 FALSE,Dlt 模块应忽略通过 Rx 数据路径接收到的所有 Dlt 控制消息。
注意:
如果禁用 Rx 数据路径,则可以通过 8 中定义的可选控制 API 来控制 Dlt 客户端。
[SWS_Dlt_00699]
[ ]
- 如果 DltGeneralRxDataPathSupport 设置为 TRUE,则 Dlt 模块应处理接收到的 Dlt 控制消息。
[SWS_Dlt_00700]
[ ]
- 如果收到的 Dlt 命令已被成功执行,则应返回 E_OK。
SetLogLevel
[SWS_Dlt_00701]
[ ]
- 如果请求 Dlt 命令 Dlt_SetLogLevel,则应为接收到的
- DltSwcApplicationId
- DltSwcContextId
- 元组存储新的 LogLevel。
[SWS_Dlt_00702]
[ ]
- 如果请求了 Dlt 命令 Dlt_SetLogLevel,但是接收到的
- DltSwcApplicationId
- DltSwcContextId
- 元组未知,则应使用 DLT_E_ERROR 来回答 Dlt 命令。
SetTraceStatus
[SWS_Dlt_00703]
[ ]
- 如果请求 Dlt 命令 Dlt_SetTraceStatus,则应为接收到的
- DltSwcApplicationId
- DltSwcContextId
- 元组存储新的 Trace 状态。
[SWS_Dlt_00704]
[ ]
- 如果请求 Dlt 命令 Dlt_SetTraceStatus,但
- DltSwcApplicationId
- DltSwcContextId
- 元组未知,则应使用 DLT_E_ERROR 回答 Dlt 命令。
GetLogInfo
[SWS_Dlt_00705]
[ ]
- 如果请求 Dlt 命令 Dlt_GetLogInfo,则应返回所请求的 LogInfo。
[SWS_Dlt_00706]
[ ]
- 如果请求 Dlt 命令 Dlt_GetLogInfo,但是
- DltSwcApplicationId
- DltSwcContextId
- 元组未知,则应使用 DLT_E_ERROR 回答 Dlt 命令。
GetDefaultLogLevel
[SWS_Dlt_00708]
[ ]
- 如果请求 Dlt 命令 Dlt_GetDefaultLogLevel,则应返回参数 DltDefaultLogLevel 的当前值。
StoreConfiguration
[SWS_Dlt_00709]
[ ]
- 如果请求 Dlt 命令 Dlt_StoreConfiguration 并且配置参数 DltGeneralNvRAMSupport 被设置为 TRUE,则应执行以下步骤:
- 调用 NvM_WriteBlock 存储 LogChannelAssignment、LogChannelThreshold和LogLevelFilter 的当前配置。
- 如果 NvM_WriteBlock 返回 E_OK,则 Dlt 命令 Dlt_StoreConfiguration 将返回 E_OK。
- 如果 NvM_WriteBlock 返回的是 E_OK 以外的内容,则 Dlt 命令 Dlt_StoreConfiguration 将返回 DLT_E_ERROR。
[SWS_Dlt_00710]
[ ]
- 如果请求 Dlt 命令 Dlt_StoreConfiguration 并且配置参数 DltGeneralNvRAMSupport 被设置为 FALSE,则 Dlt 命令 Dlt_StoreConfiguration 应返回DLT_E_NOT_SUPPORTED。
ResetToFactoryDefault
[SWS_Dlt_00711]
[ ]
- 如果请求 Dlt 命令 Dlt_ResetToFactoryDefault,并且参数 DltGeneralNvRAMSupport 被设置为 FALSE,则将以下运行时参数重置为存储在 Dlt 模块的静态配置中的值:
- DltDefaultLogLevel
- DltThreshold
- DltDefaultTraceStatus
- DltLogChannelThreshold
- DltDefaultLogChannelRef
[SWS_Dlt_00712]
[ ]
- 如果请求 Dlt 命令 Dlt_ResetToFactoryDefault,并且参数 DltGeneralNvRAMSupport 被设置为 TRUE,则通过调用 NvM_EraseNvBlock 删除 NvM 的存储配置,并将以下运行时参数重置为存储在 Dlt 模块的静态配置中的值:
- DltDefaultLogLevel
- DltThreshold
- DltDefaultTraceStatus
- DltLogChannelThreshold
- DltDefaultLogChannelRef
[SWS_Dlt_00713]
[ ]
- 如果请求 Dlt 命令 Dlt_ResetToFactoryDefault,并且参数 DltGeneralNvRAMSupport 被设置为 FALSE,则如果 Dlt 模块成功将当前配置值重置为默认配置,则应返回 E_OK。
[SWS_Dlt_00714]
[ ]
- 如果请求 Dlt 命令 Dlt_ResetToFactoryDefault 并且参数 DltGeneralNvRAMSupport 被设置为 TRUE,则出现以下情况应返回 ERROR:
- 如果 Dlt 模块无法将当前配置重置为静态默认配置。
- 如果无法删除 NvM 的存储配置。
SetMessageFiltering
[SWS_Dlt_00775]
[ ]
- 如果请求了 Dlt 命令 Dlt_SetMessageFiltering,则应根据请求启用/禁用所有 Dlt 过滤器,并且应使用 E_OK 回答 Dlt 命令。禁用的过滤器将允许所有消息通过。
SetDefaultLogLevel
[SWS_Dlt_00715]
[ ]
- 如果请求 Dlt 命令 Dlt_SetDefaultLogLevel,则参数 DltDefaultLogLevel 应被更新为收到的 LogLevel。
SetDefaultTraceStatus
[SWS_Dlt_00716]
[ ]
- 如果请求 Dlt 命令 Dlt_SetDefaultTraceStatus,则参数 DltDefaultTraceStatus 应被更新为收到的 TraceStatus。
GetDefaultTraceStatus
[SWS_Dlt_00717]
[ ]
- 如果请求 Dlt 命令 Dlt_GetDefaultTraceStatus,则应返回参数 DltDefaultTraceStatus 的当前值。
GetLogChannelNames
[SWS_Dlt_00718]
[ ]
- 如果请求 Dlt 命令 Dlt_GetLogChannelNames,则应返回由参数 DltLogChannelName 给出的已配置的 LogChannel 的数量和请求的 LogChannel 名称的数量。
GetTraceStatus
[SWS_Dlt_00719]
[ ]
- 如果请求 Dlt 命令 Dlt_GetTraceStatus,则应为接收到的
- DltSwcApplicationId
- DltSwcContextId
- 元组返回 TraceStatus。
SetLogChannelAssignment
[SWS_Dlt_00720]
[ ]
- 如果请求 Dlt 命令 Dlt_SetLogChannelAssignment 并将参数 addRemoveOp 设置为 DLT_ASSIGN_ADD,则将
- DltSwcApplicationId
- DltSwcContextId
- 元组添加到 LogChannel,其名称由参数 logChannelName 提供。即使该元组之前已被分配给请求的 LogChannel,Dlt 命令也应返回 E_OK。
[SWS_Dlt_00721]
[ ]
- 如果请求 Dlt 命令 Dlt_SetLogChannelAssignment 并将参数 addRemoveOp 设置为 DLT_ASSIGN_REMOVE,则从 LogChannel 中删除
- DltSwcApplicationId
- DltSwcContextId
- 元组,其名称由参数 logChannelName 提供。即使之前未将该元组分配给所请求的 LogChannel,Dlt 命令也应返回 E_OK。
注意:
如果
- DltSwcApplicationId
- DltSwcContextId
元组没有被明确(再)分配给任何特定的 LogChannel,则将强制使用默认 LogChannel(参见 DltDefaultLogChannelRef)进行传输。
[SWS_Dlt_00722]
[ ]
- 如果请求 Dlt 命令 Dlt_SetLogChannelAssignment 并使用未知的
- DltSwcApplicationId
- DltSwcContextId
- 元组或未知的 LogChannel 名称,则 Dlt 命令应返回 DLT_E_ERROR。
SetLogChannelThreshold
[SWS_Dlt_00723]
[ ]
- 如果请求 Dlt 命令 Dlt_SetLogChannelThreshold,则应将所寻址的 LogChannel 的 LogChannelThreshold 设置为参数 newThreshold 接收的值。
[SWS_Dlt_00724]
[ ]
- 如果请求 Dlt 命令 Dlt_SetLogChannelThreshold,并且
- logChannelName
- newThreshold
- 未知,则 Dlt 命令应返回 DLT_E_ERROR。
GetLogChannelThreshold
[SWS_Dlt_00725]
[ ]
- 如果请求 Dlt 命令 Dlt_GetLogChannelThreshold,则应返回所寻址的 LogChannel 的 LogChannelThreshold。
[SWS_Dlt_00726]
[ ]
- 如果请求 Dlt 命令 Dlt_GetLogChannelThreshold,并且
- logChannelName
- newThreshold
- 未知,则 Dlt 命令应返回 DLT_E_ERROR。
发送 Dlt 命令
通常,Dlt 模块接收由 Dlt Log 记录工具生成的 Dlt 命令,并由 Dlt 模块进行应答。只有两个 Dlt 命令由 Dlt 模块自身触发并被发送:
- Dlt_GetLogInfo (仅当一个或多个软件组件自行注册/取消注册时)
- BufferOverflowNotification (如果发生缓冲区溢出)
BufferOverflowNotification
缓冲区溢出通知用于通知 Dlt Log 记录工具有关 Dlt 消息丢失的信息。总线上的 BufferOverflowNotification 数量可以通过配置进行限制或去抖动。此通知包含一个计数器,用于指示自上次 BufferOverflowNotification 以来丢失的 Dlt 消息数量。
[SWS_Dlt_00776]
[ ]
- 如果 Dlt 模块检测到缓冲区溢出,只要缓冲区仍然为满载状态,它就应循环发送 Dlt 命令 BufferOverflowNotification(参见 DltLogChannelBufferOverflowTimer)。
[SWS_Dlt_00777]
[ ]
- Dlt 控制消息“BufferOverflowNotification”的参数 overflowCounter 应被设置为自上次传输“BufferOverflowNotification”以来丢失的 Dlt 消息的数量。
错误分类
开发错误
[SWS_Dlt_00727]
[ ]
- Dlt 模块中的开发错误定义
运行时错误
[SWS_Dlt_00728]
[ ]
- Dlt 模块中的运行时错误定义
API 规范
导入类型
[SWS_Dlt_91009]
[ ]
类型定义
Dlt_ConfigType
[SWS_Dlt_00437]
[SRS_BSW_00414]
Dlt_MessageType
[SWS_Dlt_00224]
[ ]
Dlt_MessageIDType
[SWS_Dlt_00228]{OBSOLETE}
[ ]
Dlt_MessageNetworkTraceInfoType
[SWS_Dlt_00233]
[ ]
函数定义
Dlt_Init
[SWS_Dlt_00239]
[SRS_BSW_00344]
[SRS_BSW_00404]
[SRS_BSW_00405]
[SRS_BSW_00101]
[SRS_BSW_00407]
[SRS_BSW_00358]
[SRS_BSW_00414]
[SWS_Dlt_00453]
[RS_LT_00039]
- 如果参数 DltGeneralNvRAMSupport 被设置为 TRUE,则 Dlt 模块应使用 NvRAM 模块的 API NvM_ReadBlock 从持久性存储中恢复 Dlt_Init 函数 [SWS_Dlt_00239] 所需的变量的值。
Dlt_GetVersionInfo
[SWS_Dlt_00271]
[SRS_BSW_00402]
Dlt_SendTraceMessage
[SWS_Dlt_00243]
[RS_LT_00003]
Dlt_SendLogMessage
[SWS_Dlt_00241]
[RS_LT_00003]
Dlt_RegisterContext
[SWS_Dlt_00245]
[RS_LT_00033]
Dlt_UnregisterContext
[SWS_Dlt_00769]
[RS_LT_00033]
Dlt_DetForwardErrorTrace
[SWS_Dlt_00432]
[RS_LT_00006]
Dlt_SetLogLevel
[SWS_Dlt_00252]
[RS_LT_00004]
[RS_LT_00038]
Dlt_SetTraceStatus
[SWS_Dlt_00254]
[RS_LT_00004]
[RS_LT_00038]
Dlt_GetLogInfo
[SWS_Dlt_00732]
[ ]
Dlt_GetDefaultLogLevel
[SWS_Dlt_00733]
[ ]
[SWS_Dlt_00734]
[ ]
- 如果 Dlt 模块提供了参数 DltDefaultLogLevel 的当前值,则对 Dlt_GetDefaultLogLevel 的调用将返回 E_OK。
[SWS_Dlt_00735]
[ ]
- 如果 Dlt 模块无法提供参数 DltDefaultLogLevel 的当前值,则对 Dlt_GetDefaultLogLevel 的调用将返回 E_NOT_OK。
Dlt_StoreConfiguration
[SWS_Dlt_00736]
[ ]
[SWS_Dlt_00737]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被设置为 FALSE,则对 Dlt_StoreConfiguration 的调用将返回 DLT_NOT_SUPPORTED。
[SWS_Dlt_00729]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被设置为 TRUE,且对 NvM_WriteBlock 的调用返回了 E_NOT_OK,则对 Dlt_StoreConfiguration 的调用将返回 DLT_E_ERROR。
[SWS_Dlt_00738]
[ ]
- 如果参数 DltGeneralNvRAMSupport 被设置为 TRUE,且对 NvM_WriteBlock 的调用返回了 E_OK,则对 Dlt_StoreConfiguration 的调用将返回 DLT_OK。
Dlt_ResetToFactoryDefault
[SWS_Dlt_00739]
[ ]
Dlt_SetMessageFiltering
[SWS_Dlt_00770]
[ ]
Dlt_SetDefaultLogLevel
[SWS_Dlt_00740]
[ ]
[SWS_Dlt_00741]
[ ]
- 如果对 Dlt_SetDefaultLogLevel 的调用成功设置了所请求的 DefaultLogLevel,它将返回 E_OK。
[SWS_Dlt_00742]
[ ]
- 如果对 Dlt_SetDefaultLogLevel 的调用无法设置所请求的 DefaultLogLevel,它将返回 E_NOT_OK。
Dlt_SetDefaultTraceStatus
[SWS_Dlt_00743]
[ ]
[SWS_Dlt_00744]
[ ]
- 如果对 Dlt_SetDefaultTraceStatus 的调用成功设置了所请求的 DefaultTraceStatus,它将返回 E_OK。
[SWS_Dlt_00745]
[ ]
- 如果对 Dlt_SetDefaultTraceStatus 的调用无法设置所请求的 DefaultTraceStatus,它将返回 E_NOT_OK。
Dlt_GetDefaultTraceStatus
[SWS_Dlt_00746]
[ ]
[SWS_Dlt_00747]
[ ]
- 如果对 Dlt_GetDefaultTraceStatus 的调用提供了 DefaultTraceStatus 的当前值,它将返回 E_OK。
[SWS_Dlt_00748]
[ ]
- 如果对 Dlt_GetDefaultTraceStatus 的调用无法提供 DefaultTraceStatus 的当前值,它将返回 E_NOT_OK。
Dlt_GetLogChannelNames
[SWS_Dlt_00749]
[ ]
Dlt_GetTraceStatus
[SWS_Dlt_00750]
[ ]
Dlt_SetLogChannelAssignment
[SWS_Dlt_00751]
[ ]
Dlt_SetLogChannelThreshold
[SWS_Dlt_00752]
[ ]
Dlt_GetLogChannelThreshold
[SWS_Dlt_00753]
[ ]
Dlt_SendLogMessageWithAttributes
[SWS_Dlt_91011]
[ ]
Dlt_SendTraceMessageWithAttributes
[SWS_Dlt_91012]
[ ]
回调通知
这是为其他模块提供的函数列表。回调函数的函数原型应在文件 Dlt_Cbk.h 中被提供。
Dlt_RxIndication
[SWS_Dlt_00272]
[ ]
Dlt_TriggerTransmit
[SWS_Dlt_00754]
[ ]
[SWS_Dlt_00755]
[ ]
- 如果此模块启用了开发错误检测,模块应检查所有参数是否有效。如果检查失败,该函数应引发开发错误并返回。
Dlt_TxConfirmation
[SWS_Dlt_00273]
[ ]
Dlt_TpTxConfirmation
[SWS_Dlt_00756]
[ ]
Dlt_CopyTxData
[SWS_Dlt_00516]
[RS_LT_00034]
Dlt_StartOfReception
[SWS_Dlt_91006]
[ ]
Dlt_TpRxIndication
[SWS_Dlt_91007]
[ ]
Dlt_CopyRxData
[SWS_Dlt_91008]
[ ]
调度函数
Dlt_TxFunction
[SWS_Dlt_91005]
[ ]
[SWS_Dlt_00758]
[ ]
- 如果配置参数 DltGeneralTrafficShapingSupport 被设置为 TRUE,则 Dlt 消息应使用最大带宽进行传输,该带宽由参数 DltLogChannelTrafficShapingBandwidth 为每个 LogChannel 配置。
[SWS_Dlt_00759]
[ ]
- 如果配置参数 DltGeneralTrafficShapingSupport 被设置为 FALSE,则所有缓冲的 Dlt 消息应被立即传输。
[SWS_Dlt_00760]
[ ]
- Dlt_TxFunction 应检查标志的状态,该状态指示了 BufferOverflow 的发生:
- 如果发生了缓冲区溢出,则 Dlt 命令“BufferOverflowNotification”应仅被发送一次,直到溢出标志被再次清除。
- 在参数 DltLogChannelBufferOverflowTimer 给出的时间间隔之后,缓冲区溢出标志应被清除。
- 此流程应针对每个配置的 LogChannel 被单独完成。
[SWS_Dlt_00761]
[ ]
- 如果无法发送 Dlt 消息,则每次调用 Dlt_TxFunction 时,它都应对此消息进行一次重发尝试。这应针对每条消息被单独执行,并注意不要超过 DltLogChannelMaxNumOfRetries 给出的重试次数。
Expected interfaces
本节列出了其他模块所需的所有外部接口。
强制接口
[SWS_Dlt_00762]
[ ]
可选接口
[SWS_Dlt_00763]
[ ]
可配置的接口
[SWS_Dlt_00259]
[ ]
服务接口
Client-Server-接口
DltControlService
[SWS_Dlt_00772]
[ ]
InjectionCallback
[SWS_Dlt_00498]
[ ]
LogTraceSessionControl
[SWS_Dlt_00496]
[ ]
DltSwcMessageService
[SWS_Dlt_00495]
[ ]
实现的数据类型
Dlt_ApplicationIDType
[SWS_Dlt_00226]
[ ]
Dlt_ContextIDType
[SWS_Dlt_00227]
[ ]
Dlt_SessionIDType
[SWS_Dlt_00225]
[ ]
Dlt_LogInfoType
[SWS_Dlt_91002]
[ ]
Dlt_ContextIdInfoType
[SWS_Dlt_91003]
[ ]
Dlt_ApplicationIdInfoType
[SWS_Dlt_91004]
[ ]
Dlt_MessageOptionsType
[SWS_Dlt_00229]
[ ]
Dlt_MessageLogInfoType
[SWS_Dlt_00236]
[ ]
Dlt_MessageLogLevelType
[SWS_Dlt_00230]
[ ]
Dlt_MessageTraceType
[SWS_Dlt_00231]
[ ]
Dlt_MessageArgumentCount
[SWS_Dlt_00235]
[ ]
Dlt_MessageTraceInfoType
[SWS_Dlt_00237]
[ ]
[SWS_Dlt_91013]
[ ]
[SWS_Dlt_00232]
[ ]
Dlt_AssignmentOperation
[SWS_Dlt_00730]
[ ]
Dlt_MessageAttributesType
[SWS_Dlt_91010]
[ ]
Ports
Dlt_ControlService
[SWS_Dlt_00499]
[ ]
Dlt_InjectCallback_{SW-C}
[SWS_Dlt_00778]
[ ]
Dlt_SessionControlCallback_{SW-C}
[SWS_Dlt_00779]
[ ]
Dlt_SwcMessageService_{SW-C}
[SWS_Dlt_91001]
[ ]
评论
发表评论