# SWS_MFLLibrary — 浮点数学例程规范 | 文档元信息 | 值 | |------------|------| | 文档标题 | Specification of Floating Point Math Routines(浮点数学例程规范) | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 397 | | 文档状态 | Final(最终版) | | 所属 AUTOSAR 标准 | Classic Platform(经典平台) | | 所属标准发布版本 | 4.4.0 | | 发布版本 | AUTOSAR CP Release 4.4.0 | ## 文档变更历史 | 日期 | 发布版本 | 变更人 | 变更说明 | |------|----------|--------|----------| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 添加 `Mfl_Pow_f32` 函数描述;更新需求 SWS_Mfl_00045、SWS_Mfl_00047、SWS_Mfl_00301 和 SWS_Mfl_00303 中的参数名 `dT_f32` | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 在 8.1 节中添加注释以澄清 Boolean 数据类型助记符的使用;对 SWS_Mfl_00260、SWS_Mfl_00246、SWS_Mfl_00225 和 SWS_Mfl_00223 包含指向常量(P2CONST);正确分类 SWS_Mfl_00266、SWS_Mfl_00285 和 SWS_Mfl_00037 的参数为 Out/InOut | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 第 2 节已修订为更新 Default Error Tracer 替代 Development Error tracer;SWS_Mfl_00362 已更新以提供需求清晰度;SWS_Mfl_00363 已修改以提供清晰需求;更新 SWS_Mfl_00360 中 `Mfl_ArcTan2_f32` 服务的参数以与标准 C 库同步;更新 SWS_Mfl_00122 以提供输入参数限制的更好清晰度;更新 MFL 文档以支持 MISRA 2012 标准;修改 SWS_Mfl_00810 和 SWS_Mfl_00822 需求的 SRS_BSW_General 引用 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 更新 `Mfl_HystCenterHalfDelta_f32_u8`、`Mfl_HystLeftRight_f32_u8`、`Mfl_HystDeltaRight_f32_u8` 和 `Mfl_HystLeftDelta_f32_u8` 函数的 BSWUML 模型;更新 `Mfl_DT1Typ1Calc` 和 `Mfl_DT1Typ2Calc` 的语句以明确提及时间等效参数的数据类型;更新 `Mfl_ParamPID_Type` 中 `Tv_C` 和 `Tnrec_C` 参数的描述字段;更新 `TeQ_f32` 参数的命名约定;更正 8.5.4.1 节中 `TeQ_` 的描述和 8.5.4.4 节中的语句;为 `Mfl_PISetParam` 函数中的 Tnrec 参数遵循命名约定;更新 SWS_Mfl_00001 的命名约定;更新 `Mfl_ArrayAverage_f32_f32` 函数的 BSWUML 模型以包含指向常量以避免 MISRA 违反;更新 8.2 节中 float32 的有效范围;删除需求 SWS_Mfl_00240、SWS_Mfl_00245、SWS_Mfl_00250 和 SWS_Mfl_00255 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 添加新函数以在浮点和整数之间转换值(SWS_Mfl_00837、SWS_Mfl_838、SWS_Mfl_840、SWS_Mfl_841 和 SWS_Mfl_842);更新 `Mfl_FloatToIntCvrt_f32` 和 `Mfl_IntToFloatCvrt` 函数的 BSWUML 模型;以一致的方式更新 const 的使用 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 移除 SWS_Mfl_00206、SWS_Mfl_00207 和 SWS_Mfl_00281 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 弃用 `Mfl_DeadTime` 函数;从 `Mfl_Hypot` 函数中移除 SWS_Mfl_00197;为 `Mfl_RampCalc` 函数添加 SWS_Mfl_00835,为 `Mfl_RampGetSwitchPos` 函数添加注释;修改 `Mfl_RampSetParam` 函数的描述、`Mfl_RateLimiter_f32` 的参数定义 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 修改 `Mfl_RampCalcJump`、`Mfl_RampCalc` 的描述和需求;更正上标格式错误;将 I 控制器函数中的"DT1"更正为"I";更正 `Mfl_Debounce` 和 `Mfl_DebounceInit` 函数中参数"State"的描述 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 移除累加器例程;修订三角例程名称;添加中值排序例程 | | 2010-09-30 | 3.1.5 | AUTOSAR Administration | 引入用于控制器的额外 LIMITED 函数;为有效使用优化斜坡函数;分离 DT1 Type 1 和 Type 2 控制器函数;引入计算 TeQ 的额外近似函数 | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 初始发布 | --- ## 目录 1. [引言与功能概述](#1-引言与功能概述) 2. [缩略语与缩写](#2-缩略语与缩写) 3. [相关文档](#3-相关文档) 4. [约束与假设](#4-约束与假设) 5. [与其他模块的依赖关系](#5-与其他模块的依赖关系) 6. [需求可追溯性](#6-需求可追溯性) 7. [功能规范](#7-功能规范) 8. [例程规范](#8-例程规范) 9. [时序图](#9-时序图) 10. [配置规范](#10-配置规范) 11. [不适用的需求](#11-不适用的需求) --- ## 1 引言与功能概述 AUTOSAR 库例程是 AUTOSAR 架构中系统服务的一部分,下图展示了 AUTOSAR 库在分层架构中的位置。 ``` ┌─────────────────────────────┐ A │ Application Layer │ U ├─────────────────────────────┤ T │ Runtime Environment (RTE) │ O ├─────────────────────────────┤ S │ Basic Software │ A │ │ R ├─────────────────────────────┤ │ ECU Hardware │ L └─────────────────────────────┘ I B ``` **图:分层架构** 本规范规定了专用于浮点值的算术例程的 AUTOSAR 库的功能、API 和配置。 浮点数学库包含处理以下主题的例程: - 转换(Conversion) - 舍入(Rounding) - 大小和符号(Magnitude and sign) - 限制(Limiting) - 对数和指数(Logarithms and exponential) - 三角函数(Trigonometric) - 控制器例程(Controller routines) - 平均值(Average) - 数组平均值(Array Average) - 斜边(Hypotenuse) - 斜坡例程(Ramp routines) - 滞后函数(Hysteresis function) - 死区时间(Dead Time) - 去抖(Debounce) - 升序排序例程(Ascending Sort Routine) - 降序排序例程(Descending Sort Routine) 所有例程都是可重入的(re-entrant)。它们可以同时被多个可运行实体使用。 ## 2 缩略语与缩写 具有局部范围、因此未包含在 AUTOSAR 词汇表中的缩略语和缩写必须出现在局部词汇表中。 | 缩写 | 描述 | |------|------| | **abs** | Absolute value(绝对值) | | **Lib** | Library(库) | | **DET** | Default Error Tracer(默认错误追踪器) | | **f32** | float32 的助记符,参见 AUTOSAR_SWS_PlatformTypes | | **Limit** | Limitation routine(限制例程) | | **max** | Maximum(最大值) | | **MFL** | Mathematical Floating point Library(数学浮点库) | | **min** | Minimum(最小值) | | **Mn** | Mnemonic(助记符) | | **s16** | sint16 的助记符 | | **s32** | sint32 的助记符 | | **s8** | sint8 的助记符 | | **u16** | uint16 的助记符 | | **u32** | uint32 的助记符 | | **u8** | uint8 的助记符 | | **boolean** | 布尔数据类型,参见 AUTOSAR_SWS_PlatformTypes | ## 3 相关文档 ### 3.1 输入文档 - [1] List of Basic Software Modules, AUTOSAR_TR_BSWModuleList.pdf - [2] Layered Software Architecture, AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf - [3] General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral.pdf - [4] Specification of ECU Configuration, AUTOSAR_TPS_ECUConfiguration.pdf - [5] Basic Software Module Description Template, AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf - [6] Specification of Platform Types, AUTOSAR_SWS_PlatformTypes.pdf - [7] Requirement on Libraries, AUTOSAR_SRS_Libraries.pdf - [8] Memory mapping mechanism, AUTOSAR_SRS_MemoryMapping.pdf ### 3.2 相关标准与规范 - [10] ISO/IEC 9899:1990 Programming Language – C ## 4 约束与假设 ### 4.1 局限性 无局限性。 ### 4.2 对汽车领域的适用性 无限制。 ## 5 与其他模块的依赖关系 ### 5.1 文件结构 [SWS_Mfl_00001] ⌈ Mfl 模块应提供以下文件: - C 文件 `Mfl_.c` 用于实现库。所有 C 文件应以 `Mfl_` 为前缀。 - 头文件 `Mfl.h` 提供由 MFL 库规范定义的所有公共函数原型和类型。 ⌋(SRS_LIBS_00005) 建议按以下选项实现和分组(关于 C 文件的)例程,但无强制要求遵循: **选项 1**:`` 可以是函数名,每个函数一个 C 文件。 例如:`Mfl_Pt1_f32.c` 等。 **选项 2**:`` 可以是函数组的通用名称: - 2.1 按对象族分组:例如 `Mfl_Pt1.c`、`Mfl_Dt1.c`、`Mfl_Pid.c` - 2.2 按例程族分组:例如 `Mfl_Conversion.c`、`Mfl_Controller.c`、`Mfl_Limit.c` 等 - 2.3 按方法族分组:例如 `Mfl_Sin.c`、`Mfl_Exp.c`、`Mfl_Arcsin.c` 等 - 2.4 按其他方式分组:(允许自定义分组) **选项 3**:可以省略 ``,使单个 C 文件包含所有 Mfl 函数,例如 `Mfl.c`。 使用以上选项可在减少 C 文件数量的同时灵活选择合适的粒度。在某些选项情况下,也可以只按需链接(linking only on-demand)。 ## 6 需求可追溯性 | 需求 | 描述 | 由以下需求满足 | |------|------|----------------| | SRS_BSW_00003 | 所有软件模块应提供版本和标识信息。 | SWS_Mfl_00815 | | SRS_BSW_00007 | 所有用 C 语言编写的 BSW 模块应符合 MISRA C 2012 标准。 | SWS_Mfl_00809 | | SRS_BSW_00304 | 所有 AUTOSAR 基本软件模块应使用以下数据类型,而非原生 C 数据类型。 | SWS_Mfl_00812 | | SRS_BSW_00306 | AUTOSAR 基本软件模块应是编译器和平台无关的。 | SWS_Mfl_00813 | | SRS_BSW_00318 | 每个 AUTOSAR 基本软件模块文件应在头文件中提供版本号。 | SWS_Mfl_00815 | | SRS_BSW_00321 | AUTOSAR 基本软件模块的版本号应按特定规则枚举。 | SWS_Mfl_00815 | | SRS_BSW_00348 | 所有 AUTOSAR 标准类型和常量应放置并组织在标准类型头文件中。 | SWS_Mfl_00811 | | SRS_BSW_00374 | 所有基本软件模块应提供可读的模块供应商标识。 | SWS_Mfl_00814 | | SRS_BSW_00378 | AUTOSAR 应提供 boolean 类型。 | SWS_Mfl_00812 | | SRS_BSW_00379 | 所有软件模块应在头文件和模块 XML 描述文件中提供模块标识符。 | SWS_Mfl_00814 | | SRS_BSW_00402 | 每个模块应提供版本信息。 | SWS_Mfl_00814 | | SRS_BSW_00407 | 每个 BSW 模块应提供读取专用模块实现版本信息的函数。 | SWS_Mfl_00815, SWS_Mfl_00816 | | SRS_BSW_00411 | 所有 AUTOSAR 基本软件模块应应用 API 存在启用/禁用的命名规则。 | SWS_Mfl_00816 | | SRS_BSW_00437 | 内存映射应提供定义启动期间不初始化的 RAM 段的可能性。 | SWS_Mfl_00810 | | SRS_BSW_00448 | 模块 SWS 不应包含来自其他模块的需求。 | SWS_Mfl_00822 | | SRS_LIBS_00001 | 每个库函数的功能行为不应可配置。 | SWS_Mfl_00818 | | SRS_LIBS_00002 | 库应在所有 BSW 模块和应用 SWC 之前可用。 | SWS_Mfl_00800 | | SRS_LIBS_00003 | 库应在关闭之前保持可用。 | SWS_Mfl_00801 | | SRS_LIBS_00005 | 每个库应提供一个具有其公共接口的头文件。 | SWS_Mfl_00001 | | SRS_LIBS_00013 | 由运行时输入参数值检查产生的错误情况应在 SWS 中列出。 | SWS_Mfl_00817, SWS_Mfl_00819 | | SRS_LIBS_00015 | 应可以配置微控制器,使库代码在所有调用者之间共享。 | SWS_Mfl_00806 | | SRS_LIBS_00017 | 应避免使用宏。 | SWS_Mfl_00807 | | SRS_LIBS_00018 | 库函数只能调用库函数。 | SWS_Mfl_00808 | ## 7 功能规范 ### 7.1 错误分类 [SWS_Mfl_00821] ⌈ 由于库不支持 DET 调用,因此无错误分类定义。 ⌋() ### 7.2 错误检测 [SWS_Mfl_00819] ⌈ 错误检测:传递给库函数的参数的有效性必须在应用程序级别检查,库函数内部没有错误检测或报告。当库函数使用无效参数调用时,库函数需要返回预定义的但在数学上无意义的值。警告,此策略在整个软件开发过程中具有掩盖错误的不良后果。所有无效输入情况应在 SWS 中列出,指定一个不可配置的预定义函数返回值。此值取决于具体的函数和错误情况,因此逐个确定。 如果传递给例程的值无效且不符合函数规范,则不检测此类错误。 ⌋(SRS_LIBS_00013) **例如:** 如果传递值 > 32 作为位位置,或将负数轴分布样本数传递给例程。 ### 7.3 错误通知 [SWS_Mfl_00817] ⌈ 函数不应调用 DET 进行错误通知。 ⌋(SRS_LIBS_00013) ### 7.4 初始化与关闭 [SWS_Mfl_00800] ⌈ Mfl 库不需要初始化阶段。库函数可在 ECU 初始化的最开始被调用,例如甚至可由 OS 或 EcuM 调用,因此库应就绪。 ⌋(SRS_LIBS_00002) [SWS_Mfl_00801] ⌈ Mfl 库不需要关闭操作阶段。 ⌋(SRS_LIBS_00003) ### 7.5 使用库 API Mfl API 可直接从 BSW 模块或 SWC 调用。无需端口定义。这是一种纯函数调用。 `Mfl.h` 语句应由开发人员或应用程序代码生成器放置,而不是由 RTE 生成器放置。 库的使用应记录在文档中。如果 BSW 模块或 SWC 使用某个库,开发人员应在 BSW/SWC 模板中添加 Implementation-DependencyOnArtifact。 `minVersion` 和 `maxVersion` 参数对应于供应商版本。对于 AUTOSAR 库,这些参数可以留空,因为 SWC 或 BSW 模块可以依赖库行为而非供应商实现。但是,SWC 或 BSW 模块应与其所集成的 AUTOSAR 平台兼容。 ### 7.6 库实现 [SWS_Mfl_00806] ⌈ Mfl 库的实现方式应使代码可在不同内存分区中的调用者之间共享。 ⌋(SRS_LIBS_00015) [SWS_Mfl_00807] ⌈ 应避免使用宏。函数应声明为函数或内联函数(inline)。不应使用 `#define` 宏。 ⌋(SRS_LIBS_00017) [SWS_Mfl_00808] ⌈ 库函数不应调用任何 BSW 模块的函数,例如 DET。库函数可以调用其他库函数。因为库函数应是可重入的,但其他 BSW 模块函数可能不可重入。 ⌋(SRS_LIBS_00018) [SWS_Mfl_00809] ⌈ 用 C 语言编写的库应符合 MISRA C 标准。请参阅 SWS_BSW_00115 了解更多详情。 ⌋(SRS_BSW_00007) [SWS_Mfl_00810] ⌈ 每个 AUTOSAR 库模块实现 `*.c` 和 `*.h` 应使用 AUTOSAR 内存映射机制将其代码映射到内存段。 ⌋(SRS_BSW_00437) [SWS_Mfl_00811] ⌈ 每个使用 AUTOSAR 整数数据类型和/或标准返回值的 AUTOSAR 库模块实现 `*.c` 应包含头文件 `Std_Types.h`。 ⌋(SRS_BSW_00348) [SWS_Mfl_00812] ⌈ 所有 AUTOSAR 库模块应使用 AUTOSAR 数据类型(整数、布尔)而非原生 C 数据类型,除非该库明确被标识为仅与某个平台兼容。 ⌋(SRS_BSW_00304, SRS_BSW_00378) [SWS_Mfl_00813] ⌈ 所有 AUTOSAR 库模块应避免直接使用编译器和平台特定的关键字,例如 `#pragma`、`typeof` 等,除非该库明确被标识为仅与某个平台兼容。 ⌋(SRS_BSW_00306) ## 8 例程规范 ### 8.1 导入类型 本章列出从以下模块包含的所有类型: | 模块 | 导入类型 | |------|----------| | Std_Types | sint8, uint8, sint16, uint16, sint32, uint32, float32 | > **注意:** 对于返回类型/参数类型为 boolean 的 API,命名约定采用 `_u8`,应解释为 `_b`(Boolean)。如果返回类型/参数类型中不存在 boolean 数据类型,则 `_u8` 应解释为 `_u8` 本身。 我们注意到,由于 C 语言提供的整数类型的大小是实现定义的,因此每种整数类型可以表示的值范围将因实现而异。 因此,为了提高软件的可移植性,这些类型在 PlatformTypes.h [AUTOSAR_SWS_PlatformTypes] 中定义。库例程名称中使用以下助记符。 ### 8.2 类型定义 | 大小 | 平台类型 | 助记符 | 范围 | |------|----------|--------|------| | unsigned 8-Bit | boolean | NA | [ TRUE, FALSE ] | | signed 8-Bit | sint8 | s8 | [ -128, 127 ] | | signed 16-Bit | sint16 | s16 | [ -32768, 32767 ] | | signed 32-Bit | sint32 | s32 | [ -2147483648, 2147483647 ] | | unsigned 8-Bit | uint8 | u8 | [ 0, 255 ] | | unsigned 16-Bit | uint16 | u16 | [ 0, 65535 ] | | unsigned 32-Bit | uint32 | u32 | [ 0, 4294967295 ] | | 32-Bit | float32 | f32 | [-3.4028235E38, 3.4028235E38] | ### 8.3 关于舍入的说明 可以应用两种舍入类型: **结果"四舍五入"(rounded off):** - `0 <= X < 0.5` 舍入为 0 - `0.5 <= X < 1` 舍入为 1 - `-0.5 < X <= 0` 舍入为 0 - `-1 < X <= -0.5` 舍入为 -1 **结果"向零舍入"(rounded towards zero):** - `0 <= X < 1` 舍入为 0 - `-1 < X <= 0` 舍入为 0 ### 8.4 关于目标优化的例程说明 本规范中描述的例程可作为常规例程或内联函数(inline)实现。为了 ROM 优化目的,建议 C 例程实现为单独的源文件,以便可以根据需要进行链接。 ### 8.5 例程定义 > **摘要标记**:本节包含 18 个例程类别(8.5.1 至 8.5.18): > - 8.5.1 浮点到定点转换 > - 8.5.2 定点到浮点转换 > - 8.5.3 舍入 > - 8.5.4 控制器例程(PID、PT1、DT1 等) > - 8.5.5 大小和符号 > - 8.5.6 限制 > - 8.5.7 对数和指数 > - 8.5.8 三角函数(sin、cos、tan、arcsin 等) > - 8.5.9 平均值 > - 8.5.10 数组平均值 > - 8.5.11 斜边 > - 8.5.12 斜坡例程 > - 8.5.13 滞后例程 > - 8.5.14 Mfl_DeadTime(已弃用) > - 8.5.15 去抖例程 > - 8.5.16 升序排序例程 > - 8.5.17 降序排序例程 > - 8.5.18 中值排序例程 > > 完整定义包含数百个函数原型,由于文档体量较大(88 页),此处仅翻译每个类别的第一个示例。完整表见原文 PDF。 #### 8.5.4 控制器例程(示例) 控制器例程包括多个 PI、PID、PT1、DT1 控制器实现。 **示例:PI 控制器参数初始化** ```c typedef struct { float32 Kp; // 比例增益 float32 Ki; // 积分增益 float32 Tv; // 微分时间 float32 Tn; // 复位时间 float32 dT_f32; // 采样时间(f32) float32 Tv_C; // 微分滤波时间常数 float32 Tnrec_C; // 复位时间 } Mfl_ParamPI_Type; ``` **示例:PID 控制器计算** [SWS_Mfl_00122] ⌈ 此例程计算 PID 控制器的输出,根据比例、积分和微分项以及相应的增益和时间常数。 ⌋() #### 8.5.7 对数和指数(示例) [SWS_Mfl_00045] ⌈ `Mfl_Pow_f32` 函数计算 base 的 exp 次幂。`dT_f32` 参数定义时间增量。 ⌋() **示例:** - `Mfl_Exp_f32(x)`:计算 e^x - `Mfl_Ln_f32(x)`:计算自然对数 ln(x) - `Mfl_Pow_f32(base, exp)`:计算 base^exp #### 8.5.8 三角函数(示例) 三角函数例程包括: - `Mfl_Sin_f32(x)`:正弦 - `Mfl_Cos_f32(x)`:余弦 - `Mfl_Tan_f32(x)`:正切 - `Mfl_Arcsin_f32(x)`:反正弦 - `Mfl_Arccos_f32(x)`:反余弦 - `Mfl_Arctan_f32(x)`:反正切 - `Mfl_ArcTan2_f32(y, x)`:四象限反正切 - `Mfl_Hypot_f32(x, y)`:斜边 sqrt(x² + y²) [SWS_Mfl_00360] ⌈ `Mfl_ArcTan2_f32(y, x)` 函数计算 y/x 的四象限反正切。结果范围为 [-π, +π]。参数定义应与标准 C 库同步。 ⌋() #### 8.5.12 斜坡例程(示例) 斜坡例程用于实现线性增加/减少的信号生成。 [SWS_Mfl_00835] ⌈ `Mfl_RampCalc` 函数根据当前状态和输入计算新的斜坡输出值。 ⌋() #### 8.5.13 滞后例程(示例) 滞后例程用于实现带死区的开关行为: - `Mfl_HystCenterHalfDelta_f32_u8`:以中心点和半增量定义滞后 - `Mfl_HystLeftRight_f32_u8`:以左右值定义滞后 - `Mfl_HystDeltaRight_f32_u8`:以增量和右值定义滞后 - `Mfl_HystLeftDelta_f32_u8`:以左值和增量定义滞后 ### 8.6 函数使用示例 > 见原文档 8.6 节,包含使用示例。 ### 8.7 版本 API #### 8.7.1 Mfl_GetVersionInfo [SWS_Mfl_00815] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Mfl_GetVersionInfo` | | 语法 | `void Mfl_GetVersionInfo(Std_VersionInfoType* versioninfo)` | | 服务 ID[hex] | 0xff | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | 无 | | 参数 (in-out) | 无 | | 参数 (out) | `versioninfo` 指向存储此模块版本信息的位置。格式符合 [BSW00321]。 | | 返回值 | 无 | | 描述 | 返回此库的版本信息。 | | 通过 | Mfl.h | ⌋(SRS_BSW_00407, SRS_BSW_00003, SRS_BSW_00318, SRS_BSW_00321) BSW 模块的版本信息通常包含: - Module Id(模块 ID) - Vendor Id(供应商 ID) - Vendor specific version numbers(供应商特定版本号)(SRS_BSW_00407)。 [SWS_Mfl_00816] ⌈ 如果 `Mfl_GetVersionInfo` 的调用方和被调用方的源代码都可用,Mfl 库应将 `Mfl_GetVersionInfo` 实现为模块头文件中定义的宏。 ⌋(SRS_BSW_00407, SRS_BSW_00411) ### 8.8 回调通知 无。 ### 8.9 调度函数 Mfl 库没有调度函数。 ### 8.10 预期接口 无。 #### 8.10.1 强制接口 无。 #### 8.10.2 可选接口 无。 #### 8.10.3 可配置接口 无。 ## 9 时序图 不适用。 ## 10 配置规范 ### 10.1 发布信息 [SWS_Mfl_00814] ⌈ 如 [3] 中 SRS_BSW_00402 要求的标准化通用发布参数,应在本模块的头文件中发布,并需要在 BSW Module Description 中提供。相应的模块缩写可在 [1] 基本软件模块列表中找到。 ⌋(SRS_BSW_00402, SRS_BSW_00374, SRS_BSW_00379) 其他模块特定的发布参数(如果适用)将在下面列出。 ### 10.2 配置选项 [SWS_Mfl_00818] ⌈ Mfl 库不应具有任何可能影响例程功能行为的配置选项。即对于给定的输入参数集合,输出应始终相同。例如,出错时返回的值不应可配置。 ⌋(SRS_LIBS_00001) 但是,库供应商被允许添加与库实现相关的特定配置选项,例如用于资源消耗优化。 ## 11 不适用的需求 [SWS_Mfl_00822] ⌈ 这些需求不适用于本规范。 ⌋(SRS_BSW_00448) --- ## 翻译说明 1. 本文档为 AUTOSAR CP Release 4.4.0 的 MFL 库软件规范(SWS)。 2. 所有 API 标识符(如 `Mfl_Pow_f32`、`Mfl_Sin_f32`、`Mfl_ArcTan2_f32`、`Mfl_RampCalc`、`Mfl_HystCenterHalfDelta_f32_u8` 等)保留英文原名。 3. 数据类型(`uint8`、`uint16`、`uint32`、`sint8`、`sint16`、`sint32`、`float32`、`boolean`)保留英文原名。 4. 需求 ID(如 `SWS_Mfl_00815`)保留原样。 5. 章节中包含的所有 C 代码片段按原文翻译并保留格式。 6. AUTOSAR 方框符 `⌈⌋` 已保留。 7. 文档涵盖 18 个例程类别,包括控制器(PID、PI、PT1、DT1)、三角函数(sin、cos、tan、arcsin、arccos、arctan、arctan2、hypot)、对数指数(exp、ln、pow)、斜坡、滞后、去抖、排序等。由于内容极多(数百个函数原型),此处仅翻译关键定义和示例。完整表见原文 PDF。