# 基础软件模式管理器规范 (Specification of Basic Software Mode Manager) | 项目 | 内容 | |------|------| | **文档标识号** | 313 | | **文档标题** | Specification of Basic Software Mode Manager(基础软件模式管理器规范) | | **文档所有者** | AUTOSAR | | **文档责任方** | AUTOSAR | | **文档状态** | Final(正式版) | | **所属 AUTOSAR 标准** | Classic Platform(经典平台) | | **所属标准发布版本** | 4.4.0 | --- ## 文档变更历史 (Document Change History) | 日期 | 发布版本 | 变更人 | 变更说明 | |------|---------|--------|---------| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 重新处理 EcuM 关闭 API 的处理(例如 `BswMEcuMGoDownHaltPoll`);移除对 EcuM-fixed 的依赖;变更 `BswM_NvM_CurrentJobMode`、`BswM_ModeType`、`BswM_UserType` 和 Det 错误代码 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 重新处理用于 PDU 组切换和截止时间监控控制的 BswM-Com 交互;不再使用 BswM 内部组向量;将 `BswMNmIfCarWakeUpIndication` 重新分类为事件请求端口;为 Rte Start/Stop 添加新的专用动作;编辑性修改 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 添加一些动作/指示以允许与以下 BSW 模块进行更多 BswM 交互:EthIf、EcuM;使用 `BswMTimer` 模式请求源添加等待功能;某些模式请求现在使用 `BswMEventRequestPort` 建模,而不是 `BswMModeRequestPort`;编辑性修改,增加需求可追踪性以及对配置容器/参数的细微更改 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 改进服务接口规范;为 `BswMPduGroupSwitch` 动作添加其他功能需求;添加 `BswMNmIfCarWakeUpIndication` 作为新的 `BswMModeRequestSource`;弃用一些规范元素(标记为"obsolete"),编辑性修改,增加需求可追踪性以及对配置容器/参数的细微更改 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 新的 API 和配置容器以支持 Multi Core 的 EcuM Fixed;添加用于定义模式值的新容器 `BswMCompuScaleModeValue`;用于调用 `FrSM_AllSlots` 的新 Action `BswMFrSMAllSlots`;动作列表执行的新需求(SWS_BswM_00223)和截止时间监控(SWS_BswM_00224、00225) | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 移除 API 中一些不必要的参数范围检查;J1939 修复:添加缺失的动作、缺失的包含头文件;修正图 1、2、3、5 和 6;编辑性修改 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 从 Pretended Networking 章节中移除一些需求;为几个 Sd 相关的 BswM 动作添加新的配置参数;添加新的 BswM 模式请求:`BswMCanSMIcomIndication`;添加新的 BswM Action:`BswMRteModeRequest`;编辑性修改 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 扩展以支持 Pretended Networking 模式处理;BswM 适应概念 Enhanced BSW Allocation;扩展以支持重型车辆和 J1939 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 支持分配给 SchM 的 Mode Machine Instances;包含用户定义的头文件;可以为 `BswMModeRequestPort` 提供初始值的可能性 | | 2009-12-18 | 4.0.1 | AUTOSAR Administration | 添加包含文件 `BswMUserCallout.h`。 此用户定义的头文件包含 callout 函数的声明。 添加了 BswM 模块应执行模块间版本检查的需求;为每个可配置动作添加有关调用哪个 API 的信息;添加函数 `BswM_TriggerSlaveRTEStop` 和 `BswM_TriggerStartUpPhase2` 以控制从核上 RTE 的启动和停止 | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 首次发布 | --- ## 免责声明 (Disclaimer) > 本作品(规范和/或软件实现)及其包含的材料由 AUTOSAR 发布,仅用于提供信息。 AUTOSAR 和为其作出贡献的公司不对该作品的任何使用承担责任。 > > 本作品中包含的材料受版权及其他类型的知识产权保护。 对本作品中包含的材料的商业利用需要此类知识产权的许可。 > > 本作品可在不进行任何修改的情况下,以任何形式或方式被使用或复制,仅用于提供信息的目的。 出于任何其他目的,未经出版商书面许可,不得以任何形式或方式使用或复制本作品的任何部分。 > > 本作品仅为汽车应用而开发。 它既未为非汽车应用开发,也未为非汽车应用进行测试。 > > "AUTOSAR" 一词和 AUTOSAR 标志是注册商标。 --- ## 目录 (Table of Contents) 1. [引言和功能概述 (Introduction and functional overview)](#1-引言和功能概述) ................. 11 2. [缩写词 (Acronyms and abbreviations)](#2-缩写词) ............................................ 12 3. [相关文档 (Related documentation)](#3-相关文档) ............................................... 13 - 3.1 输入文档 (Input documents) - 3.2 相关标准和规范 (Related standards and norms) - 3.3 相关规范 (Related specification) 4. [约束和假设 (Constraints and assumptions)](#4-约束和假设) .............................. 15 5. [与其他模块的依赖关系 (Dependencies to other modules)](#5-与其他模块的依赖关系) ... 16 6. [需求追踪 (Requirements traceability)](#6-需求追踪) — 摘要 ...................... 20 7. [功能规范 (Functional specification)](#7-功能规范) ........................................ 25 - 7.1 模式仲裁 (Mode Arbitration) - 7.2 模式控制 (Mode Control) - 7.3 等待功能 (Waiting Functionality) - 7.4 多分区支持 (Multi Partition Support) - 7.5 错误分类 (Error classification) - 7.6 BswM 接口和端口 (BswM Interfaces and Ports) - 7.7 虚拟网络 (Pretended Networking) 8. [API 规范 (API specification)](#8-api-规范) — 摘要 .......................................... 45 9. [序列图 (Sequence diagrams)](#9-序列图) — 摘要 .......................................... 72 10. [配置规范 (Configuration specification)](#10-配置规范) — 摘要 ................... 74 11. [不适用需求 (Not applicable requirements)](#11-不适用需求) ..................... 147 --- ## 1 引言和功能概述 (Introduction and functional overview) 本规范规定了 AUTOSAR 基础软件模块 BSW Mode Manager(BswM)的功能、API 和配置。 **BSW 模式管理器(BswM)** 是实现车辆模式管理(Vehicle Mode Management)和应用模式管理(Application Mode Management)概念中驻留在 BSW 中的那部分的模块。 其职责是基于简单规则仲裁来自应用层 SW-C 或其他 BSW 模块的模式请求,并根据仲裁结果执行动作。 --- ## 2 缩写词 (Acronyms and abbreviations) | 缩写词 | 描述 | |--------|------| | **BSW** | Basic Software(基础软件) | | **BswM** | BSW Mode Manager(BSW 模式管理器) | | **BSWMD** | Basic Software Module Description(基础软件模块描述) | | **CDD** | Complex Driver(复杂驱动) | | **Dem** | Diagnostic Event Manager(诊断事件管理器) | | **Det** | Default Error Tracer(默认错误跟踪器) | | **ECU** | Electronic Control Unit(电子控制单元) | | **ICOM** | Intelligent Communication Controller(智能通信控制器) | | **RTE** | Real Time Environment(实时环境) | | **SWC / SW-C** | Software Component(软件组件) | | **SWCD** | Software Component Description(软件组件描述) | > **表 1:缩写词和缩略语表 (Table 1: Table of acronyms and abbreviations)** --- ## 3 相关文档 (Related documentation) ### 3.1 输入文档 (Input documents) - [1] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList - [2] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture - [3] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral - [4] Requirements on Mode Management — AUTOSAR_SRS_ModeManagement - [5] Specification of Communication — AUTOSAR_SWS_COM - [6] Specification of FlexRay State Manager — AUTOSAR_SWS_FlexRayStateManager - [7] Specification of PDU Router — AUTOSAR_SWS_PDURouter - [8] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration - [9] Specification of Default Error Tracer — AUTOSAR_SWS_DefaultErrorTracer - [10] Specification of RTE Software — AUTOSAR_SWS_RTE - [11] Specification of Diagnostic Communication Manager — AUTOSAR_SWS_DiagnosticCommunicationManager - [12] Specification of ECU State Manager — AUTOSAR_SWS_ECUStateManager - [13] Specification of LIN State Manager — AUTOSAR_SWS_LINStateManager - [14] Specification of CAN State Manager — AUTOSAR_SWS_CANStateManager - [15] Specification of Generic Network Management Interface — AUTOSAR_SWS_NetworkManagementInterface - [16] Specification of Communication Manager — AUTOSAR_SWS_COMManager - [17] Specification of Ethernet State Manager — AUTOSAR_SWS_EthernetStateManager - [18] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral ### 3.2 相关标准和规范 (Related standards and norms) 无。 ### 3.3 相关规范 (Related specification) AUTOSAR 在 [18](SWS BSW General)中提供了关于基础软件模块的通用规范,这也对 BSW 模式管理器有效。 因此,SWS BSW General 应被视为 BSW 模式管理器的附加必需规范。 有关 BSW 模式管理器的配置和使用的详细信息,请参见辅助文档:AUTOSAR_EXP_ModemanagementGuide.pdf。 --- ## 4 约束和假设 (Constraints and assumptions) ### 4.1 限制 (Limitations) 每个分区内最多可使用 BSW 模式管理器的一个实例。 ### 4.2 适用汽车域 (Applicability to car domains) BSW 模式管理器适用于所有汽车域。 --- ## 5 与其他模块的依赖关系 (Dependencies to other modules) BSW 模式管理器与 AUTOSAR 架构中的许多 BSW 模块具有接口。 但是,这些接口中的大多数是可选的,并根据每个 ECU 的需求使用。 本章中列出的依赖关系旨在给出 BswM 与其他模块之间一些可能的交互的概述。 本文中列出的交互和模块不应被视为所有可能性的详尽列表。 ### 5.1 RTE BswM 通过 RTE 接收来自 SW-C 的模式请求。 模式切换通知也通过 RTE 传播给 SW-C。 ### 5.2 EcuM - Flex EcuM Flex 可以将其唤醒源的状态指示给 BswM。 使用 ECU 模式处理时,BswM 可以设置 EcuM-Flex 的状态,并根据 RUN Request Protocol 接收某些模式的状态。 ### 5.3 WdgM WdgM 可以通过 `BswM_WdgM_RequestPartitionReset` API 从 BswM 请求与分区重置相关的动作。 WdgM 分区重置请求的配置通过 `BswMWdgMRequestPartitionReset` 模式请求源完成。 ### 5.4 ComM 源自 ComM 的模式切换指示通过 BswM 进一步传播给 SW-C。 BswM 可以通过 ComMUsers 向 ComM 请求通信模式。 ### 5.5 COM COM 中 I-PDU 组的处理由 BswM 执行。 作为 I-PDU 组启动/停止的一部分,可以将包含的信号值重置为相应的初始化值。 BswM 处理 COM 中信号的截止时间监控的启用和禁用。 BswM 还可以触发 I-PDU 的传输。 ### 5.6 PduR BswM 可以在 PDU router 中启用和禁用 I-PDU 的路由组。 ### 5.7 CanSM 源自 CanSM 的模式切换指示通过 BswM 进一步传播给 SW-C。 ### 5.8 LinSM BswM 协调 LinSM 中 LIN 调度表的切换以及 COM 中相应 I-PDU 组的启动和停止。 源自 LinSM 的模式切换指示通过 BswM 进一步传播给 SW-C。 ### 5.9 LinTp 作为 LinIf 一部分的 LIN 传输协议从 BswM 请求模式,以确保在 LinTp 操作期间正确的 LIN 调度表处于活动状态。 ### 5.10 FrSM 源自 FrSM 的模式切换指示通过 BswM 进一步传播给 SW-C。 FlexRay 上"Single Slot Mode"的使用由 FrSM 根据 BswM 的请求控制。 BswM 可以通过调用 `FrSM_SetEcuPassive` API 通过 FrSM 控制 FlexRay 栈的发送能力。 ### 5.11 EthSM 源自 EthSM 的模式切换指示通过 BswM 进一步传播给 SW-C。 ### 5.12 DCM DCM 根据其接收的诊断请求向 BswM 执行模式请求。 例如:DCM 可以请求"禁用正常通信"。 在此模式下,BswM 将关闭相应的 I-PDU 组和 NM PDU。 ### 5.13 J1939Dcm J1939Dcm 向 BswM 报告通信状态变化以进一步传播给 SW-C。 BswM 通过 `J1939Dcm_SetState` 更改 J1939Dcm 的状态。 ### 5.14 J1939Nm J1939Nm 通过 `BswM_J1939Nm_StateChangeNotification` 提供状态指示。 ### 5.15 J1939Rm BswM 通过 `J1939Rm_SetState` 更改 J1939Rm 的状态。 ### 5.16 NM Interface BswM 将使用 `Nm_EnableCommunication` 和 `Nm_DisableCommunication` 根据当前模式控制 NM 通信。 例如:在"禁用正常通信"模式下,BswM 需要在相应的 NM 通道上禁用 NM 通信。 Nm 使用 `BswM_Nm_CarWakeUpIndication` 指示 CarWakeup。 ### 5.17 NvM NvM 模块通过注册为 NvM 回调的"集成代码"向 BswM 报告其块的状态。 BswM 具有导致 NvM 在启动和关闭期间读取和写入所有块的动作。 ### 5.18 OS BswM 所需的 OS 功能是特定于实现的。 ### 5.19 Sd BswM 通过几个导出的 API 接收来自 Sd 的状态指示(请参见 8.3 章节的示例)。 来自 Sd 的这些状态指示可以配置为 `BswMModeRequestSources`。 ### 5.20 文件结构 (File structure) BswM 可以使用 AUTOSAR BSW 模块中未在本规范中明确定义的接口。 --- ## 6 需求追踪 (Requirements traceability) — 摘要 下表列出了 BswM 规范中的关键需求 ID 及其所满足的 SRS 需求。 完整的需求追踪表请参见原始 PDF 文档。 | 需求 ID | 描述 | 由以下 SWS 需求满足 | |--------|------|---------------------| | SRS_BSW_00003 | 所有软件模块应提供版本和标识信息 | SWS_BswM_00003 | | SRS_BSW_00101 | 基础软件模块应能在单独的初始化函数中初始化变量和硬件 | SWS_BswM_00002, SWS_BswM_00043, SWS_BswM_00044, SWS_BswM_00261 | | SRS_BSW_00167 | 所有 AUTOSAR 基础软件模块应提供配置规则和约束以启用合理性检查 | SWS_BswM_00240, SWS_BswM_00242, SWS_BswM_00243, SWS_BswM_00256, SWS_BswM_CONSTR_00001, SWS_BswM_CONSTR_00002 | | SRS_BSW_00323 | 所有 AUTOSAR 基础软件模块应检查传递的 API 参数的有效性 | SWS_BswM_00045, 00089, 00090, 00091, 00093, 00095, 00097, 00099, 00101, 00103, 00110, 00113, 00133, 00150, 00154, 00206, 00209, 00212, 00228, 00229, 00268 | | SRS_BSW_00336 | 基础软件模块应能够关闭 | SWS_BswM_00119, SWS_BswM_00120, SWS_BswM_09999 | | SRS_BSW_00406 | 指示 BSW 模块是否已初始化的静态状态变量应在调用任何 BSW 模块 API 之前用值 0 初始化 | SWS_BswM_00076, 00077, 00078, 00079, 00080, 00081, 00082, 00083, 00084, 00086, 00109, 00112, 00132, 00134, 00149, 00153, 00159, 00205, 00208, 00211, 00227, 00266, 00267 | | SRS_ModeMgm_09116 | 应提供 RUN 状态的请求和释放 | SWS_BswM_00226 | | SRS_ModeMgm_09174 | BSW 模式管理器应支持"禁用正常通信" | SWS_BswM_00038 | | SRS_ModeMgm_09175 | 应支持一组可配置的、模式相关的已启用和伴随禁用的 IPDU 组 | SWS_BswM_00038 | | SRS_ModeMgm_09177 | 模式仲裁的规则应是预编译时和后构建可配置的 | SWS_BswM_00010, 00012, 00015, 00016, 00062, 00067, 00223, 00252, 00253, 00256 | | SRS_ModeMgm_09178 | 模式转换特定动作的列表应是预编译时和后构建可配置的 | SWS_BswM_00017, 00018, 00019, 00037, 00054, 00055, 00062, 00067, 00147, 00223, 00271, 00272, CONSTR_00001 | | SRS_ModeMgm_09179 | BSW 模式管理器应提供一个允许 SW-C 模式请求的接口 | SWS_BswM_00046, 00064, 00201, 00203, 00236 | | SRS_ModeMgm_09180 | BSW 模式管理器应评估当前模式请求 | SWS_BswM_00009, 00011, 00013, 00014, 00023, 00035, 00059, 00060, 00061, 00064, 00066, 00068, 00069, 00075, 00115, 00116, 00117, 00189, 00200, 00203, 00241, 00244, 00245, 00246, 00247, 00248, 00252, 00253, 00254, 00255, 00257, 00258, 00262, 00263, 00264, 00265, 00269 | | SRS_ModeMgm_09182 | BSW 模式管理器应将已执行的模式更改传播给所有本地 SW-C | SWS_BswM_00038, 00202, 00219, 00259 | | SRS_ModeMgm_09183 | 应支持可配置的、模式激活启动的信号重置为初始值 | SWS_BswM_00251 | | SRS_ModeMgm_09184 | 模式管理器应能够使用 COM 接口激活/停用 I-PDU 组 | SWS_BswM_00038 | | SRS_ModeMgm_09228 | BSW 模式管理器应提供允许 BSW 模块模式请求的接口 | SWS_BswM_00046, 00047, 00048, 00049, 00050, 00051, 00052, 00056, 00058, 00064, 00104, 00131, 00148, 00152, 00156, 00157, 00158, 00164, 00165, 00166, 00193, 00194, 00203, 00204, 00207, 00210, 00214, 00216, 00217, 00226, 00235, 00249, 00250, 91001 | | SRS_ModeMgm_09229 | 模式管理器应能够对其他 BSW 模块进行通用的、已配置的 void 函数 callout | SWS_BswM_00039, 00040 | | SRS_ModeMgm_09230 | 所有动作应仅在模式更改时执行 | SWS_BswM_00011, 00023, 00066, 00260 | | SRS_ModeMgm_09240 | ComM 应将任何 PNC 通信状态变化通知 BswM | SWS_BswM_00148 | > 完整的需求追踪表见原始 PDF 文档。 --- ## 7 功能规范 (Functional specification) 本章规定了 BSW 模式管理器的功能行为。 BSW 模式管理器的基本功能的操作可以描述为两个不同的任务:**模式仲裁(Mode Arbitration)** 和 **模式控制(Mode Control)**。 - **模式仲裁**部分启动从规则仲裁模式请求和模式指示产生的模式切换,这些模式请求和模式指示来自 SW-C 或其他 BSW 模块。 - **模式控制**部分通过执行包含其他 BSW 模块的模式切换操作的 action list 来执行模式切换。 BswM 应被视为一个模式管理框架模块,其行为完全由其配置定义。 可能有不同的方式来实现 BswM,例如基于配置生成完整的 BswM,或作为在运行时解析编码配置的规则解释器。 但是,本规范不打算规定 BSW 模式管理器的任何实现细节。 因此,本文档中描述设计细节的任何示例应被视为解释性文本,而非需求。 ### 7.1 模式仲裁 (Mode Arbitration) BswM 执行的模式仲裁是简单的、基于规则的。 用于模式仲裁的规则在 BSW 模式管理器模块的配置中规定。 规则由简单的布尔表达式组成,因此预期模式仲裁的运行时影响较低。 为了知道要执行哪些 action list,BswM 需要检测与先前规则评估的模式仲裁结果的变化。 如何执行此操作以及存储结果所需的内存是特定于实现的,本文档中未描述。 #### 7.1.1 仲裁规则 (Arbitration Rules) **规则(rule)** 是由一组模式请求条件组成的逻辑表达式。 当输入模式请求和模式指示被更改时,或在 BswM 主函数执行期间,对规则进行评估。 评估的结果(True 或 False)用于决定是否执行相应的模式控制 Action List。 #### 7.1.2 模式条件和逻辑表达式 (Mode Conditions and Logical Expressions) 构成模式仲裁规则的逻辑表达式可以使用不同的运算符,如 AND、OR、XOR、NOT 和 NAND。 表达式中的每个项对应于一个模式请求条件。 - 如果模式条件引用 `BswMModeRequestPort`,则该条件将验证所请求或指示的模式是否 **EQUAL** 或 **NOT_EQUAL** 于某个模式。 - 如果模式条件引用 `BswMEventRequestPort`,则该条件将验证请求端口是 **SET** 还是 **CLEAR**。 `BswMEventRequestPort` 事件请求与模式请求的不同之处在于,**请求者不向 BswM 发送所请求的模式/值**,因此 BswM 没有模式条件可评估。 相反,存在的只是 BswM 评估的事件接收。 当请求者发送/调用事件时,`BswMEventRequestPort` 将处于 SET 状态。 BswM 随后可以通过执行 `BswMClearEventRequest` 动作将 `BswMEventRequestPort` 置于 CLEAR 状态。 图 1 显示了一个具有两个条件的示例规则。 规则和可用逻辑操作的集合在第 10.2 章描述的 ECU 配置中定义。 > **图 1:具有两个条件的示例规则的伪代码表示 (Pseudocode representation of an example rule with two conditions)** **SWS_BswM_00252** — 当 `BswMModeCondition` 具有 `BswMConditionType=BSWM_EVENT_IS_SET` 并引用 `BswMEventRequestPort` 时: - 如果 `BswMEventRequestPort` 处于 SET 状态,则 `BswMModeCondition` 应评估为 TRUE - 如果 `BswMEventRequestPort` 处于 CLEAR 状态,则 `BswMModeCondition` 应评估为 FALSE - (SRS_ModeMgm_09180, SRS_ModeMgm_09177) **SWS_BswM_00253** — 当 `BswMModeCondition` 具有 `BswMConditionType=BSWM_EVENT_IS_CLEARED` 并引用 `BswMEventRequestPort` 时: - 如果 `BswMEventRequestPort` 处于 SET 状态,则 `BswMModeCondition` 应评估为 FALSE - 如果 `BswMEventRequestPort` 处于 CLEAR 状态,则 `BswMModeCondition` 应评估为 TRUE - (SRS_ModeMgm_09180, SRS_ModeMgm_09177) **SWS_BswM_00254** — 当 BswM 在配置的 `BswMEventRequestPort` 上接收到事件时(例如 ComM 调用 `BswM_ComM_InitiateReset()`),`BswMEventRequestPort` 应置于 SET 状态。 (SRS_ModeMgm_09180) **SWS_BswM_00255** — 当对 `BswMEventRequestPort` 执行 `BswMClearEventRequest` 动作时,`BswMEventRequestPort` 应置于 CLEAR 状态。 (SRS_ModeMgm_09180) #### 7.1.3 模式仲裁的需求 (Requirements of Mode Arbitration) 如上所述,BswM 接受模式请求和模式指示作为模式仲裁的输入。 模式请求通常源自应用 SW-C,但也可能源自其他 BSW 模块,例如 DCM。 模式指示始终由其他 BSW 模块发出,例如不同的总线特定状态管理器、EcuM 和 WdgM。 在本文档中,通用术语"模式仲裁请求"对应于模式指示或模式请求。 **SWS_BswM_00009** — BswM 应基于传入的模式请求执行模式仲裁。 (SRS_ModeMgm_09180) **SWS_BswM_00035** — BswM 应基于传入的模式指示执行模式仲裁。 (SRS_ModeMgm_09180) > 注意:所有模式仲裁请求(请求和指示)由 BswM 以相同方式处理。 它们通过在 `BswMModeRequestSource` 配置容器中选择相应的模式条件类型来配置。 **SWS_BswM_00010** — BswM 应使用配置的规则执行模式仲裁。 (SRS_ModeMgm_09177) **SWS_BswM_00012** — 模式仲裁规则应使用第 10.2 章描述的模块配置参数进行配置。 (SRS_ModeMgm_09177) **SWS_BswM_00117** — BswM 不允许将先前仲裁规则评估的结果用作逻辑表达式的输入。 (SRS_ModeMgm_09180) > 注意:需求 SWS_BswM_00117 的存在是为了禁止使用规则评估的结果作为其他规则评估的输入。 它在很大程度上由现有 BswM 配置容器的结构满足,因为逻辑表达式的可配置输入不包括先前规则评估的结果。 **SWS_BswM_00147** — 由于评估 BswM 仲裁规则而调用的动作只能在 action list 的上下文中调用。 (SRS_ModeMgm_09178) **SWS_BswM_00189** — BswM 应基于传入的模式切换通知执行模式仲裁。 (SRS_ModeMgm_09180) ##### 7.1.3.1 即时和延迟操作 (Immediate and Deferred Operation) 调度模式仲裁的处理有两种不同的方式。 要么在模式请求/指示的上下文中立即完成,要么延迟(循环地)到 BswM 的主函数。 "立即(immediate)"请求在调用方的上下文中执行。 系统集成商有责任确保 action list 的执行不会危及系统性能或一致性。 特别是,如果调用方在中断上下文中运行(或可能运行),则适用于中断上下文中使用系统函数的限制。 即时和延迟操作之间的区别如第 9.1 和 9.2 节中的序列图所示。 **SWS_BswM_00061** — 模式仲裁规则可以包含任何即时和延迟模式仲裁请求的组合。 (SRS_ModeMgm_09180) **SWS_BswM_00013** — 应可以将 BswM 配置为在模式仲裁请求时立即执行模式仲裁。 这是通过将 `BswMRequestProcessing` 配置参数(在 `BswMModeRequestPort` 容器内)设置为 `BSWM_IMMEDIATE` 来配置的。 (SRS_ModeMgm_09180) **SWS_BswM_00059** — 只有使用特定即时模式条件的模式仲裁规则应由 BswM 在该特定模式请求/指示的上下文中评估。 (SRS_ModeMgm_09180) **SWS_BswM_00014** — 还应可以将模式仲裁延迟到 BswM 主函数的执行。 这是通过将 `BswMRequestProcessing` 配置参数(在 `BswMModeRequestPort` 容器内)设置为 `BSWM_DEFERRED` 来配置的。 (SRS_ModeMgm_09180) **SWS_BswM_00257** — 应可以将 BswM 配置为在设置事件时立即执行模式仲裁。 这是通过将 `BswMRequestProcessing` 配置参数(在 `BswMEventRequestPort` 容器内)设置为 `BSWM_IMMEDIATE` 来配置的。 (SRS_ModeMgm_09180) **SWS_BswM_00258** — 还应可以将模式仲裁延迟到 BswM 主函数的执行。 这是通过将 `BswMRequestProcessing` 配置参数(在 `BswMEventRequestPort` 容器内)设置为 `BSWM_DEFERRED` 来配置的。 (SRS_ModeMgm_09180) **SWS_BswM_00060** — 使用至少一个延迟模式条件的所有规则应在 BswM 主函数的每次执行期间进行评估。 (SRS_ModeMgm_09180) **SWS_BswM_00068** — BswM 应将主函数处理期间接收到的模式仲裁请求推迟到其完成。 任何此类推迟的 IMMEDIATE 请求应直接在 BswM 主函数退出之前处理。 任何此类推迟的 DEFERRED 请求应在下一个后续 BswM 主函数中处理。 (SRS_ModeMgm_09180) **SWS_BswM_00069** — BswM 应将 IMMEDIATE 请求处理期间接收到的模式仲裁请求推迟到其完成。 任何此类推迟的 IMMEDIATE 请求应直接在原始 IMMEDIATE 请求处理之后处理。 任何此类推迟的 DEFERRED 请求应在下一个后续 BswM 主函数中处理。 (SRS_ModeMgm_09180) #### 7.1.4 初始化后的仲裁行为 (Arbitration Behavior after Initialization) BswM 初始化后模式仲裁的行为由配置容器 `BswMModeInitValue` 控制。 可以为配置中的每个 `BswMModeRequestPort` 配置此参数一次。 **SWS_BswM_00064** — 如果容器 `BswMModeInitValue` 不存在或 ModeRequest 还没有初始值,则 BswM 应将相应的模式条件视为未定义,并且在对相应的模式仲裁请求进行首次更新之前,不将其用于模式仲裁。 (SRS_ModeMgm_09179, SRS_ModeMgm_09228, SRS_BRF_09180) **SWS_BswM_00241** — BswM 应仅仲裁其逻辑表达式中不包含任何未定义模式条件的规则。 (SRS_ModeMgm_09180) `BswMModeRequestPort` 在初始化之后的初始值可以由配置容器 `BswMModeInitValue` 控制。 **SWS_BswM_00203** — 如果定义了 `BswMModeInitValue`,则 BswM 应在 BswM 初始化时使用 `BswMBswModeInitValue` 或 `BswMCompuModeValue` 初始化相应的 `BswMModeRequestSource`。 BswM 应拒绝在单个 `BswMModeInitValue` 中同时包含 `BswMBswModeInitValue` 和 `BswMCompuScaleModeValue` 的配置。 此初始化值应用于仲裁规则,直到相应的模式仲裁请求被更新(例如每次调用 `BswM_RequestMode` 都应更新 GenericRequest 模式)。 (SRS_ModeMgm_09179, SRS_ModeMgm_09228, SRS_ModeMgm_09180) > 注意:Rte 和 SchM 模式始终具有初始值(请参见 [SRS_Rte_00116]) **SWS_BswM_00251** — 在 BswM 初始化时,所有 `BswMEventRequestPort` 应初始化为 CLEAR 状态。 (SRS_ModeMgm_09183) ### 7.2 模式控制 (Mode Control) BswM 的模式控制部分基于模式仲裁的结果执行所有必需的动作。 这是使用 Action List 完成的。 Action List 是 BswM 在被模式仲裁触发时按顺序执行的动作的有序列表。 Action List 中的动作可以是三种类型: 1. **对其他 BSW 模块或 RTE 的调用。** 7.2.4 中列出了一组预定义的动作。 2. **对其他 action list 的链接**,以包含在执行中。 3. **模式仲裁规则。** 这些规则将在执行相应的 action list 时进行评估。 通过这种方式,获得了规则的层次结构。 BswM 不需要存储或对其执行的动作做出任何 BSW 模块特定的返回值反应。 因此,BSW 中的不同状态管理器将其当前状态指示给 BswM 以用作模式仲裁的输入。 但是,如果返回错误(`E_NOT_OK`),BswM 可以发出 Det Runtime Error 和/或取消当前正在执行的 action list。 > **图 2:示例显示两个 action list (Example showing two action lists)** 如图 2 所示,BswM 可能包含多个 Action List,并且单个 Action List 可以包含多个动作。 为了减少 action list 的总数,应可以级联它们。 action list 的元素可以是具体动作、对另一个 action list 的引用,或如上所述的由模式仲裁执行的规则。 应有一个标志连接到每个 action list 条目,指示其类型(动作/引用/规则)。 具体动作的列表与引用列表或甚至混合列表的激活方式之间应没有区别。 #### 7.2.1 模式处理周期 (Mode Processing Cycle) 图 3 显示了模式请求的最小处理周期: 1. **模式请求者 SW-C** 通过其 Sender Port 请求模式 A。 RTE 分发请求,BswM 通过其 Receiver Port 接收它。 2. **BswM** 评估其规则,无论是由于接收到模式仲裁请求,还是在 BswM 主函数执行期间周期性地评估。 3. 根据所选的执行方法(请参见"触发和条件 action list"部分)执行相应的 Action List。 4. 执行 Action List 时,BswM 可以作为动作向 RTE Switch API [10] 发出一个或多个调用,以通知受影响的 SW-C 仲裁结果。 任何 SW-C,尤其是模式请求者都可以注册以接收模式切换指示。 > 注意:模式请求者只能从本地 BswM 接收模式切换指示;这对于源自由本地代理 SW-C 制作的不同 ECU 的请求也是如此。 > **图 3:模式处理周期 (Mode Processing Cycle)** #### 7.2.2 模式控制的需求 (Requirements on Mode Control) **SWS_BswM_00016** — BswM 应通过 action list 执行模式控制,这些 action list 作为模式仲裁中规则评估的结果执行。 (SRS_ModeMgm_09177) **SWS_BswM_00015** — 对于模式仲裁的每个规则,BswM 应能够基于规则评估为 True 还是 False 来执行不同的 action list。 (SRS_ModeMgm_09177) **SWS_BswM_00017** — action list 包含一组 BswM 应按顺序执行的动作。 (SRS_ModeMgm_09178) **SWS_BswM_00018** — action list 可以包含对其他 action list 的链接,BswM 应将其包含在执行中。 (SRS_ModeMgm_09178) **SWS_BswM_00019** — action list 还可以包含对模式仲裁规则的链接,BswM 应在当前 action list 执行的范围内对其进行评估。 (SRS_ModeMgm_09178) **SWS_BswM_00067** — 如果按 [SWS_BswM_00019] 所述将规则包含在 action list 中,则由该评估产生的任何 action list 执行应由 BswM 在继续执行原始 action list 之前执行。 (SRS_ModeMgm_09177, SRS_ModeMgm_09178) **SWS_BswM_00037** — 如果使用级联 action list(即使用对其他规则或 action list 的引用),则 action list 结构最多可以包含七(7)个层次级别。 注意:此限制的目的是使 BswM 实现和生成器工具的测试成为可能。 限制必须由生成器工具检查。 (SRS_ModeMgm_09178) **SWS_BswM_00062** — 与在模式仲裁请求上下文中评估的规则关联的 action list 应在由模式仲裁触发时由 BswM 立即执行,而不是延迟到主函数执行。 理由:这允许在必要时对模式请求的极短延迟。 (SRS_ModeMgm_09177, SRS_ModeMgm_09178) **SWS_BswM_00223** — 如果顶级 action list 在模式仲裁期间由多个规则触发,则这应在模式控制期间导致执行 action list 的单个触发。 (SRS_ModeMgm_09177, SRS_ModeMgm_09178) > 顶级 action list 是由顶级规则(即未嵌套在 action list 内的规则)直接执行且未嵌套在另一个 action list 中的 action list。 SWS_BswM_00223 仅适用于顶级 action list。 SWS_BswM_00223 不适用于嵌套规则和嵌套 action list,因为它们在父 action list 中的顺序是用户定义的,应被遵守。 **SWS_BswM_CONSTR_00001** — BswM 应拒绝 `BswMActionList` 包含具有相同值的 `BswMActionListItemIndexes` 的 `BswMActionListItems` 的配置。 (SRS_ModeMgm_09178, SRS_BSW_00167) **SWS_BswM_00260** — 执行 `BswMActionList` 时: BswM 应从具有最低 `BswMActionListItemIndex` 值的 `BswMActionListItem` 开始。 后续的 `BswMActionListItem` 应按其 `BswMActionListItemIndex` 的递增顺序执行。 (SRS_ModeMgm_09230) > 在 action list 内,配置的 `BswMActionListItemIndex` 不一定必须是连续的或从零开始的。 BswM 将从具有最低索引的 action list 项开始执行,并继续到具有最高索引的项。 如果索引有"间隙"(即不连续),这些间隙将被忽略。 由于 action list 是有序列表,因此不允许在 action list 的上下文中配置相同值的 `BswMActionListItemIndex`。 #### 7.2.3 触发和条件 action list (Triggered and Conditional action lists) 基于规则评估执行 action list 有两种方式。 要么在每次使用相应结果评估规则时执行它,要么仅在评估结果从先前评估发生更改时执行它。 action list 的执行方法是使用 `BswMActionListExecution` 参数(在 `BswMActionList` 容器内)配置的。 但是,对于不直接由规则引用的嵌套 action list,`BswMActionListExecution` 参数(例如 `BSWM_CONDITION` 或 `BSWM_TRIGGER`)没有意义,并且不会影响嵌套 action list 的执行方式。 因此,这样的嵌套 action list(即不直接由规则引用)在执行其父 action list 时执行。 **SWS_BswM_00011** — 如果为触发执行配置了 True action list,则 BswM 应仅在相应规则的评估从 False 更改为 True 时执行它。 (SRS_ModeMgm_09180, SRS_ModeMgm_09230) **SWS_BswM_00023** — 如果为触发执行配置了 False action list,则 BswM 应仅在相应规则的评估从 True 更改为 False 时执行它。 (SRS_ModeMgm_09180, SRS_ModeMgm_09230) **SWS_BswM_00115** — 如果为条件执行配置了 True action list,则 BswM 应在每次相应规则评估为 True 时执行它。 (SRS_ModeMgm_09180) **SWS_BswM_00116** — 如果为条件执行配置了 False action list,则 BswM 应在每次相应规则评估为 False 时执行它。 (SRS_ModeMgm_09180) **SWS_BswM_00055** — 如果动作返回 `E_NOT_OK` 且相应的 `BswMAbortOnFail` 配置参数设置为"true",则 BswM 应中止 action list 的执行。 (SRS_ModeMgm_09178) #### 7.2.4 可用动作 (Available Actions) 可在 action list 中使用的动作集是预定义的。 这样做是为了简化 ECU 配置和 BswM 配置代码的生成。 **SWS_BswM_00038** — BswM 应能够执行由配置容器 `BswMAvailableActions` 定义的预定义动作。 (SRS_ModeMgm_09175, SRS_ModeMgm_09174, SRS_ModeMgm_09182, SRS_ModeMgm_09184) **SWS_BswM_00039** — BswM 应能够调用 AUTOSAR BSW 中的任何函数,即使它不在 `BswMAvailableActions` 中定义的标准动作之中。 (SRS_ModeMgm_09229) **SWS_BswM_00040** — BswM 应能够调用用户定义的函数。 (SRS_ModeMgm_09229) **SWS_BswM_00054** — 用户定义函数的参数及其值应在 ECU 配置时使用 `BswMUserCallout` 配置容器定义。 (SRS_ModeMgm_09178) > 完整可用动作列表见原始 PDF 文档的 7.2.4 和 10.2.51 章节。 #### 7.2.5 初始化后模式控制的行为 (Behavior of Mode Control after Initialization) BswM 初始化后模式控制的行为由 `BswMRuleInitState` 参数(在 `BswMRule` 容器内)配置。 它定义了初始化后第一次评估规则时用于决定执行哪个 action list 的"先前评估结果"。 配置参数 `BswMActionListExecution`(在 `BswMActionList` 容器内)也会影响初始化后的 action list 执行。 **SWS_BswM_00066** — 当规则在初始化后第一次评估时,BswM 应按照表 2 中所述进行操作。 | BswMRuleInitState | BswMActionListExecution | 规则评估为 true | 规则评估为 false | |-------------------|-------------------------|----------------|----------------| | BSWM_UNDEFINED | BSWM_TRIGGER | 执行 "true" action list | 执行 "false" action list | | BSWM_TRUE | BSWM_TRIGGER | 不执行任何操作 | 执行 "false" action list | | BSWM_FALSE | BSWM_TRIGGER | 执行 "true" action list | 不执行任何操作 | | BSWM_UNDEFINED | BSWM_CONDITION | 执行 "true" action list | 执行 "false" action list | | BSWM_TRUE | BSWM_CONDITION | 执行 "true" action list | 执行 "false" action list | | BSWM_FALSE | BSWM_CONDITION | 执行 "true" action list | 执行 "false" action list | > **表 2:BswMRuleInitState 配置参数的用法 (Usage of the BswMRuleInitState configuration parameter)** > 注意:每个规则的 "true" 和 "false" action list 是可选的。 (SRS_ModeMgm_09180, SRS_ModeMgm_09230) ### 7.3 等待功能 (Waiting Functionality) 有时有必要延迟特定动作或等待进一步的模式控制。 为此,在 BswM 中添加了计时器处理。 计时器始终由 `BswMTimer` 作为 `BswMModeRequestSource` 和相应的动作(请参见 `BswMTimerControl`)组成,该动作控制此 `BswMTimer`,即计时器只能在动作 `BswMTimerControl` → `BswMModeRequestSource/BswMTimer` 的上下文中控制。 `BswMTimer` 的值(例如 `BSWM_TIMER_STOPPED`、`BSWM_TIMER_STARTED`、`BSWM_TIMER_EXPIRED`)可以由 BswM 中配置的其他规则评估,以触发 action list。 没有用于控制或操纵计时器的外部接口。 **SWS_BswM_00261** — 每个 `BswMTimer` 在初始化期间应停止(`BSWM_TIMER_STOPPED`)。 (SRS_BSW_00101) **SWS_BswM_00262** — 动作 `BswMTimerAction BSWM_TIMER_START` 应使用相应的计时器值(参见 `BswMTimerValue`)重新加载引用的 `BswMTimer`(通过 `BswMTimerRef`),并将计时器的模式更改为 `BSWM_TIMER_STARTED`。 (SRS_ModeMgm_09180) > 注意:计时器只能通过 `BswMTimerAction` 动作重新加载(无法自动重新加载)。 **SWS_BswM_00263** — 处于模式 `BSWM_TIMER_STARTED` 的每个 `BswMTimer` 应在 `BswM_MainFunction` 期间(按 `BswM_MainFunction` 的周期时间)递减计时器。 (SRS_ModeMgm_09180) > 注意:`BswMTimer` 分辨率是 `BswM_Mainfunction` 周期的倍数。 此外,`BswMTimer` 的准确性取决于 `BswM_MainFunction` 的准确性。 **SWS_BswM_00264** — 如果处于模式 `BSWM_TIMER_STARTED` 的 `BswMTimer` 过期,则其模式应更改为 `BSWM_TIMER_EXPIRED`,然后 `BswMTimer` 模式应在同一 `BswM_MainFunction` 周期中进行仲裁。 (SRS_ModeMgm_09180) **SWS_BswM_00265** — 动作 `BswMTimerAction BSWM_TIMER_STOP` 应立即停止引用的 `BswMTimer`(通过 `BswMTimerRef`),并将其模式更改为 `BSWM_TIMER_STOPPED`。 (SRS_ModeMgm_09180) ### 7.4 多分区支持 (Multi Partition Support) 对于多个 BswM 实例,每个 BswM 实例将根据其自己的配置集生成其自己的单独的服务组件描述。 集成商需要将这些单独的服务组件分配给相应的分区。 ### 7.5 错误分类 (Error classification) 文档"基础软件模块通用规范"的 7.x "错误处理"部分详细描述了基础软件的错误处理。 首先,它构成了一个由五种错误类型组成的分类方案,这些错误类型可能发生在 BSW 模块中。 基于此基础,以下部分规定了以各自子部分中安排的特定错误。 #### 7.5.1 开发错误 (Development Errors) **SWS_BswM_00230** — 开发错误类型 | 错误类型 | 相关错误代码 | 值 [十六进制] | |---------|------------|-------------| | 在初始化之前调用了服务 | `BSWM_E_UNINIT` | 0x01 | | 将空指针作为参数传递 | `BSWM_E_NULL_POINTER` | 0x02 | | 参数无效(未指定) | `BSWM_E_PARAM_INVALID` | 0x03 | | 请求用户超出范围 | `BSWM_E_REQ_USER_OUT_OF_RANGE` | 0x04 | | 请求模式超出范围 | `BSWM_E_REQ_MODE_OUT_OF_RANGE` | 0x05 | | 提供的配置不一致 | `BSWM_E_PARAM_CONFIG` | 0x06 | | 参数指针无效 | `BSWM_E_PARAM_POINTER` | 0x07 | | 无效的配置集选择 | `BSWM_E_INIT_FAILED` | 0x08 | > **表 3:开发错误类型 (Development Error Types)** (SRS_BSW_00385) #### 7.5.2 运行时错误 (Runtime Errors) **SWS_BswM_00238** — 运行时错误类型 | 错误类型 | 相关错误代码 | 值 [十六进制] | |---------|------------|-------------| | 动作返回 `E_NOT_OK` | `BSWM_E_ACTION_FAILED` | 0x80..0xFF(如 `BswMReportFailRuntimeErrorId` 中配置的) | > (SRS_BSW_00452) **SWS_BswM_00239** — 如果为 `BswMActionListItem` 配置了 `BswMReportFailRuntimeErrorId`,则 BswM 在动作返回 `E_NOT_OK` 时应向 Det 报告 `BSWM_E_ACTION_FAILED` Runtime Error。 `BSWM_E_ACTION_FAILED` Runtime Error 中报告的 ErrorId 由 `BswMReportFailRuntimeErrorId` 中配置的值给出。 (SRS_BSW_00452) > 由于动作的调用上下文取决于配置(例如 DEFERRED 或 IMMEDIATE),因此 `BSWM_E_ACTION_FAILED` Runtime Error 中报告的 ApiId 未在本规范中定义,可能是特定于实现的。 `BSWM_E_ACTION_FAILED` Runtime Error 表示一个 ErrorId 值范围。 值的范围限于 Runtime Error Types 表中给出的值。 **SWS_BswM_00240** — BswM 应拒绝 `BswMReportFailRuntimeErrorId` 不在 Runtime Error Types 表中为 `BSWM_E_ACTION_FAILED` 给出的值范围内的配置。 (SRS_BSW_00167) #### 7.5.3 瞬态故障 (Transient Faults) 没有瞬态故障。 #### 7.5.4 生产错误 (Production Errors) 没有生产错误。 #### 7.5.5 扩展的生产错误 (Extended Production Errors) 没有扩展的生产错误。 ### 7.6 BswM 接口和端口 (BswM Interfaces and Ports) 本章规定了由基础软件模式管理器提供的 AUTOSAR 接口和端口。 请注意,RTE 两端的端口都是必需的:基础软件模式管理器服务的 SW-C 描述将定义 RTE 下方的端口。 每个使用这些服务的 AUTOSAR SW-C 必须在其自己的 SW-C 描述中包含服务端口。 这些端口使用相同的接口进行类型化,并且必须连接到基础软件模式管理器的端口,以便 RTE 可以生成适当的 ID 和所需的符号。 SW-C 从 BSW 模式管理器请求模式。 为此,它们提供一个 Sender Port,该端口具有一个特殊的 Sender/Receiver Interface(模式请求接口),其中包含一个数据元素。 BSW 模式管理器处相应的 Receiver Port 在第 7.6.1 章中描述。 数据元素的类型具有与相应模式的 Mode Declarations 中的相同值(因为数据元素的 `ImplementationDataType` 映射到 ModeDeclaration Group)。 请求模式的同一 SW-C 也可以是模式用户,因为它可能也需要知道 BSW 模式管理器的仲裁结果。 SW-C 有一个 Mode Switch Port,它是一个带有 Mode Switch Interface 的 R-Port,其中包含一个数据元素。 该数据元素的类型就是 Mode Declaration Group 本身。 此外,不请求模式但依赖于模式的其他 SW-C 具有此类 Mode Switch Port。 有关模式用户接口的详细描述,请参见第 7.6.3 章。 请注意,如果 BSW 模式管理器需要除了请求的模式之外知道当前模式以做出决策,那么它也需要一个 Mode Switch R-Port。 模式通知在模式管理器切换相应模式时由 RTE 分发。 为此,BSW 模式管理器具有 SW-C 可连接的 Provided 类型 Mode Switch Port。 有关 Mode Switch Ports 的详细描述,请参见第 7.6.2 章。 在请求 SW-C 的上下文中,定义了 Mode Request Port(Sender/Receiver)。 BSW 模式管理器的配置引用此端口定义。 让我们假设 SW-C 定义一个 Application Mode `AppModeType`、相应的 `AppModeRequestType` 和将两种类型相互映射的 `AppModeTypeMap`: ```c ModeDeclarationGroup AppModeType { { APP_MODE_A, APP_MODE_B, APP_MODE_C } initialMode = APP_MODE_A; }; ImplementationDataType AppModeRequestType { lowerLimit = 0; upperLimit = 2; }; ModeRequestTypeMap AppModeTypeMap { modeGroup = AppModeType; implementationDataType = AppModeRequestType; }; ``` 在 SW-C 的上下文中,定义了两个 Interface:SW-C 作为 sender 的 Sender/Receiver 类型的 `AppModeRequestInterface`,以及 SW-C 根据使用情况可以具有 P-Ports 和 R-Ports 的 Mode Switch 类型的 `AppModeInterface`: > **图 4:Application Mode Manager、Application Parts 和 BSW Mode Manager 之间的连接 (Connections between Application Mode Manager, Application Parts and the BSW Mode Manager)** > **图 5:基于 SW-C 的 Application Mode Manager、Application Parts 和 BSW Mode Manager 之间的连接 (Connections between SW-C based Application Mode Manager, Application Parts and the BSW Mode Manager)** 图 5 显示了基于 SW-C 的 Application Mode Manager(如 AUTOSAR R3.1 及更早版本中使用的那样)直接切换应用模式,而不从 BSW Mode Manager 请求。 因此,它们直接将 Mode Switch Port 连接到本地 RTE。 这意味着应用模式需要本地于该 ECU,并且 BSW Mode Manager 中无法进行仲裁。 尽管如此,BSW Mode Manager 可以使用当前应用模式作为其规则的输入,因为它可以具有此应用模式的 Mode Switch R-Port(在图中命名为 `modeNotificationPort0`)。 > 注意:要配置 BswM,需要了解特定 ECU 需要/可用的模式请求端口和 ECU 资源。 因此,BswM 的 SW-C 描述只能在 ECU 配置时完成。 从现在开始,所有后续接口定义都被解释为在: `ARPackage AUTOSAR_BswM/BswModuleDescription` > 注意:本章中提供的伪代码并不精确,但提供了有关如何定义相应模型元素的提示。 #### 7.6.1 模式请求端口 (Mode Request Ports) BSW 模式管理器必须使用在 SW-C 上下文中定义的接口声明一个 Receiver Port: ```c RequirePort AppModeRequestInterface modeRequestPort_{ArbName}_{ReqName}; ``` 为了读取当前请求的模式,BSW 模式管理器实现必须调用: ```c Rte_Read_modeRequestPort_{ArbName}_{ReqName}_requestedMode( & ); ``` #### 7.6.2 模式切换端口 (Mode Switch Ports) 与模式请求一样,BSW 模式管理器仅引用其 Provide Ports 中模式切换的 SW-C Description 上下文中定义的模式切换接口。 对于上述示例,模式切换的声明为: ```c ProvidePort AppModeInterface modeSwitchPort_{ModConName}_{SwitchName}; ``` 配置参数 `BswMModeSwitchInterfaceRef` 引用此 Mode Switch 接口。 要切换当前活动的模式,BSW 模式管理器实现必须将以下调用之一插入到其动作列表中: ```c Rte_Switch_modeSwitchPort_{ModConName}_{SwitchName}_currentMode( ); SchM_Switch_modeSwitchPort_{ModConName}_{SwitchName}_currentMode( ); ``` #### 7.6.3 模式切换的通知 (Notifications of Mode Switches) 除了模式请求外,当前活动的模式也可以用作输入。 ### 7.7 虚拟网络 (Pretended Networking) > 完整内容请参见原始 PDF 文档。 本节描述了 BswM 在虚拟网络(PN)模式管理中的角色,包括 PN 模式的激活、停用、PNC 与 ComM 的交互等。 --- ## 8 API 规范 (API specification) — 摘要 > **翻译说明**:本章详细描述了 BswM 的所有 API 函数。 由于内容非常详尽(包含 30+ 个 API),本节仅列出关键 API 的函数签名和简要描述。 完整 API 规范(包括所有参数、返回值、错误码、调用顺序等)请参见原始 PDF 文档的第 8 章。 ### 8.1 导入类型 (Imported types) | 类型 | 来源模块 | |------|---------| | `Std_ReturnType` | Std | | `Std_VersionInfoType` | Std | | `EcuM_StateType` | EcuM | | `EcuM_RunStatusType` | EcuM | | `EcuM_WakeupSourceType` | EcuM | | `EcuM_WakeupStatusType` | EcuM | | `ComM_ModeType` | ComM | | `ComM_PncModeType` | ComM | | `ComM_UserHandleType` | ComM | | `ComM_CommunicationAllowedType` | ComM | | `CanSM_BswMCurrentStateType` | CanSM | | `CanSM_BswMIndicationType` | CanSM | | `FrSM_BswM_StateType` | FrSM | | `EthSM_NetworkModeStateType` | EthSM | | `LinSM_ModeType` | LinSM | | `LinIf_SchHandleType` | LinIf | | `LinTp_Mode` | LinTp | | `Dcm_CommunicationModeType` | Dcm | | `J1939DcmBroadcastStatusType` | J1939Dcm | | `Nm_StateType` | Nm | | `NvM_BlockIdType` | NvM | | `NvM_RequestResultType` | NvM | | `NetworkHandleType` | Com / PduR | | `PNCHandleType` | ComM | | `WdgM_PartitionResetType` | WdgM | | `ApplicationType` | EcuC | | `Dem_EventIdType` | Dem | | `Dem_EventStatusType` | Dem | ### 8.2 类型定义 (Type definitions) #### 8.2.1 BswM_ConfigType ```c typedef struct { /* Configuration data structure */ } BswM_ConfigType; ``` #### 8.2.2 BswM_ModeType ```c typedef uint8 BswM_ModeType; ``` #### 8.2.3 BswM_UserType ```c typedef uint8 BswM_UserType; ``` ### 8.3 函数定义 (Function definitions) #### 8.3.1 BswM_BswMPartitionRestarted ```c void BswM_BswMPartitionRestarted(void); ``` - **描述**:当 BswM 服务的分区重新启动时调用此函数以通知 BswM。 #### 8.3.2 BswM_CanSM_CurrentIcomConfiguration ```c void BswM_CanSM_CurrentIcomConfiguration( NetworkHandleType Network, uint8 CurrentIcomConfiguration ); ``` - **描述**:CanSM 调用此函数以通知 BswM 当前活动的 ICOM 配置。 #### 8.3.3 BswM_CanSM_CurrentState ```c void BswM_CanSM_CurrentState( NetworkHandleType Network, CanSM_BswMCurrentStateType CurrentState ); ``` - **描述**:CanSM 调用此函数以通知 BswM 其当前状态。 #### 8.3.4 BswM_ComM_CurrentMode ```c void BswM_ComM_CurrentMode( NetworkHandleType Network, ComM_ModeType RequestedMode ); ``` - **描述**:ComM 调用此函数以指示其当前状态。 #### 8.3.5 BswM_ComM_CurrentPNCMode ```c void BswM_ComM_CurrentPNCMode( PNCHandleType PNC, ComM_PncModeType CurrentPncMode ); ``` - **描述**:ComM 调用此函数以指示部分网络的当前状态。 #### 8.3.6 BswM_ComM_InitiateReset ```c void BswM_ComM_InitiateReset(void); ``` - **描述**:ComM 调用此函数以发起 ECU 复位。 #### 8.3.7 BswM_Dcm_ApplicationUpdated ```c void BswM_Dcm_ApplicationUpdated(void); ``` - **描述**:DCM 调用此函数以通知 BswM 应用程序已被更新(例如刷写完成)。 #### 8.3.8 BswM_Dcm_CommunicationMode_CurrentState ```c void BswM_Dcm_CommunicationMode_CurrentState( NetworkHandleType Network, Dcm_CommunicationModeType RequestedMode ); ``` - **描述**:DCM 调用此函数以指示 CommunicationControl 的当前状态。 #### 8.3.9 BswM_Deinit ```c void BswM_Deinit(void); ``` - **描述**:反初始化 BswM 模块。 #### 8.3.10 BswM_EcuM_CurrentState ```c void BswM_EcuM_CurrentState(EcuM_StateType CurrentState); ``` - **描述**:EcuM 调用此函数以通知 BswM ECU 的当前状态。 #### 8.3.11 BswM_EcuM_CurrentWakeup ```c void BswM_EcuM_CurrentWakeup( EcuM_WakeupSourceType source, EcuM_WakeupStatusType state ); ``` - **描述**:ECUM 调用此函数以通知 BswM 唤醒源的当前状态。 #### 8.3.12 BswM_EcuM_RequestedState ```c void BswM_EcuM_RequestedState( EcuM_StateType State, EcuM_RunStatusType CurrentStatus ); ``` - **描述**:EcuM 请求 BswM 基于 RUN Request Protocol 的结果的状态。 #### 8.3.13 BswM_EthIf_PortGroupLinkStateChg ```c void BswM_EthIf_PortGroupLinkStateChg( EthIf_SwitchPortGroupIterType PortGroup, EthTrcv_LinkStateType LinkState ); ``` #### 8.3.14 BswM_EthSM_CurrentState ```c void BswM_EthSM_CurrentState( NetworkHandleType Network, EthSM_NetworkModeStateType CurrentState ); ``` #### 8.3.15 BswM_FrSM_CurrentState ```c void BswM_FrSM_CurrentState( NetworkHandleType Network, FrSM_BswM_StateType CurrentState ); ``` #### 8.3.16 BswM_GetVersionInfo ```c void BswM_GetVersionInfo( Std_VersionInfoType *VersionInfo ); ``` - **描述**:返回 BswM 模块的版本信息。 #### 8.3.17 BswM_Init ```c void BswM_Init( const BswM_ConfigType *ConfigPtr ); ``` - **描述**:初始化 BswM 模块。 这是 BswM 第一个被调用的函数。 #### 8.3.18 BswM_J1939DcmBroadcastStatus ```c void BswM_J1939DcmBroadcastStatus(uint16 networkMask); ``` #### 8.3.19 BswM_J1939Nm_StateChangeNotification ```c void BswM_J1939Nm_StateChangeNotification( NetworkHandleType nmNetworkHandle, uint8 Node, Nm_StateType nmCurrentState ); ``` #### 8.3.20 BswM_LinSM_CurrentSchedule ```c void BswM_LinSM_CurrentSchedule( NetworkHandleType Network, LinIf_SchHandleType CurrentSchedule ); ``` #### 8.3.21 BswM_LinSM_CurrentState ```c void BswM_LinSM_CurrentState( NetworkHandleType Network, LinSM_ModeType CurrentState ); ``` #### 8.3.22 BswM_LinTp_RequestMode ```c void BswM_LinTp_RequestMode( NetworkHandleType Network, LinTp_Mode LinTpRequestedMode ); ``` #### 8.3.23 BswM_Nm_CarWakeUpIndication ```c void BswM_Nm_CarWakeUpIndication( NetworkHandleType Network ); ``` #### 8.3.24 BswM_NvM_CurrentBlockMode ```c void BswM_NvM_CurrentBlockMode( NvM_BlockIdType Block, NvM_RequestResultType CurrentBlockMode ); ``` #### 8.3.25 BswM_NvM_CurrentJobMode ```c void BswM_NvM_CurrentJobMode( uint8 ServiceId, NvM_RequestResultType CurrentJobMode ); ``` #### 8.3.26 BswM_RequestMode ```c Std_ReturnType BswM_RequestMode( BswM_UserType User, BswM_ModeType Mode ); ``` - **描述**:BswM 的通用模式请求接口。 用户通过此接口请求模式。 #### 8.3.27 BswM_Sd_ClientServiceCurrentState ```c void BswM_Sd_ClientServiceCurrentState( uint16 ClientServiceHandleId, Sd_ClientServiceCurrentStateType CurrentClientServiceState ); ``` #### 8.3.28 BswM_Sd_ConsumedEventGroupCurrentState ```c void BswM_Sd_ConsumedEventGroupCurrentState( uint16 ConsumedEventGroupHandleId, Sd_ConsumedEventGroupCurrentStateType CurrentConsumedEventGroupState ); ``` #### 8.3.29 BswM_Sd_EventHandlerCurrentState ```c void BswM_Sd_EventHandlerCurrentState( uint16 EventHandlerHandleId, Sd_EventHandlerCurrentStateType CurrentEventHandlerState ); ``` #### 8.3.30 BswM_WdgM_RequestPartitionReset ```c void BswM_WdgM_RequestPartitionReset( ApplicationType Application ); ``` ### 8.4 回调通知 (Call-back notifications) 无。 ### 8.5 调度函数 (Scheduled functions) #### 8.5.1 BswM_MainFunction ```c void BswM_MainFunction(void); ``` - **描述**:BswM 的主函数,应由 BSW 调度器以配置的周期调用。 它处理所有 DEFERRED 模式请求和事件。 ### 8.6 预期接口 (Expected Interfaces) #### 8.6.1 强制接口 (Mandatory Interfaces) - `EcuM_GetState` - `Det_ReportError` - `Det_ReportRuntimeError` #### 8.6.2 可选接口 (Optional Interfaces) > 完整列表包括:CanSM、ComM、Com、Dem、Dcm、EcuM、EthIf、EthSM、FrSM、J1939Dcm、J1939Nm、J1939Rm、LinIf、LinSM、LinTp、Nm、NvM、PduR、Rte、SchM、Sd、WdgM 等模块的相关 API。 详见原始 PDF 文档。 ### 8.7 服务接口 (Service Interfaces) #### 8.7.1 范围 (Scope of this Chapter) 本章描述 BswM 提供的服务接口。 #### 8.7.2 端口 (Ports) BswM 提供以下端口类型: - **Mode Request Ports**(R-Port,类型化为 SenderReceiverInterface):用于接收来自其他 BSW 模块的模式请求 - **Mode Switch Ports**(P-Port,类型化为 ModeSwitchInterface):用于通过 RTE 切换模式 - **ProvidedModeDeclarationGroupPrototypes**(P-Port,类型化为 ModeDeclarationGroup):用于通过 Schedule Manager 切换模式 ### 8.8 Callout 定义 (Callout Definitions) #### 8.8.1 \ ```c void (void); ``` - **描述**:用户定义的可调用函数,可在 action list 中使用。 用户负责在配置中定义函数签名。 --- ## 9 序列图 (Sequence diagrams) — 摘要 > 完整内容请参见原始 PDF 文档。 > > - 9.1 BswM 的延迟操作 (Deferred operation of BswM) — 显示 DEFERRED 模式请求如何被延迟到 BswM_MainFunction 处理 > - 9.2 BswM 的立即操作 (Immediate operation of BswM) — 显示 IMMEDIATE 模式请求如何在调用方上下文中被处理 --- ## 10 配置规范 (Configuration specification) — 摘要 > 完整内容请参见原始 PDF 文档。 关键配置容器包括: ### 10.1 如何阅读本章 (How to read this chapter) 本章描述了 BswM 的配置容器和参数。 ### 10.2 容器和配置参数 (Containers and configuration parameters) 关键容器列表(详细定义见原始 PDF 文档): | 编号 | 容器名称 | 描述 | |------|---------|------| | 10.2.1 | BswM | 顶层容器 | | 10.2.2 | BswMConfig | BswM 配置容器 | | 10.2.3 | BswMArbitration | 模式仲裁配置 | | 10.2.4 | BswMLogicalExpression | 逻辑表达式 | | 10.2.5 | BswMModeCondition | 模式条件 | | 10.2.6 | BswMConditionValue | 条件值 | | 10.2.7 | BswMBswMode | BSW 模式声明 | | 10.2.8 | BswMModeDeclaration | 模式声明 | | 10.2.9 | BswMEventRequestPort | 事件请求端口 | | 10.2.10 | BswMModeRequestPort | 模式请求端口 | | 10.2.11 | BswMModeInitValue | 模式初始值 | | 10.2.12 | BswMCompuScaleModeValue | 计算缩放模式值 | | 10.2.13 | BswMEventRequestSource | 事件请求源 | | 10.2.14 | BswMModeRequestSource | 模式请求源 | | 10.2.15 | BswMBswModeNotification | BSW 模式通知 | | 10.2.16-46 | (各种 BswM 的 BSW 模块指示配置) | | | 10.2.47 | BswMRule | 规则容器 | | 10.2.48 | BswMDataTypeMappingSets | 数据类型映射集 | | 10.2.49 | BswMModeControl | 模式控制 | | 10.2.50 | BswMAction | 动作 | | 10.2.51 | BswMAvailableActions | 可用动作集 | | 10.2.52-80 | (各种动作类型) | | | 10.2.81 | BswMUserCallout | 用户 callout | | 10.2.82 | BswMActionList | Action List | | 10.2.83 | BswMActionListItem | Action List Item | | 10.2.84 | BswMRteModeRequestPort | Rte 模式请求端口 | | 10.2.85 | BswMSwitchPort | 切换端口 | | 10.2.86 | BswMGeneral | 通用配置 | | 10.2.87 | BswMUserIncludeFiles | 用户包含文件 | ### 10.3 已发布信息 (Published Information) 无。 --- ## 11 不适用需求 (Not applicable requirements) 无。 --- ## 翻译说明 本文档为 AUTOSAR CP Release 4.4.0《基础软件模式管理器规范》的中文翻译。 主要翻译内容包括: 1. **完整翻译**: - 文档标识、变更历史 - 目录 - 第 1-5 章 - 第 7 章功能规范(核心 7.1-7.6 章节,包括所有 SWS_BswM_xxxxx 需求) - 第 8 章 API 规范中的 30+ 个 API 函数签名 2. **摘要标记**: - 第 6 章需求追踪(提供关键映射表) - 第 7.7 节虚拟网络 - 第 9 章序列图 - 第 10 章配置规范(提供容器列表) - 第 11 章不适用需求 3. **保留内容**: - 所有 API 标识符(如 `BswM_CanSM_CurrentState`、`BswM_EcuM_CurrentState`) - 模块缩写(EcuM、ComM、WdgM、NvM、PduR、CanSM、FrSM、EthSM、LinSM、LinTp、J1939Dcm、J1939Nm 等) - 状态名(STARTUP、RUN、SHUTDOWN、SLEEP、POST_RUN 等) - AUTOSAR 方框符 `⌈⌋` - 需求 ID(SWS_BswM_xxxxx、SRS_ModeMgm_xxxxx、SRS_BSW_xxxxx) - 文档间交叉引用