电子说
复杂驱动(Complex Driver,CDD)是一种不受 AUTOSAR 标准化约束的软件实体,它可以通过 AUTOSAR 接口和/或基础软件模块 API 进行访问 AUTOSAR 组件或者被 AUTOSAR 组件访问。
根据 AUTOSAR 的分层软件架构文档,复杂驱动是基础软件复杂驱动层的一种特定模块,它与标准 BSW 模块或 RTE 进行交互。
复杂驱动的主要目的是利用特定的中断和/或复杂的微控制器外设、外部设备(通信收发器、ASIC 等)实现复杂的传感器评估和执行器控制,以满足特殊的功能和时序要求。
此外,它还可以用于实现增强的服务/协议或封装非 AUTOSAR 系统的功能。复杂驱动的实现可能依赖于具体的应用、微控制器和 ECU。
复杂驱动可以作为一种迁移机制,将现有的或新的概念引入 AUTOSAR 软件架构。
为了便于复杂驱动与 AUTOSAR 架构互联互通,设计者应考虑以下要点:
用户手册
复杂驱动的提供商应提供用户手册,以方便集成和为客户提供信息:
模块 ID
复杂驱动模块的模块 ID 范围在 BSW 模块列表文档中进行了描述。
AUTOSAR 对复杂驱动实现没有太多限制。至少:
代码文件
除了基础软件模块的一般要求文档中的要求外,复杂驱动模块的代码文件结构不是固定的。
至少应提供 CDD_.c。中断函数可放在 CDD_Irq.c 中。回调函数可放在 CDDCallout.c 中。根据需要,链接时从配置生成的 C 对象可放在 CDD _Lcfg.c 文件中。
根据需要,构建后从配置生成的 C 对象可放在 CDD__PBcfg.c 文件中。
如果复杂驱动模块实现需要额外的代码文件,可以自由包含它们。
头文件
下图包含了复杂驱动模块的 AUTOSAR 定义的头文件层次结构。
复杂驱动模块应提供一个头文件结构,以便只需要包含 CDD_.h 文件就可以使用该模块。
如果需要由其他 BSW 模块处理某些回调函数,复杂驱动模块可以提供 CDD__Cbk.h 头文件。
根据需要,配置生成的 C 对象声明可放在 CDD * *Cfg.h, CDD * *PBcfg.h, CDD * *Lcfg.h 文件中。
如果复杂驱动模块实现需要额外的头文件,可以自由包含它们。头文件应该是自包含的,即它们将包含所需的其他所有头文件。
复杂驱动模块可以包含 Det.h 和/或 Dem.h 头文件来报告错误。
如果需要定义某些内存映射区域,复杂驱动模块可以包含_MemMap.h 头文件,其中 是模块实现前缀。
如果配置了与 RTE 的接口,复杂驱动模块可以包含 Rte_CDD_.h 头文件。
推荐的文件结构
下图描述了复杂驱动模块的基本定义的 AUTOSAR 头文件层次结构。
一致性检查
复杂驱动模块应避免集成不兼容的(.c 或.h)文件,如基础软件模块通用规范中所定义的。
行为和接口描述
一些复杂驱动不仅与其他 BSW 模块或组件有接口,还通过 RTE 具有更抽象的接口可以被应用 SW-C 访问。
在这些情况下,需要一个 CDD SW-C 类型来连接 RTE 和复杂驱动,并且复杂驱动必须遵循 BSW 模块描述模板的要求。
这个描述文件应包含:
这里需要的更抽象接口称为 AUTOSAR 接口,它们通过软件组件模板(SWCT)进行描述,包括端口、端口接口及其详细信息。
用于描述这些元素的 SWCT 的基类是 ComplexDeviceDriverSwComponentType。
SWCT 中还包含称为 RunnableEntities 的可运行实体,用于对从 RTE 调用复杂驱动的函数建模。用于描述 RunnableEntities(和其他一些东西)的 SWCT 的基类称为 SwcInternalBehavior。
CDD 可运行实体应设计为减少 RTE 开销,例如:
如果需要使用 AUTOSAR GCE 配置参数,复杂驱动必须遵循 ECU 配置规范。
至少:
复杂驱动可能需要通过 RTE 与 SW-C 对接:
复杂驱动可以使用 AUTOSAR 库。
例如:复杂驱动可以使用 E2E 库机制传输防止数据损坏或丢失的通信保护。
复杂驱动可能需要与分层软件架构中的其他模块对接,或者分层软件架构的模块可能需要与复杂驱动对接。如果是这种情况,适用以下建议:
BSW 到 CDD 的接口
复杂驱动应提供可以由访问的 AUTOSAR 模块一般配置的接口。一个典型例子是 PDU 路由:复杂驱动可以实现新总线系统的接口模块。
CDD 到 BSW 的接口
复杂驱动要 AUTOSAR BSW 的模块,只有在相关的分层软件架构模块提供接口,并准备被复杂驱动访问时才被允许。
复杂驱动应提供满足依赖该信息的其他 AUTOSAR 模块所需的所有配置参数,例如如果调用 Dem 来报告生产错误,则必须根据 Dem 错误代码定义的配置标准在复杂驱动配置中定义并引用 Dem 错误代码。
与 MCAL 模块的接口
复杂驱动可以直接访问微控制器资源(例如硬件计时器)。如果所需的资源由 MCAL 模块管理,并且没有特定的约束(例如实时需求)。在这种情况下,复杂驱动应使用 MCAL 模块的标准 API 访问 MCAL 模块。
与 BswM、EcuM 的接口
如果使用了 ECU 状态管理,则 ECU 模式管理和 BSW 模式管理应该是模式管理的唯一访问点。
在以下情况下应使用 ECU 状态管理:
在以下情况下应使用 BSW 模式管理:
与内存的接口
如果内存仅由复杂驱动管理,则可以直接访问 NVRAM 之外的内存。如果复杂驱动使用标准内存堆栈,则 NVRAM 管理是内存堆栈的唯一访问点:复杂驱动应使用 NVM API 访问内存。
与看门狗的接口
看门狗可以监视一个或多个复杂驱动可运行实体的执行作为受监督实体。应按照看门狗管理规范所述进行配置,并且复杂驱动可运行实体应调用看门狗 API。
看门狗管理是独占看门狗堆栈的访问点。复杂驱动不应直接与看门狗管理交互,而应通过 RTE 定义的端口。
与通信协议栈的接口
复杂驱动可通过以下方式与通信协议栈交互:
一般来说,不适合混合使用上述方式,即同时使用 PduR 访问和 Com 访问或接口。处理通信并可能触发 PDU 传输的复杂驱动应提供启用/禁用传输的 API。
与 PduR 的接口
PduR 是与通信堆栈对接以传输 IPDU 的总线和协议独立的访问点。复杂驱动应使用 PduR 模块的标准 API 访问 IPDU。当复杂驱动与 PduR 交互时,应在 PduR 内为每个复杂驱动配置一个容器。
与Interface 模块的接口
接口模块是与通信堆栈对接的总线特定访问点。
当复杂驱动与接口交互时,复杂驱动使用为接口定义的访问函数,并且应根据复杂驱动的需求配置接口回调。接口应配置包含 CDD__Cbk.h 头文件。
与 Com 模块的接口
如果复杂驱动处理 Com 信号,则应使用 Com 模块的标准 API 或 RTE 定义来访问信号。
请参考通信规范以获取更多详细信息。
与 ComM 模块对接
如果复杂驱动使用 Com 信号,则应使用 Com 管理的标准 API 请求“通信模式”。
如果复杂驱动处理非 AUTOSAR 标准的,则状态应由 ComM 处理以协调总线通信堆栈。
与网络管理接口模块的接口
如果复杂驱动处理非 AUTOSAR 标准的,则状态应由Nm_CDD 模块处理。
Nm_CDD 应向网络管理提供服务来管理状态。
与 TCP/IP 模块对接
TcpIp 模块是套接字为基础与通信堆栈对接的独占访问点。
复杂驱动应使用 TCP/IP 模块的标准 API 访问套接字。
与 XCP 模块对接
如果复杂驱动处理非 AUTOSAR 标准的,XCP 可以接口_CDD 来转发数据。
XCP 模块提供可由复杂驱动使用的可配置接口:
必须激活 XCP 模块的 XcpOnCddEnabled 参数以允许复杂驱动功能。如果需要,复杂驱动可以调用回调函数 Xcp_RxIndication。
与诊断日志和跟踪对接
如果复杂驱动处理非 AUTOSAR 标准的,Dlt 可以接口_CDD 来转发数据。
Dlt 将数据转发给 Dcm 或使用串行接口的复杂驱动等。
Dlt 没有定义特定的通信接口。Dlt 规范定义了一个内部 Dlt 通信模块的 API。由实现者决定如何实现此通信模块及其如何与可能的复杂驱动通信(例如串行或 USB)。
与默认错误跟踪器和诊断事件管理对接
复杂驱动应使用 Det、Dem 报告错误,如 AUTOSAR 标准错误描述文档中所述。
复杂驱动应使用 Det 和 Dem 模块的标准 API。
复杂驱动应像任何 BSW 模块一样反应。错误 ID 应在复杂驱动模块内部定义。复杂驱动负责发起内部恢复。
注意:对 Det 的调用可以使用模块 ID 和/或实例 ID 参数来区分不同的复杂驱动。
与 OS 对接
通常,只有 BSW 调度程序和 RTE 可以使用 OS 对象或 OS 服务。因此,复杂驱动只能访问 GetCounterValue 和 GetElapsedCounterValue 服务。
如果用于的 OS 对象未被另一个 BSW 模块使用,则复杂驱动可以访问 OS,例如,复杂驱动可以创建一个 OS 警报并使用它。
OS 可以通过 OsRestartTask 通知复杂驱动 OS 应用程序已被终止并重新启动。然后,复杂驱动将采取适当的清理操作。
与同步时间基管理模块对接
如果复杂驱动模块实现用户定义的时间基提供者,即如果它处理全局时间同步消息,则复杂驱动模块应使用 StbM 模块 API:
此接口当前仅限于不带硬件时间戳的时间基提供者。请参阅同步时间基管理规范以获取有关 API 的详细信息。全局时间同步的复杂驱动模块配置的相关详细信息由配置中的容器 CddGlobalTimeContribution 指定。
在多核架构的情况下,复杂驱动可以在任何核上运行,同时遵守以下规则:
可以执行微控制器驱动器的复杂驱动,但它不能访问其他标准模块,因为它在较低的层中,除了 Det、Dem、SchM 等。
一般来说,如果对特定层施加了一些限制,这也适用于复杂驱动。
文档化
实现
代码结构
接口定义
模块关系
全部0条评论
快来发表一下你的评论吧 !