1 介绍与功能概述(Introduction and functional overview)
功能抑制管理器(Function Inhibition Manager,FiM)负责为软件组件及其内部功能提供控制机制。在此上下文中,一个功能可由一个、若干或部分可运行实体的内容构建,这些可运行实体具有相同的权限 / 抑制条件集。通过 FiM,可以抑制(停用应用功能)这些功能,这些功能可以配置,甚至在运行时(post-built 配置)进行修改。
功能和可运行实体是不同且独立的分类类型。可运行实体主要由其调度需求定义。相比之下,功能由其抑制条件分类。FiM 服务重点关注 SW-C 中的功能,但不仅限于它们。BSW 的功能也可以使用 FiM 服务。
这些功能被分配到某个标识符(FID - function identifier)以及该特定标识符的抑制条件。功能在执行前会轮询其各自 FID 的权限状态。如果某个特定标识符的抑制条件成立,则相应的功能不再被执行。
FiM 与 Dem 密切相关,因为诊断事件及其状态信息被支持为抑制条件。因此,需要在发生故障时停止的功能(例如某个传感器的故障)可以用特定的标识符表示。如果检测到故障并且事件被报告给 Dem,则 FiM 抑制 FID,从而抑制相应的功能。
为了处理功能与关联事件之间的关系,功能的标识符(FID)和抑制条件(事件)被引入到 SW-C 模板(BSW 等价)中。在配置过程中,构建数据结构(即抑制矩阵)以处理标识符对某些事件的敏感性。
软件组件可以作为一种事件集合集成到新环境中,无需大量工作即可配置。此外,当出现诸如"如果检测到特定事件,哪些功能被抑制"之类的问题时,系统分析会得到支持。FiM 的数据基础用作事件与待抑制 SW-C 之间已配置关系的文档。
在 AUTOSAR 中,RTE 根据 SW-C 的接口和调度需求处理 SW-C。相比之下,FiM 处理抑制条件,并通过相应的标识符(FID)为可运行体内的功能控制提供支持机制。因此,FiM 概念和 RTE 概念彼此不干扰。
FiM 规范文档的基本目标是:
- API 的标准化
- 引入可能的实现方法
- 为 OEM 和供应商提供共同方法的可能
2 缩略语与缩写(Acronyms and abbreviations)
| 缩略语 / 术语 | 说明 |
|---|---|
| Activity state(活动状态) | 活动状态是软件组件正在执行的状态。活动状态源自作为前置条件的权限状态以及物理使能条件。它不由 FiM 计算,也不作为状态变量可用。它只能从软件组件内的本地信息推导。详见第 7.2.1.6 节。 |
API | Application Programming Interface(应用程序编程接口) |
BSW | Basic Software(基础软件) |
Dem | Diagnostic Event Manager(诊断事件管理器) |
ECU | Electronic Control Unit(电子控制单元) |
FID | Function Identifier(功能标识符) |
FiM | Function Inhibition Manager(功能抑制管理器) |
| Functionality(功能) | 功能包括系统的用户可见和用户不可见功能方面(AUTOSAR_Glossary.pdf [2])。此外——在 FiM 上下文中——功能可由一个、若干或部分可运行实体的内容构建,这些可运行实体具有相同的权限/抑制条件集。通过 FiM,可以配置这些功能的抑制甚至通过标定进行修改。每个功能由唯一的FunctionId表示。功能以其特定的抑制条件集为特征,而可运行实体具有特定的调度条件。 |
HW | Hardware(硬件) |
ID | Identification/Identifier(识别/标识符) |
| Inhibition Condition(抑制条件) | 一个 FID、抑制掩码以及 Dem 事件/组件状态之间的关系(见 FiMInhibitionConfiguration)。 |
ISO | International Standardization Organization(国际标准化组织) |
MIL | Malfunction Indication Light(故障指示灯) |
| Monitoring function(监测功能) |
|
NVRAM | Non Volatile Memory(非易失性存储器) |
OBD | On-board Diagnostics(车载诊断) |
OBDII | Emission-related On-board Diagnostics(排放相关车载诊断) |
OEM | Original Equipment Manufacturer(原始设备制造商) |
OS | Operating System(操作系统) |
| Permission state(权限状态) | 权限状态包含由其 FID 表示的功能是可执行还是不应运行的信息。该状态由 FiM 根据报告的事件控制。详见第 7.2.1.6 节。 |
RAM | Random Access Memory(随机访问存储器) |
ROM | Read-only Memory(只读存储器) |
RTE | Runtime Environment(运行时环境) |
| Runnable entity(可运行实体) | 可运行实体是原子软件组件的一部分,可以独立于该原子软件组件的其他可运行实体执行和调度。它由可由 RTE 启动的指令序列描述。每个可运行实体与恰好一个 EntryPoint 关联。 |
SW-C | Software Component(软件组件) |
UDS | Unified Diagnostic Services(统一诊断服务) |
WP | AUTOSAR Work Package(AUTOSAR 工作包) |
Xxx_ | API 提供者的占位符 |
表 2.1:缩略语与缩写
3 相关文档(Related documentation)
3.1 输入文档
- [1] 基础软件模块通用规范(
AUTOSAR_SWS_BSWGeneral) - [2] 术语表(
AUTOSAR_TR_Glossary) - [3] 诊断事件管理器规范(
AUTOSAR_SWS_DiagnosticEventManager) - [4] 功能抑制管理器需求(
AUTOSAR_SRS_FunctionInhibitionManager) - [5] 虚拟功能总线(
AUTOSAR_EXP_VFB) - [6] 软件组件模板(
AUTOSAR_TPS_SoftwareComponentTemplate)
3.2 相关标准与规范
- [13] IEC 7498-1 基本模型,IEC 规范,1994
- [14] D1.5-通用架构;ITEA/EAST-EEA,1.0 版;第 3 章,72 页起。
- [15] D2.1-嵌入式基础软件结构需求;ITEA/EAST-EEA,1.0 或更高版本。
- [16] D2.2-现有解决方案描述;ITEA/EAST-EEA,1.0 或更高版本。
3.3 相关规范
AUTOSAR 提供了关于基础软件模块的通用规范 [1, SWS BSW General],对功能抑制管理器同样有效。
因此,SWS BSW General 规范应被视为功能抑制管理器的附加且必需的规范。
4 约束与假设(Constraints and assumptions)
[SWS_Fim_00007] FID 编号在每个 FiM 中应当唯一。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04701 |
由于软件组件与基础软件之间的通信仅限于一个 ECU,FiM 只能控制位于同一 ECU上的 FID。请注意,RTE 当前不支持位于不同 ECU 上的基础软件与软件组件之间的通信。
4.1 限制(Limitations)
必须为整个系统考虑时序约束。注意,进程和响应时间强烈依赖于 FiM 模块的实现。因此,如果对 FiM 响应速度的需求超过任务的周期(时间片),则这些需求必须由 FiM 实现(特别是受影响的应用)专门考虑。FiM 必须实现一些特殊措施,这些措施在本 AUTOSAR 文档中未明确指定,因为这里的实现是有意未规定的。
[SWS_Fim_00043] FiM 应当独立于其他 FID 的状态来计算 FID 的权限。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04706 |
FiM 不支持 FID 之间的相互依赖。这意味着一个 FID 不会影响另一个 FID。
4.2 在汽车领域的适用性(Applicability to car domains)
FiM 旨在满足 ECU 在系统检测到故障(例如开路或短路)时集中处理系统反应的设计需求。因此,FiM 的直接适用领域目前是车身、底盘和动力总成 ECU。然而,FiM 也完全可以用于其他汽车领域(如信息娱乐)的 ECU 实现。
一个主要约束是 FiM 单独无法处理以下类型的 SW 组件:
- 时间关键型——对于本地重构(例如在无效信号情况下的快速备份反应),可能太慢。
- 物理交互型——可能不够灵活。
- 安全关键型——可能没有足够的软件完整性。
5 与其他模块的依赖(Dependencies on other modules)
[SWS_Fim_00044] AUTOSAR 功能抑制管理器(FiM)与诊断事件管理器(Dem)、具有 FID 接口的软件组件(SW-C)、ECU 状态管理器、RTE 以及应被 FiM 抑制的 BSW 模块之间存在接口和依赖。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00384 |
- 诊断事件管理器(Dem)负责处理由监测功能报告的检测到的故障(表示为事件)。Dem 在监测状态发生变化时通知并更新功能抑制管理器(FiM),以便根据分配的依赖关系停止或释放功能。
- 具有 FID 接口的软件组件(SW-C)查询 FiM 以获取执行由 FID 标识的功能的权限。FID 必须由 SW 组件提供。
- ECU 状态管理器负责 BSW 组件的基本初始化和反初始化。
- 应被 FiM 抑制的 BSW 模块应使用 FiM 接口请求权限。因此,受影响的 BSW 模块必须在配置时提供相应的配置数据(EventID - FID - 抑制掩码关系),方法是使用与 SW-C 模板类似的模板。BSW 模块的接口处理对应于 SW 组件的接口处理。
- RTE为 BSW 实现调度机制,例如为 ECU 中使用的每个 BSW 模块分配优先级和内存保护。
5.1 需求
本规范的需求有三个来源:
- FiM 服务功能的需求在 [4] 中规定。为了对服务的 VFB 视图建模,VFB 规范 [5] 的 AUTOSAR 服务章节应被视为附加需求。
- 关于 SW-C 属性的形式描述,需求见 [6]。
5.1.1 用例(Use Cases)
在每个 ECU 上,通常使用 FiM 服务的一个实例和多个使用此服务的原子软件组件实例。这些原子软件组件在本文档中进一步称为"客户端"。
此外,基础软件中还有一些部分,要么控制 FiM 管理器(例如用于初始化和关闭的 ECU 状态管理器),要么自己查询 FiM 以获取执行权限。
6 需求追溯(Requirements traceability)
下表引用了 [3] 中指定的特性,并链接到这些特性的实现。
| 需求 | 描述 | 由以下 SRS 满足 |
|---|---|---|
SRS_BSW_00301 | 所有 AUTOSAR 基础软件模块应仅导入必要的信息 | SWS_Fim_00999 |
SRS_BSW_00302 | 所有 AUTOSAR 基础软件模块应仅导出其他模块所需的信息 | SWS_Fim_00999 |
SRS_BSW_00304 | 所有 AUTOSAR 基础软件模块应使用以下数据类型代替本地 C 数据类型 | SWS_Fim_00027 |
SRS_BSW_00305 | 数据类型命名约定 | SWS_Fim_00027 |
SRS_BSW_00306 | AUTOSAR 基础软件模块应与编译器和平台无关 | SWS_Fim_00999 |
SRS_BSW_00307 | 全局变量命名约定 | SWS_Fim_00999 |
SRS_BSW_00308 | AUTOSAR 基础软件模块不应在头文件中定义全局数据,而应在 C 文件中定义 | SWS_Fim_00999 |
SRS_BSW_00309 | 所有 AUTOSAR 基础软件模块应通过显式分配 const 关键字来指示所有具有只读用途的全局数据 | SWS_Fim_00999 |
SRS_BSW_00310 | API 命名约定 | SWS_Fim_00006、SWS_Fim_00011、SWS_Fim_00021 |
SRS_BSW_00312 | 共享代码应可重入 | SWS_Fim_00011、SWS_Fim_00021 |
SRS_BSW_00314 | 所有内部驱动模块应将中断帧定义与服务例程分离 | SWS_Fim_00999 |
SRS_BSW_00323 | 所有 AUTOSAR 基础软件模块应检查传入的 API 参数的有效性 | SWS_Fim_00999 |
SRS_BSW_00325 | 中断服务例程和中断上下文中运行的函数的运行时应保持简短 | SWS_Fim_00999 |
SRS_BSW_00328 | 所有 AUTOSAR 基础软件模块应避免代码重复 | SWS_Fim_00999 |
SRS_BSW_00330 | 应允许在源代码使用且运行时关键的情况下使用宏代替函数 | SWS_Fim_00999 |
SRS_BSW_00331 | 所有基础软件模块应严格区分错误和状态信息 | SWS_Fim_00015 |
SRS_BSW_00333 | 对于每个回调函数,应指定它是否从中断上下文调用 | SWS_Fim_00999 |
SRS_BSW_00334 | 所有基础软件模块应提供一个包含元数据的 XML 文件 | SWS_Fim_00999 |
SRS_BSW_00336 | 基础软件模块应能够关闭 | SWS_Fim_00999 |
SRS_BSW_00342 | 应可能创建由源代码模块和目标代码模块组成的 AUTOSAR ECU(可混合) | SWS_Fim_00999 |
SRS_BSW_00343 | 基础软件模块规范和配置的时间单位应优先采用物理时间单位 | SWS_Fim_00999 |
SRS_BSW_00344 | BSW 模块应支持链接时配置 | SWS_Fim_00013 |
SRS_BSW_00345 | BSW 模块应支持预编译配置 | SWS_Fim_00013 |
SRS_BSW_00347 | 应对 BSW 驱动器的不同实例进行命名分离 | SWS_Fim_00999 |
SRS_BSW_00353 | 目标和编译器特定范围的所有整数类型定义应放在并组织在单一类型头文件中 | SWS_Fim_00999 |
SRS_BSW_00357 | 对于 API 调用的成功/失败,应定义标准返回类型 | SWS_Fim_00999 |
SRS_BSW_00358 | AUTOSAR 基础软件模块实现的 init() 函数的返回类型应为 void | SWS_Fim_00006、SWS_Fim_00045、SWS_Fim_00059 |
SRS_BSW_00359 | 所有 AUTOSAR 基础软件模块的回调函数应避免使用 void 以外的返回类型(如果可能) | SWS_Fim_00999 |
SRS_BSW_00360 | AUTOSAR 基础软件模块的回调函数允许具有参数 | SWS_Fim_00999 |
SRS_BSW_00361 | 编译器特定范围的所有非标准化关键字的映射应放在并组织在编译器特定的类型和关键字头文件中 | SWS_Fim_00999 |
SRS_BSW_00373 | 每个 AUTOSAR 基础软件模块的主处理函数应根据定义的约定命名 | SWS_Fim_00060 |
SRS_BSW_00375 | 基础软件模块应报告唤醒原因 | SWS_Fim_00999 |
SRS_BSW_00377 | 基础软件模块可以返回模块特定类型 | SWS_Fim_00027 |
SRS_BSW_00378 | AUTOSAR 应提供布尔类型 | SWS_Fim_00999 |
SRS_BSW_00384 | 基础软件模块规范应至少在描述中指定它们需要哪些其他模块 | SWS_Fim_00044 |
SRS_BSW_00386 | BSW 应指定用于检测错误的配置 | SWS_Fim_00999 |
SRS_BSW_00404 | BSW 模块应支持 post-build 配置 | SWS_Fim_00062 |
SRS_BSW_00405 | BSW 模块应支持多个配置集 | SWS_Fim_00062 |
SRS_BSW_00406 | 表示 BSW 模块是否初始化的静态状态变量应在调用 BSW 模块的任何 API 之前以值 0 初始化 | SWS_Fim_00045、SWS_Fim_00055、SWS_Fim_00056、SWS_Fim_00057、SWS_Fim_00058、SWS_Fim_00059 |
SRS_BSW_00409 | 所有生产代码错误 ID 符号由 Dem 模块定义,应由其他 BSW 模块从 Dem 配置中获取 | SWS_Fim_00999 |
SRS_BSW_00416 | 要初始化的模块的顺序应是可配置的 | SWS_Fim_00018 |
SRS_BSW_00417 | 不属于 SW-C 的软件应在 DEM 完全运行后报告错误事件。 | SWS_Fim_00999 |
SRS_BSW_00422 | 错误状态信息的预去抖在 DEM 内完成 | SWS_Fim_00999 |
SRS_BSW_00423 | 具有 AUTOSAR 接口的 BSW 模块应可使用 SW-C 模板的方法描述 | SWS_Fim_00999 |
SRS_BSW_00424 | BSW 模块主处理函数不应进入等待状态 | SWS_Fim_00999 |
SRS_BSW_00425 | BSW 模块描述模板应提供对可调度对象的已定义触发条件建模的方法 | SWS_Fim_00999 |
SRS_BSW_00426 | BSW 模块应确保在 BSW 模块之间共享的数据的数据一致性 | SWS_Fim_00999 |
SRS_BSW_00427 | ISR 函数应在 BSW 模块描述模板中定义和文档化 | SWS_Fim_00999 |
SRS_BSW_00428 | BSW 模块应说明其主处理函数是否必须以特定顺序或序列执行 | SWS_Fim_00999 |
SRS_BSW_00429 | 对 OS 的访问受到限制 | SWS_Fim_00999 |
SRS_BSW_00432 | 模块应具有用于读/接收和写/发送数据路径的单独主处理函数 | SWS_Fim_00999 |
SRS_BSW_00433 | 主处理函数仅允许从 BSW Scheduler 提供的任务体中调用 | SWS_Fim_00999 |
SRS_Fim_04700 | 应提供用于查询 FID 权限状态的接口 | SWS_Fim_00010、SWS_Fim_00011、SWS_Fim_00090、SWS_Fim_00094 |
SRS_Fim_04701 | 由 FIM 监管的功能应由静态配置定义 | SWS_Fim_00002、SWS_Fim_00003、SWS_Fim_00007 |
SRS_Fim_04702 | FIM 应支持不同的抑制选项 | SWS_Fim_00012 |
SRS_Fim_04706 | 应提供功能的抑制条件的单独配置 | SWS_Fim_00008、SWS_Fim_00013、SWS_Fim_00016、SWS_Fim_00043 |
SRS_Fim_04709 | 应在执行功能之前评估权限状态 | SWS_Fim_00011 |
SRS_Fim_04712 | 启动时的权限状态应被初始化 | SWS_Fim_00018 |
SRS_Fim_04713 | 应提供计算权限状态的方法 | SWS_Fim_00009、SWS_Fim_00015、SWS_Fim_00020 |
SRS_Fim_04717 | 权限状态应被更新 | SWS_Fim_00021、SWS_Fim_00022 |
SRS_Fim_04719 | 应提供汇总诊断事件状态的机制 | SWS_Fim_00061 |
SRS_Fim_04721 | 应支持 OBD 功能 | SWS_Fim_00999 |
SRS_Fim_04723 | FIM 应为每个 FID 提供一个布尔型配置选项 | SWS_Fim_00105、SWS_Fim_00106、SWS_Fim_00107、SWS_Fim_00108 |
7 功能规范(Functional specification)
7.1 背景与原理(Background & Rationale)
功能抑制管理器允许查询软件组件及其内部功能的权限/抑制状态。在 FiM 上下文中,FID(功能标识符)标识一个应用功能以及该特定标识符的抑制条件。功能在执行前会轮询其 FID 的权限状态。如果某个特定标识符的抑制条件适用,则相应的功能不再被允许执行。通过 FiM,可以配置这些功能的抑制甚至通过标定进行修改。Dem 事件及其状态信息被支持为抑制条件。
为了处理功能与关联影响事件之间的关系,功能的标识符(FID)和抑制条件(事件)被包含在 SW 组件模板(BSW 等价)中。在 FiM 配置期间,构建数据结构(即抑制矩阵)以处理标识符对某些事件的敏感性。
7.2 需求
7.2.1 FiM 核心变量
7.2.1.1 "诊断事件"的定义
"诊断事件"是由 Dem 提供给特定诊断监测功能的标识符,用于报告错误。
详见 AUTOSAR_SWS_DiagnosticEventManager 文档 [3]。
7.2.1.2 "监测状态"的定义
"监测状态"是由 Dem 根据监测功能报告的值计算的状态。可能的值由 Dem_MonitorStatusType 定义。
详见 AUTOSAR_SWS_DiagnosticEventManager 文档 [3]。
7.2.1.3 "被监测组件"的定义
"被监测组件"是由 Dem 提供给特定被监测组件(硬件组件或信号)的标识符。"被监测组件"的 FAILED 状态表示所有分配的监测功能的结果以及从其他 DemComponents 继承的故障信息。
详见 AUTOSAR_SWS_DiagnosticEventManager 文档 [3]。
7.2.1.4 "汇总事件"的定义
[SWS_Fim_00061] FiM 配置应支持汇总事件。一个汇总事件由多个单一诊断事件组成。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04719 |
在配置过程中,这些单一事件可以组合成汇总事件(ECUC_FiM_00037)。汇总事件简化了处理与该特定汇总事件关联或由其表示的多个事件。为了简单起见,该特定汇总事件可以在 SW-C 模板中用作抑制条件。
[SWS_Fim_00064] FiM 还应能够处理与一个汇总事件关联的所有 FID 的抑制条件,如果与该汇总事件关联的某个 Dem 事件之一被报告给 FiM。
| 类型 | Valid |
|---|
因此,该特定汇总事件仅代表多个诊断事件(参考 10.2.3)。汇总事件的用例例如组合所有指示传感器故障的错误条件:
传感器 X 有多个诊断,例如对地短路、对电池短路和开路:X_SCG、X_SCB 和 X_OC。功能 FID_0、FID_1、...、FID_N 在此故障情况下应被抑制。直接配置需要 3 * N 个容器 FiMInhibitionConfiguration,其中 FIM_INH_EVENT_ID = X_SCG/SCB/OC,FIM_INH_FUNCTION_ID = FID_0/.../N。
使用汇总事件(FiMSummaryEvent),一组事件可以通过选择 FiMInhSumRef 重用于多个抑制配置。这可以简化配置。
7.2.1.5 "功能标识符"的定义
FiM 实现功能权限的计算。计算的对象是 SW 组件或逻辑单元,它们接收信息"权限授予"/"权限拒绝"。
为了寻址这些组件,它们必须在 FIM 中配置,并分配一个功能标识符以通过接口寻址它们。
[SWS_Fim_00002] 配置过程应保证 FunctionId 在每个 FiM 中唯一。两个具有不同事件依赖关系的不同功能绝不应具有相同的 FunctionId(另见 SWS_Fim_00007)。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04701 |
[SWS_Fim_00003] FiM 模块的环境应使用 FunctionId 直接指向关联的功能信息(权限状态等)。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04701 |
[SWS_Fim_00010] 信息流从 Dem 提供事件信息更改的 API 调用开始。该信息被处理并评估到 FID 的依赖关系。最后,FID 的权限状态通过 RTE 的 API 访问(图 7.1)。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04700 |
图 7.1:确定 FID 权限状态的逻辑信息流(权限状态存储在 RAM 中的实现)
每个 FID 的权限状态根据分配给特定 FID 的 EventId 计算。然后,每个 FID(例如 FID_K)的计算权限状态被"与"运算以确定最终权限状态。这意味着 FiM 将 FID 的权限状态存储在 RAM 中的实现。
或者,FiM 可以轮询监测状态以重新计算权限状态。轮询由请求其权限状态的功能(SW-C 或 BSW)或周期任务触发。在这种情况下,任何事件更改时 FiM 中不会增加处理负担。
7.2.1.6 "功能标识符权限状态"的定义
[SWS_Fim_00015] FID 权限状态包含由其 FID 表示的功能是否可以执行的信息。如果权限状态 == TRUE,则与 FID 关联的功能被允许执行。如果权限状态 == FALSE,则与 FID 关联的功能不允许执行。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00331、SRS_Fim_04713 |
权限状态基于 Dem 报告的事件。因此,权限状态不直接考虑物理条件(例如温度、发动机转速等),而是考虑那些报告给 Dem 的条件(例如传感器故障)。
除了权限状态作为前置条件外,活动状态(功能是否处于活动状态)还包括表示功能是否确实被执行(即处于活动状态)的物理使能条件。
如上所述,一种可能的实现是在状态变量中提供权限状态。替代方法是在查询时根据底层依赖关系计算权限。
提示:如果权限状态存储在状态变量中,则它们是每个 FID 的唯一值。SW 组件通过 FiM_GetFunctionPermission 访问状态。
[SWS_Fim_00009] 如果实现使用状态变量表示 FID 的权限,则状态变量应在 ECU 开发阶段由标定系统(由 AUTOSAR 定义)可读,以用于跟踪目的。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04713 |
7.2.2 FiM 核心功能
7.2.2.1 FiM 数据结构
[SWS_Fim_00013] FiM 的配置过程应在 FiM 模块内创建数据结构,以存储抑制关系(EventID - FID - 适用掩码)。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00344、SRS_BSW_00345、SRS_Fim_04706 |
可配置的 EventId 数量和抑制掩码分配给一个 FID。每个 FID 的 EventId 数量和抑制掩码必须匹配,以便为每个配置的事件存在相应的抑制掩码。
抑制掩码包含 FID 的抑制条件,前提是关联的 EventId 具有特定状态(Dem_EventStatusExtendedType)。这些掩码定义 FID 对事件的敏感状态。然而,掩码不仅根据 Dem_EventStatusExtendedType 寻址某些位,它实际上从 Dem_EventStatusExtendedType 中选择一种算法来计算布尔抑制条件。
FiM 数据结构的实现无法规定。抑制矩阵的一种可能实现是每个抑制源的标定值块。
图 7.2:抑制掩码
[SWS_Fim_00008] FiM 模块应提供通过 post-built 配置修改抑制条件的可能性。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04706 |
根据实现,可能无法:
- 添加新事件。
- 扩展每个事件被抑制的 FID 数量。
- 扩展关于事件数量、FID 数量和链接数量的指定配置参数。
7.2.2.2 Dem 与功能抑制管理器(FiM)之间的交互
[SWS_Fim_00022] FiM 模块的目的是基于支持为抑制条件的 Dem 事件,提供控制(允许/禁止)SW-C 中功能的服务。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04717 |
[SWS_Fim_00065] 功能抑制管理器应使用软件组件提供的 FID - EventID - 抑制掩码关系来确定所有已配置 FID 的权限状态。
| 类型 | Valid |
|---|
在报告事件的监测状态发生变化时,Dem 通过 API 函数 FiM_DemTriggerOnMonitorStatus 通知 FiM 监测状态变化(如果启用了 DemTriggerFiMReports)。
在收到监测状态变化的通知后,FiM 使用 API Dem_GetMonitorStatus 重新计算功能抑制。
注释:从功能的角度来看,抑制/释放条件的同步更新可以在 FiM_MainFunction API 之内或之外进行。
如第 4.1 节所述,FiM 的实现高度依赖于从应用派生的需求(例如时序需求)。如果应用需要快速响应时间,FiM 必须足够快地提供 FID 信息以允许触发跛行回家功能。
API FiM_DemTriggerOnMonitorStatus 仅在每个 FID 存储状态变量时相关。在不存储状态且每次查询时计算权限状态的替代实现中,API FiM_DemTriggerOnMonitorStatus 无效。
作为实现的示例,图 3 显示了单个 EventId-FID 链接的计算。左侧,监测状态由 Dem 报告为 Dem_EventStatusExtendedType。该状态与为与 FID 关联的 EventId 配置的掩码进行比较。
为每个 FID 分配一个抑制计数器。抑制计数器包含当前抑制 EventId 的数量。
如果计算周期性执行(通过 Dem_GetMonitorStatus 读取监测状态),则当状态和掩码匹配时抑制计数器应递增;否则抑制计数器不更新。这适用于 FiM_GetFunctionPermission(如果权限状态必须在查询时计算)和 FiM_MainFunction API。
在监测状态变化触发时,应使用存储的当前抑制 EventId(抑制计数器)来计算权限状态。如果 FiM_DemTriggerOnMonitorStatus 报告监测状态变化,则应执行以下操作:
- a. 如果 EventId 的状态变化导致释放状态(掩码与监测状态不匹配),则抑制计数器必须递减。
- b. 如果 EventId 的状态变化导致抑制状态(掩码与监测状态匹配),则抑制计数器必须递增。
如果抑制计数器 > 0,则 FID 权限状态应设置为 FALSE,否则 FID 权限状态应设置为 TRUE。
图 7.3:基于监测状态信息的权限状态计算
[SWS_Fim_00012] FiM 模块应根据抑制源的实际状态和每个抑制源的标定掩码计算抑制状态(参考 10.2.7)。如果监测状态等于标定掩码(=Defect、Tested、NotTested),FiM 模块应抑制 FID。如果事件的掩码不再与标定值匹配,则抑制被停用。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04702 |
可选地,可以使用已测试状态进行抑制。根据抑制条件,如果事件具有状态"Tested"或"NotTested",则抑制可以处于活动状态。如果未选择已测试值,则已测试状态不相关。
可用的状态标志组合被分配给具有"Tested"、"Not_Tested"或"Last_Failed"等口头表示的预定义值。
[SWS_Fim_00098] 功能抑制管理器应使用 FID - DemComponentId - 抑制配置来确定已配置 FID 的权限状态。
| 类型 | Valid |
|---|
在 DemComponent 的 FAILED 状态发生变化时,应重新计算功能状态。每当组件状态为 FAILED(ComponentFailedStatus = TRUE)时,FID 被抑制。
[SWS_Fim_00099] 如果 FIM 配置为周期性轮询状态,则 FIM 应使用 API Dem_GetComponentFailed 获取组件的当前 FAILED 状态。
| 类型 | Valid |
|---|
[SWS_Fim_00100] 如果 FIM 配置为在 eventStatus 触发(FiMCyclicEventEvaluation),则 FIM 应通过提供函数 FiM_DemTriggerOnComponentStatus 来接受 DemComponent 的状态变化信息。
| 类型 | Valid |
|---|
7.2.2.3 SW 组件与功能抑制管理器(FiM)之间的交互
[SWS_Fim_00016] 配置工程师应在编译时为每个 FID 提供处理功能与事件依赖关系所需的抑制条件。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04706 |
注意,通过标定的修改应是可能的。使用 SW 组件模板内容的 FiM 配置机制应考虑这些要求。
首先,需要引入并分配 FID。此外,对于每个 FID,应由 SW 组件提供导致 FID 抑制的事件列表及关联掩码。第 10 章介绍 SW 组件模板如何考虑这些配置要求。
在配置过程中,构建数据结构。根据实现,这可以是事件到所有受影响 FID 的映射,或者反之,FID 到影响它的所有事件的映射。
控制意味着在实现的功能中,通过 AUTOSAR 服务查询 FID 的权限。
[SWS_Fim_00020] FiM 模块应通过同步响应传入的权限查询来确保对功能的即时控制。FiM 模块应通过将权限状态存储为状态变量或在权限查询时评估事件状态来实现此行为。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04713 |
[SWS_Fim_00105] 如果使用接口 FiM_SetFunctionAvailable 将功能(FID)设置为不可用,则其权限状态 FiM_GetFunctionPermission 应始终返回 FALSE。
| 类型 | Valid |
|---|---|
| 满足 | SRS_Fim_04723 |
7.2.2.4 FiM 使用的应用示例
图 7.4:FiM 使用
- FiM 的配置实际建立了 EventId 与分配的 FunctionId 之间的关系
- 所需的信息是:
- 对于每个 FunctionId:FunctionId 的状态如何依赖于一个/多个 EventId 的状态?
- 掩码确定 EventId 状态与 FunctionId 抑制状态之间的关系。
- 如果 FunctionId 依赖于多个 EventId,则行结果'或'运算得出该 FunctionId 的总体结果。
- 对于每个 FunctionId:FunctionId 的状态如何依赖于一个/多个 EventId 的状态?
7.2.2.5 初始化
[SWS_Fim_00018] 如果使用 Dem 事件状态信息,则 FiM 模块应在初始化时根据 Dem 的所有恢复的监测状态信息(不仅仅是存储在故障存储器中的事件)计算所有 FID 的权限状态。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00416、SRS_Fim_04712 |
7.2.3 OBD 功能
7.2.3.1 IUMPR 支持
为了跟踪日常使用中诊断功能的行为,特别是发现故障的能力,法规要求根据标准化驾驶曲线跟踪此性能。这称为"在使用监测性能比"(IUMPR,In-Use Monitor Performance Ratio),定义为可发现故障的次数(=分子)除以标准化驾驶曲线已完成的次数(=分母),如各 OBD 法规中所定义。相关数据记录基于 FID 和 EventID 在 Dem 中分配。
因此,根据引用的 FID 的 FiM 配置,可以评估是否需要停止 Ratio Id 特定的数据记录。特别是,在使用 $07 服务中可见期间,IUMPR 跟踪应停止。
Dem 可以将 FiM 配置用于其 IUMPR 计算,或通过调用专用 FID 的 FiM_GetFunctionPermission。
注意:FiM 不为 OBDII 提供特殊功能,但使用已存在的 OBDII 机制。
7.3 错误分类(Error classification)
7.3.1 开发错误(Development Errors)
[SWS_Fim_00076] 开发错误类型如表 7.1 所示。
| 类型 | Valid |
|---|
| 错误类型 | 相关错误码 | 值 [hex] |
|---|---|---|
| 在 FiM 模块完全初始化之前或 FiM 模块关闭后调用 API 函数 | FIM_E_UNINIT | 0x01 |
使用错误的 FID 调用 FiM_GetFunctionPermission | FIM_E_FID_OUT_OF_RANGE | 0x02 |
| Dem 使用无效的 EventId 调用 FiM | FIM_E_EVENTID_OUT_OF_RANGE | 0x03 |
| 使用 NULL 指针调用 API | FIM_E_PARAM_POINTER | 0x04 |
| 无效的配置集选择 | FIM_E_INIT_FAILED | 0x05 |
表 7.1:开发错误类型
7.3.2 运行时错误(Runtime Errors)
无运行时错误。
7.3.3 瞬态故障(Transient Faults)
无瞬态故障。
7.3.4 生产错误(Production Errors)
无生产错误。
7.4 配置约束(Configuration Constraints)
[SWS_Fim_CONSTR_0001] 对于每个配置的 FiMInhibitionConfiguration,应至少配置 FiMInhSumRef、FiMInhEventRef 或 FiMInhComponentRef 之一。
| 类型 | Valid |
|---|
8 API 规范(API specification)
8.1 导入类型(Imported types)
本章列出了从以下文件包含的所有类型:
[SWS_Fim_00081] 导入类型
| 模块 | 头文件 | 导入类型 |
|---|---|---|
| Dem | Dem.h | Dem_ComponentIdType |
| Rte_Dem_Type.h | Dem_EventIdType | |
| Rte_Dem_Type.h | Dem_MonitorStatusType | |
| SchM | SchM.h | SchM_ReturnType |
| Std_Types | StandardTypes.h | Std_ReturnType |
| StandardTypes.h | Std_VersionInfoType |
表 8.1:FiM_ImportedTypes
8.2 类型定义(Type definitions)
8.2.1 FiM_ConfigType
[SWS_Fim_00092] FiM_ConfigType
| Name | FiM_ConfigType |
|---|---|
| Type | Structure |
| Range | -- 实现特定 |
| Description | 此类型为 FIM 的 post build 参数定义数据结构。初始化时,FIM 获得指向此类型结构的指针以访问其配置数据,这是初始化所必需的。 |
| Available via | FiM.h |
表 8.2:FiM_ConfigType
8.3 函数定义(Function definitions)
这是为上层模块提供的函数列表。
8.3.1 ECU 状态管理器 <-> FiM 接口
8.3.1.1 FiM_Init
[SWS_Fim_00077] FiM_Init
| Service name | FiM_Init |
|---|---|
| Syntax | void FiM_Init(const FiM_ConfigType* FiMConfigPtr) |
| Service ID [hex] | 0x00 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Parameters (in) | FiMConfigPtr – |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 此服务初始化 FIM。 |
| Available via | FiM.h |
表 8.3:FiM_Init(注:见第 9.1 章)
[SWS_Fim_00045] 如果开启了开发错误检测,FiM 模块应向 DET 报告错误,如果它未成功完成初始化且检测到不允许的访问。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00358、SRS_BSW_00406 |
[SWS_Fim_00059] 表示 FiM 是否已初始化的静态状态变量应在调用 FiM 的任何 API 之前以值 0 初始化。FiM_Init 应将静态状态变量设置为不等于 0 的值。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00358、SRS_BSW_00406 |
为了快速恢复权限状态,建议如果 Dem 和 FiM 实现为集群,Dem 提供对监测状态信息的直接访问。在这种情况下,FiM 需要了解 Dem 的数据结构,以便可以直接访问 EventId 状态。
注意:关闭期间没有显式动作。权限状态在 ECU 关闭之前保持有效,因为它们直接依赖于监测状态信息。
8.3.2 SW 组件 <-> FiM 接口
8.3.2.1 FiM_GetFunctionPermission
[SWS_Fim_00011] FiM_GetFunctionPermission
| Service name | FiM_GetFunctionPermission |
|---|---|
| Syntax | Std_ReturnType FiM_GetFunctionPermission(FiM_FunctionIdType FID, boolean* Permission) |
| Service ID [hex] | 0x01 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | FID:功能的标识。FunctionId 在 FIM 中配置。 Min: 1 (0: 表示无功能) Max: FIM 中 FID 配置的结果(Max 为 255 或 65535) |
| Parameters (inout) | None |
| Parameters (out) | Permission:TRUE: FID 有权限运行;FALSE: FID 无权限运行,即不应被执行 |
| Return value | Std_ReturnType:E_OK: 请求被接受;E_NOT_OK: 请求未被接受,即 FIM 初始化未完成 |
| Description | 此服务向功能报告权限状态。 |
| Available via | FiM.h |
表 8.4:FiM_GetFunctionPermission(满足:SRS_BSW_00310、SRS_BSW_00312、SRS_Fim_04700、SRS_Fim_04709)
[SWS_Fim_00066] SW 组件和 BSW 应使用 FiM_GetFunctionPermission 函数来查询执行由相应 FID 表示的某个功能的权限。
[SWS_Fim_00025] 函数 FiM_GetFunctionPermission 应同步传递返回值,以便在软件组件中直接使用此信息来控制和执行底层代码。
[SWS_Fim_00055] 如果为模块 FiM 启用了开发错误检测:函数 FiM_GetFunctionPermission 应在 FID 范围上执行合理性检查。如果 FID 超出范围,函数应引发开发错误并返回无权限(FALSE)。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00406 |
[SWS_Fim_00056] 如果为模块 FiM 启用了开发错误检测:函数 FiM_GetFunctionPermission 应检查模块 FiM 的初始化是否已完成。如果函数检测到初始化未完成,它应引发开发错误并返回无权限(FALSE)。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00406 |
8.3.2.2 FiM_SetFunctionAvailable
[SWS_Fim_00106] FiM_SetFunctionAvailable
| Service name | FiM_SetFunctionAvailable |
|---|---|
| Syntax | Std_ReturnType FiM_SetFunctionAvailable(FiM_FunctionIdType FID, boolean Availability) |
| Service ID [hex] | 0x07 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | FID:功能的标识。 Availability:所请求 FID 的权限:TRUE: 功能可用;FALSE: 功能不可用。 |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | Std_ReturnType:E_OK: 请求被接受;E_NOT_OK: 请求未被接受(例如给定的 FID 无效) |
| Description | 此服务设置功能的可用性。仅当 FiMAvailabilitySupport 配置为 True 时,该功能才可用。 |
| Available via | FiM.h |
表 8.5:FiM_SetFunctionAvailable(满足:SRS_Fim_04723)
8.3.3 Dem <-> FiM 接口
8.3.3.1 FiM_DemTriggerOnMonitorStatus
[SWS_Fim_00021] FiM_DemTriggerOnMonitorStatus
| Service name | FiM_DemTriggerOnMonitorStatus |
|---|---|
| Syntax | void FiM_DemTriggerOnMonitorStatus(Dem_EventIdType EventId) |
| Service ID [hex] | 0x02 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | EventId:事件的标识。事件号在 DEM 中配置。 Min: 1 (0: 表示无事件或故障) Max: DEM 中事件号配置的结果(Max 为 255 或 65535) |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 此服务由 Dem 调用以通知 Fim 监测状态变化。 |
| Available via | FiM_Dem.h |
表 8.6:FiM_DemTriggerOnMonitorStatus(满足:SRS_BSW_00310、SRS_BSW_00312、SRS_Fim_04717)
[SWS_Fim_00057] 如果为模块 FiM 启用了开发错误检测:函数 FiM_DemTriggerOnMonitorStatus 应在 EventId 上执行合理性检查。如果所请求的 EventId 在 Dem 配置中不存在,函数应引发开发错误 FIM_E_EVENTID_OUT_OF_RANGE。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00406 |
[SWS_Fim_00058] 如果为模块 FiM 启用了开发错误检测:函数 FiM_DemTriggerOnMonitorStatus 应检查 FiM 的完整初始化。如果函数检测到初始化未完成,它应引发开发错误。
| 类型 | Valid |
|---|---|
| 满足 | SRS_BSW_00406 |
8.3.3.2 FiM_DemTriggerOnComponentStatus
[SWS_Fim_00101] FiM_DemTriggerOnComponentStatus
| Service name | FiM_DemTriggerOnComponentStatus |
|---|---|
| Syntax | void FiM_DemTriggerOnComponentStatus(Dem_ComponentIdType ComponentId, boolean ComponentFailedStatus) |
| Service ID [hex] | 0x06 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Parameters (in) | ComponentId:DemComponent 的标识。 ComponentFailedStatus:组件的新 FAILED 状态。 |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 在组件失败状态更改时触发。 |
| Available via | FiM_Dem.h |
表 8.7:FiM_DemTriggerOnComponentStatus
8.3.3.3 FiM_DemInit
[SWS_Fim_00006] FiM_DemInit
| Service name | FiM_DemInit |
|---|---|
| Syntax | void FiM_DemInit(void) |
| Service ID [hex] | 0x03 |
| Sync/Async | Synchronous |
| Reentrancy | Non Reentrant |
| Parameters (in) | None |
| Parameters (inout) | None |
| Parameters (out) | None |
| Return value | None |
| Description | 此服务重新初始化 FIM。 |
| Available via | FiM_Dem.h |
表 8.8:FiM_DemInit(满足:SRS_BSW_00310、SRS_BSW_00358)
[SWS_Fim_00069] 函数 FiM_DemInit 应计算所有 FID 的权限状态。
[SWS_Fim_00082] 如果 Dem 和 FiM 实现为两个独立的模块,函数 FiM_DemInit 应通过函数 Dem_GetMonitorStatus 同步访问 EventId 状态。
8.3.3.4 FiM_GetVersionInfo
[SWS_Fim_00078] FiM_GetVersionInfo
| Service name | FiM_GetVersionInfo |
|---|---|
| Syntax | void FiM_GetVersionInfo(Std_VersionInfoType* versioninfo) |
| Service ID [hex] | 0x04 |
| Sync/Async | Synchronous |
| Reentrancy | Reentrant |
| Parameters (in) | None |
| Parameters (inout) | None |
| Parameters (out) | versioninfo:指向存储此模块版本信息的指针。 |
| Return value | None |
| Description | 此服务返回此模块的版本信息。 |
| Available via | FiM.h |
表 8.9:FiM_GetVersionInfo
8.3.4 回调通知(Call-back notifications)
本章列出了由 FiM 模块提供并由下层模块使用的所有函数。
无指定回调通知。
8.3.5 调度函数(Scheduled functions)
本章列出了由 FiM 模块提供并由基础软件模块调度器直接调用的所有函数。
8.3.5.1 FiM_MainFunction
[SWS_Fim_00060] FiM_MainFunction
| Service name | FiM_MainFunction |
|---|---|
| Syntax | void FiM_MainFunction(void) |
| Service ID [hex] | 0x05 |
| Description | – |
| Available via | SchM_FiM.h |
表 8.10:FiM_MainFunction(满足:SRS_BSW_00373)
权限状态的评估可以在事件变化时或周期性执行。
[SWS_Fim_00070] 如果 FiM 模块轮询监测状态(如配置参数 FiMEventUpdateTriggeredByDem = FALSE 中所定义)并决定以循环方式进行,则 FiM_MainFunction 应用所有 EventId 的抑制掩码计算权限状态。应使用 API Dem_GetMonitorStatus 获取 EventId 的状态信息。
[SWS_Fim_00097] 如果 Dem_GetMonitorStatus 返回 E_NOT_OK,FIM 不应在抑制掩码计算中考虑此事件。
[SWS_Fim_00067] FiM 应使用抑制掩码周期性评估所有 EventId 的实际 EventId 状态信息,然后计算相应的 FID 权限状态。如果 Dem 和 FiM 实现为单独的模块,FiM 应使用 API Dem_GetMonitorStatus 访问监测状态信息。如果 Dem 和 FiM 实现为绑定包(bundle),FiM 应访问 Dem 的监测状态结构。
8.3.6 期望接口(Expected Interfaces)
本章列出了模块 FiM 所需的其他模块的所有函数。
8.3.6.1 强制接口(Mandatory Interfaces)
本章定义了实现模块核心功能所需的所有接口。
[SWS_Fim_00079] 强制接口
| API 函数 | 头文件 | 描述 |
|---|---|---|
Dem_GetMonitorStatus | Dem.h | 获取事件的当前监测状态。 |
SchM_ActMainFunction_FiM | <none> | 调用 SchM_ActMainFunction 函数以触发相应主处理函数的激活。 |
SchM_CancelMainFunction_FiM | <none> | 调用 SchM_CancelMainFunction 函数以触发相应主处理函数请求激活的取消。 |
表 8.11:FiM 强制接口
8.3.6.2 可选接口(Optional Interfaces)
本章定义了实现模块可选功能所需的所有接口。
[SWS_Fim_00080] 可选接口
| API 函数 | 头文件 | 描述 |
|---|---|---|
Det_ReportError | Det.h | 报告开发错误的服务。 |
表 8.12:FiM 可选接口
8.4 服务接口(Service interfaces)
本章指定了通过 VFB 操作 FiM 功能的端口和端口接口。
8.4.1 客户端-服务器接口(Client-Server-Interfaces)
8.4.1.1 FiM_FunctionInhibition
使用 SW-C 模板的概念,接口定义如下:
[SWS_Fim_00090] 服务接口 FunctionInhibition
| Name | FunctionInhibition |
|---|---|
| Comment | SW 组件可以使用此服务来查询执行由 FID 表示的某个功能的权限。 |
| IsService | true |
| Variation | -- |
| Possible Errors | 0 E_OK 1 E_NOT_OK |
表 8.13:服务接口 FunctionInhibition
操作
GetFunctionPermission
| Comments | 获取相应 FID 的权限状态。 |
|---|---|
| Variation | -- |
| Parameters |
Permission Comment: 所请求 FID 的权限。TRUE: FID 有权限运行;FALSE: FID 无权限运行,即不应被执行 Type: boolean Variation: -- Direction: OUT |
| Possible Errors | E_OK: 操作成功 E_NOT_OK: 请求未被接受,即 FIM 初始化未完成 |
表 8.14:操作 GetFunctionPermission(满足:SRS_Fim_04700)
8.4.1.2 FiM_ControlFunctionAvailable
使用 SW-C 模板的概念,接口定义如下:
[SWS_Fim_00107] 服务接口 ControlFunctionAvailable
| Name | ControlFunctionAvailable |
|---|---|
| Comment | SW 组件可以使用此服务来设置功能的可用性。 |
| IsService | true |
| Variation | {ecuc(FiM/FiMGeneral/FiMAvailabilitySupport)} == True |
| Possible Errors | 0 E_OK 1 E_NOT_OK |
表 8.15:服务接口 ControlFunctionAvailable
操作
SetFunctionAvailable
| Comments | 设置功能的可用性。 |
|---|---|
| Variation | -- |
| Parameters |
Availability Comment: 所请求 FID 的权限:TRUE: 功能可用;FALSE: 功能不可用 Type: boolean Variation: -- Direction: IN |
| Possible Errors | E_OK: 操作成功 E_NOT_OK: 请求未被接受 |
表 8.16:操作 SetFunctionAvailable(满足:SRS_Fim_04723)
8.4.2 实现数据类型(Implementation Data Types)
8.4.2.1 FiM_FunctionIdType
[SWS_Fim_00027] FiM_FunctionIdType
| Name | FiM_FunctionIdType |
|---|---|
| Kind | Type |
| Derived from | Base Type: uint16 / uint8(平台相关) |
| Description | FunctionID 的类型 |
| Range | 0..255, 0..65535 功能的标识符 可配置,大小取决于系统复杂性。 注意:并非所有数字都有效。FIM 数据生成工具应仅分配有效值。 |
| Variation | -- |
| Available via | Rte_FiM_Type.h |
表 8.17:实现数据类型 FiM_FunctionIdType(满足:SRS_BSW_00304、SRS_BSW_00305、SRS_BSW_00377)
8.4.3 端口(Ports)
[SWS_Fim_00094] 端口 Func_{Name}
| Name | Func_{Name} |
|---|---|
| Kind | ProvidedPort |
| Interface | FunctionInhibition |
| Description | 客户端可以查询 FiM 以获取特定功能的执行权限。表示功能的 FID 不直接由客户端 SW-C 使用。而是使用"端口定义参数值"机制,每个 FID 映射到单独的端口,该端口负责通过 RTE 进行数据交换。 |
| Port Defined Argument Value(s) | Type: FiM_FunctionIdType Value: {ecuc(FiM/FiMConfigSet/FiMFID/FiMFunctionId.value)} |
| Variation | Name = {ecuc(FiM/FiMConfigSet/FiMFID.SHORT-NAME)} |
表 8.18:端口 Func_{Name}(满足:SRS_Fim_04700)
[SWS_Fim_00108] 端口 Control_{Name}
| Name | Control_{Name} |
|---|---|
| Kind | ProvidedPort |
| Interface | ControlFunctionAvailable |
| Description | 客户端可以设置特定功能的可用性。 |
| Port Defined Argument Value(s) | Type: FiM_FunctionIdType Value: {ecuc(FiM/FiMConfigSet/FiMFID/FiMFunctionId.value)} |
| Variation | ({ecuc(FiM/FiMGeneral/FiMAvailabilitySupport)} == True)Name = {ecuc(FiM/FiMConfigSet/FiMFID.SHORT-NAME)} |
表 8.19:端口 Control_{Name}(满足:SRS_Fim_04723)
8.4.4 内部行为(Internal Behavior)
FiM 服务的 InternalBehavior 仅由本地 RTE 看到。除了将功能标识符定义为端口定义参数外,InternalBehavior 必须指定操作调用的可运行实体:
Internal Behavior FiM {
// definition of associated operation-invoked RTE-events not shown
// (it is done in the same way as for any SWC type)
// section "runnable entities":
RunnableEntity GetFunctionPermission
symbol "FiMGetFunctionPermission"
canbeInvokedConcurrently = TRUE
}
9 序列图(Sequence diagrams)
9.1 FiM 初始化序列
[SWS_Fim_00102] Dem 和 Fim 的初始化应始终遵循以下顺序:
step 0) Dem_PreInit
step 1) 非易失性存储器数据必须可用
step 2) FiM_Init(设置内部变量);在 FiM_Init 之后,Fim 尚未准备好使用。
step 3) Dem_Init:执行内部 DEM 初始化,并使用 FiM_DemInit 最终初始化 FIM。
注释:从步骤 3 开始,Dem 和 Fim 最终初始化并准备好使用。
[SWS_Fim_00103] FiM_DemInit 应仅在系统启动后的首次 Dem_PreInit 期间使用。
[SWS_Fim_00104] 在 FIM 完整初始化(FiM_DemInit)之前不应使用 FiM_GetFunctionPermission。
图 9.1:FiM 初始化序列
9.2 FiM_DemTriggerOnMonitorStatus
下面的序列图说明了 Dem 如何通过调用 FiM_DemTriggerOnMonitorStatus 通知 FiM 某个监测状态的变化。此外,它还通过使用 FiM_GetFunctionPermission 请求权限状态来说明 FID 如何受到影响。
图 9.2:FiM_DemTriggerOnMonitorStatus
10 配置规范(Configuration specification)
本章定义了配置参数及其到容器的聚类。第 10.1 章描述了基础知识。它还指定了一个模板(表),您应将其用于参数规范。我们打算在规范中保留第 10.1 章以保证理解。第 10.2 章指定了模块 FiM 的结构(容器)和参数。第 10.3 章指定了模块 FiM 的已发布信息。
10.1 如何阅读本章(How to read this chapter)
详情请参阅 SWS_BSWGeneral [1] 中的第 10.1 章"配置规范介绍"。
10.2 容器与配置参数(Containers and configuration parameters)
以下章节总结了所有配置参数。参数的详细含义在第 7 章和第 7.3 章中描述。
[SWS_Fim_00062] 支持多配置集的容器
| 满足 | SRS_BSW_00404、SRS_BSW_00405 |
|---|
10.2.1 FiM
| Module SWS Item | ECUC_FiM_00612 |
|---|---|
| Module Name | FiM |
| Module Description | FiM(功能抑制管理器)模块的配置。 |
| Post-Build Variant Support | true |
| Supported Config Variants | VARIANT-POST-BUILD, VARIANT-PRE-COMPILE |
| Container Name | Multiplicity | Scope / Dependency |
|---|---|---|
| FiMConfigSet | 1 | 此容器包含 FiM 模块的配置参数和子容器,支持多个配置集。 |
| FiMGeneral | 1 |
10.2.2 FiMGeneral
SWS Item: [ECUC_FiM_00040] · Container Name: FiMGeneral
配置参数:
| Name | ECUC ID | 说明 |
|---|---|---|
FiMAvailabilitySupport | [ECUC_FiM_00610] | 此配置参数指定 Fim 是否应支持设置功能可用性的服务。true: 支持服务;false: 不支持服务。Pre-compile time, scope: local, Default: false. |
FiMDevErrorDetect | [ECUC_FiM_00087] | 启用或关闭开发错误检测和通知。true: 启用;false: 禁用。Pre-compile time, scope: local, Default: false. |
FiMEventUpdateTriggeredByDem | [ECUC_FiM_00086] | 此配置参数指定 FIM 获取 EventId 状态的方式。TRUE: DEM 通知 FIM 监测状态变化;FALSE: FIM 周期性或按需从 DEM 模块轮询监测状态。Pre-compile time, scope: local, Default: false. |
FiMMainFunctionPeriod | [ECUC_FiM_00611] | 允许配置周期循环任务的时间。注意:此配置值应等于 RTE 模块的 BSW 调度器配置中的值。AUTOSAR 配置标准是使用 SI 单位,因此此参数定义为以秒为单位的浮点值。Pre-compile time, scope: local, Range: ]0..INF[ |
FiMMaxEventsPerFidInhibitionConfiguration | [ECUC_FiM_00608] | 此配置参数指定一个 FiMInhibitionConfiguration 中抑制事件的最大数量。仅适用于 post build 配置版本,可用于分配存储和执行配置的最大内存大小。Pre-compile time, scope: local, Range: 1..65535. |
FiMMaxFiMInhibitionConfigurations | [ECUC_FiM_00606] | 此配置参数指定 FiMInhibitionConfiguration 的最大数量。仅适用于 post build 配置版本,可用于分配存储和执行配置的最大内存大小。Pre-compile time, scope: local, Range: 1..65535. |
FiMMaxInputEventsPerSummaryEvents | [ECUC_FiM_00609] | 此配置参数指定每个汇总事件的输入事件的最大数量。仅适用于 post build 配置版本,可用于分配存储和执行配置的最大内存大小。Pre-compile time, scope: local, Range: 1..65535. |
FiMMaxSumEventsPerFidInhibitionConfiguration | [ECUC_FiM_00607] | 此配置参数指定一个 FiMInhibitionConfiguration 中抑制汇总事件的最大数量。仅适用于 post build 配置版本,可用于分配存储和执行配置的最大内存大小。Pre-compile time, scope: local, Range: 1..65535. |
FiMMaxSummaryEvents | [ECUC_FiM_00091] | 此配置参数指定可配置的最大汇总事件数。Pre-compile time, scope: local, Range: 0..65535. |
FiMVersionInfoApi | [ECUC_FiM_00094] | 此配置参数用于打开或关闭获取版本信息的 API。Pre-compile time, scope: local, Default: false. |
图 10.3:FiMGeneral 配置概述
10.2.3 FiMConfigSet
SWS Item: [ECUC_FiM_00601] · Container Name: FiMConfigSet
此容器包含 FiM 模块的配置参数和子容器,支持多个配置集。
| Container Name | Multiplicity | Scope / Dependency |
|---|---|---|
| FiMFID | 1..* | 此容器包括所有 FID 的符号名称。 |
| FiMInhibitionConfiguration | 1..* | 此容器包括关于事件和 FID 之间关系的所有配置参数。 |
| FiMSummaryEvent | 0..* | 汇总 EventId 定义记录由一个汇总事件 ID 和特定的 Dem 事件组成。 |
10.2.4 FiMFID
SWS Item: [ECUC_FiM_00039] · Container Name: FiMFID
此容器包括所有 FID 的符号名称。
配置参数:FiMFunctionId [ECUC_FiM_00085] - FID 的唯一标识符,类型:EcucIntegerParamDef,范围 0..65535。
10.2.5 FiMInhibitionConfiguration
SWS Item: [ECUC_FiM_00038] · Container Name: FiMInhibitionConfiguration
此容器包括关于事件和 FID 之间关系的所有配置参数。
配置参数:
| Name | ECUC ID | 说明 |
|---|---|---|
FiMInhInhibitionMask | [ECUC_FiM_00096] | 此配置参数用于指定事件 - FID 关系的抑制掩码。EcucEnumerationParamDef。可选值:
|
FiMInhComponentRef | [ECUC_FiM_00605] | 对功能权限所需的 DemComponent 的引用。Reference to DemComponent, Multiplicity: 0..* |
FiMInhEventRef | [ECUC_FiM_00100] | 选择单个 DEM 事件。Symbolic name reference to DemEventParameter, Multiplicity: 0..* |
FiMInhFunctionIdRef | [ECUC_FiM_00095] | Reference to FiMFID, Multiplicity: 1 |
FiMInhSumRef | [ECUC_FiM_00102] | 选择汇总事件。Reference to FiMSummaryEvent, Multiplicity: 0..* |
10.2.6 FiMSummaryEvent
SWS Item: [ECUC_FiM_00603] · Container Name: FiMSummaryEvent
汇总 EventId 定义记录由一个汇总事件 ID 和特定的 Dem 事件组成。该记录意味着在汇总事件(上述定义)情况下应禁用的特定 FID,将在任何特定事件下被禁用。可能的解决方案是将事件作为汇总事件分配以及特定事件列表。在配置过程中,汇总事件替代引用的单一事件。但是,未说明此需求如何解决——是通过配置过程还是通过 FiM 内的实现。FiM 配置工具也可以为汇总事件构建合适的数据结构并在 FiM 实现中处理。
配置参数:FiMInputEventRef [ECUC_FiM_00604] - 组合到此汇总事件的 DemEventParameters 的引用。Symbolic name reference to DemEventParameter, Multiplicity: 1..*
10.3 Published Information
详情请参阅 SWS_BSWGeneral [1] 中的第 10.3 章"已发布信息"。
A 不适用的需求(Not applicable requirements)
[SWS_Fim_00999] 这些需求不适用于本规范。
(满足:SRS_BSW_00301、SRS_BSW_00302、SRS_BSW_00306、SRS_BSW_00307、SRS_BSW_00308、SRS_BSW_00309、SRS_BSW_00314、SRS_BSW_00323、SRS_BSW_00325、SRS_BSW_00328、SRS_BSW_00330、SRS_BSW_00333、SRS_BSW_00334、SRS_BSW_00336、SRS_BSW_00342、SRS_BSW_00343、SRS_BSW_00347、SRS_BSW_00353、SRS_BSW_00357、SRS_BSW_00359、SRS_BSW_00360、SRS_BSW_00361、SRS_BSW_00375、SRS_BSW_00378、SRS_BSW_00386、SRS_BSW_00409、SRS_BSW_00417、SRS_BSW_00422、SRS_BSW_00423、SRS_BSW_00424、SRS_BSW_00425、SRS_BSW_00426、SRS_BSW_00427、SRS_BSW_00428、SRS_BSW_00429、SRS_BSW_00432、SRS_BSW_00433、SRS_Fim_04721)