Files
autosar_standard_spec_v4.4/Libraries/AUTOSAR_SWS_EFXLibrary.md
T

26 KiB
Raw Blame History

SWS_EFXLibrary — 扩展定点例程规范

文档元信息
文档标题 Specification of Extended Fixed Point Routines(扩展定点例程规范)
文档所有者 AUTOSAR
文档责任方 AUTOSAR
文档标识号 400
文档状态 Final(最终版)
所属 AUTOSAR 标准 Classic Platform(经典平台)
所属标准发布版本 4.4.0
发布版本 AUTOSAR CP Release 4.4.0

文档变更历史

日期 发布版本 变更人 变更说明
2018-10-31 4.4.0 AUTOSAR Release Management 更新需求 SWS_EFX_00220、SWS_EFX_00223、SWS_EFX_00226、SWS_EFX_00229、SWS_EFX_00232、SWS_EFX_00235、SWS_EFX_00240、SWS_EFX_00243、SWS_EFX_00246、SWS_EFX_00250、SWS_EFX_00253、SWS_EFX_00256 的范围和分辨率
2017-12-08 4.3.1 AUTOSAR Release Management 在 8.1 节中添加注释以澄清 Boolean 数据类型助记符的使用;更新 SWS_Efx_00355 中 Boolean 的数据类型;对 SWS_Efx_00355、SWS_Efx_00309、SWS_Efx_00307 和 SWS_Efx_00193 包含指向常量(P2CONST);正确分类 SWS_Efx_00376 的参数为 InOut
2016-11-30 4.3.0 AUTOSAR Release Management 更新 SWS_Efx_00810 和 SWS_Efx_00822 需求的 SRS_BSW_General 引用;更新 EFX 文档以支持 MISRA 2012 标准;更新 SWS_Efx_00275 和 SWS_Efx_00276 以提供参数分辨率的更多清晰度;更新 SWS_Efx_00278 和 SWS_Efx_00279 以提供舍入和 Param_cpcst->SlopeXXX_u32 * dT_s32 最小值的更多清晰度;更新控制器例程结构定义的 8.5.3.1 节;更新 SWS_Efx_00240、SWS_Efx_00243、SWS_Efx_00246、SWS_Efx_00250、SWS_Efx_00253 和 SWS_Efx_00256 以更正函数名的大小写敏感性;第 2 节已修订为更新 Default Error Tracer;从 BSW UML 模型中移除过时的 Efx_ISetParam;移除 SWS_Efx_00520 和 SWS_Efx_00525 的重复跟踪环境;移除标记为已弃用的需求
2015-07-31 4.2.2 AUTOSAR Release Management 根据约定更新 SWS_Efx_00033 的需求 ID;根据标准约定更新 SWS_Efx_00436 (UML) 的 OutTypeMn;更新 5.1 文件结构下 SWS_Efx_00001 的命名约定;更正 SWS_Efx_00365 的输入参数数据类型
2014-10-31 4.2.1 AUTOSAR Release Management 为 SWS_Efx_00412 (0xE2 - 0xE9) 添加新变体;为 SWS_Efx_00053、SWS_Efx_00072 和 8.5.3.1 节添加注释;为澄清斜边函数公式添加声明;为澄清 SWS_Efx_00451 中提到的公式添加声明;以一致的方式更新 EFX 文档中 const 的使用;更正 8.5.3.1 节中 TeQ_ 的公式;更新 SWS_Efx_00071、SWS_Efx_00091、SWS_Efx_00502、SWS_Efx_00151 和 SWS_Efx_00156 的舍入
2014-03-31 4.1.3 AUTOSAR Release Management 修改 HpFilter、Average、Array_Average 和 MovingAverage 函数的舍入机制;在 SWS_Efx_00307 下方为 Efx_RampGetSwitchPos 函数添加注释
2013-10-31 4.1.2 AUTOSAR Release Management 弃用 Efx_DeadTime 函数;移除 Efx_SlewRate、Efx_RampCalc 和 Efx_RampCalcJump 函数的需求;为 Efx_RampCalc 函数添加 SWS_Efx_00837;修改 Efx_RampCalc 和 Efx_RampSetParam 的描述;为 Efx_SlewRate、Efx_Div 和 Efx_MovingAverage 函数的变体语法;为 Efx_Arcsin 和 Efx_Arccos 函数的输入参数分辨率;将"下溢"重命名为"负溢出"
2013-03-15 4.1.1 AUTOSAR Administration 为滞后函数添加 8 位和 16 位变体;修改斜边函数的公式;一阶低通滤波函数的第二计算已弃用;更正 Efx_HystLeftRight、Efx_HystDeltaRight、Efx_HystCenterHalfDelta 函数的不等式;修改 Efx_Div、Efx_Debounce、Efx_HystLeftDelta、Efx_SortAscend、Efx_SortDescend、Efx_EdgeBipol、Efx_Hysteresis、Efx_MovingAverage 函数的描述和需求;更正 Efx_DebounceSetParam、Efx_Debounce 函数的输入参数描述;修改 LpFilter 第一次计算中'fac'参数的物理范围;重命名 RS_FlipFlop 函数以删除后缀;为整数提升添加 SWS_Efx_00823;修改 Efx_Gt、Efx_Debounce 函数的语法
2011-12-22 4.0.3 AUTOSAR Administration 为"计数器例程"引入初始化功能;更正 Efx_CtrlSetLimit 接口;更正 Efx_MovingAverage 例程接口;更新 Efx_RampCalcSwitch 例程定义和需求以实现正确行为;更正 Efx_Debounce_u8_u8 接口
2010-09-30 3.1.5 AUTOSAR Administration 为控制器引入额外的 LIMITED 函数;为有效使用优化斜坡函数;分离 DT1 Type 1 和 Type 2 控制器函数;引入计算 TeQ 的额外近似函数
2010-02-02 3.1.4 AUTOSAR Administration 初始发布

目录

  1. 引言与功能概述
  2. 缩略语与缩写
  3. 相关文档
  4. 约束与假设
  5. 与其他模块的依赖关系
  6. 需求可追溯性
  7. 功能规范
  8. API 规范
  9. 时序图
  10. 配置规范
  11. 不适用的需求

1 引言与功能概述

AUTOSAR 库例程是 AUTOSAR 架构中系统服务的一部分,下图展示了 AUTOSAR 库在分层架构中的位置。

   ┌─────────────────────────────┐
A  │       Application Layer     │
U  ├─────────────────────────────┤
T  │   Runtime Environment (RTE) │
O  ├─────────────────────────────┤
S  │       Basic Software        │
A  │                             │
R  ├─────────────────────────────┤
   │       ECU Hardware          │
L  └─────────────────────────────┘
I
B

图:分层架构

Efx 库(扩展定点库)包含以下例程:

  • 转换
  • 一阶低通滤波器
  • 一阶高通滤波器
  • 控制器例程(P、PT1、DT1、PD、I、PI、PID
  • 信号限制
  • 滞后函数
  • 死区时间(已弃用)
  • 去抖
  • 排序(升序、降序、中值)
  • 边沿检测
  • 区间例程
  • 计数器例程
  • 触发器例程
  • 限制器例程
  • 64 位函数

所有例程都是可重入的(re-entrant),可同时被多个可运行实体使用。

2 缩略语与缩写

缩写 描述
DET Default Error Tracer(默认错误追踪器)
EFX Extended Fixed-point library(扩展定点库)
Duty Cycle 占空比
Edge Bipol 双极性边沿
Dbnc Debounce(去抖)
Flip-Flop 触发器
FlipFlop RS RS 触发器(复位/置位)
Hyst Hysteresis(滞后)
LpFilter Low-pass filter(低通滤波器)
HpFilter High-pass filter(高通滤波器)
F Function(函数)
N Number of samples(样本数)

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] Specification of Standard Types, AUTOSAR_SWS_StandardTypes.pdf
  • [8] Requirement on Libraries, AUTOSAR_SRS_Libraries.pdf
  • [9] Memory mapping mechanism, AUTOSAR_SWS_MemoryMapping.pdf
  • [10] Specification of C Implementation Rules, AUTOSAR_TR_CImplementationRules.pdf
  • [11] Specification of ECU State Manager, AUTOSAR_SWS_EcuM.pdf

3.2 相关标准与规范

  • [12] ISO/IEC 9899:1990 Programming Language C

4 约束与假设

4.1 局限性

  • 无特殊限制。

4.2 对汽车领域的适用性

  • 无限制。

5 与其他模块的依赖关系

5.1 文件结构

[SWS_Efx_00001] ⌈ Efx 模块应提供以下文件:

  • C 文件 Efx_<name>.c 用于实现库。所有 C 文件应以 Efx 为前缀。
  • 头文件 Efx.h 提供所有公共函数原型和类型。

实现和分组(关于 C 文件的)例程可以根据以下选项灵活进行,没有强制要求遵循:

选项 1<Name> 可以是函数名,每个函数一个 C 文件。

选项 2<Name> 可以是函数组的通用名称:

  • 2.1 按对象族分组
  • 2.2 按例程族分组
  • 2.3 按方法族分组
  • 2.4 按其他方式分组(允许自定义分组)

选项 3:可以省略 <Name>,使单个 C 文件包含所有 Efx 函数。

使用以上选项可在减少 C 文件数量的同时灵活选择合适的粒度。链接时也支持按需链接。

6 需求可追溯性

需求 描述 由以下需求满足
SRS_BSW_00003 所有软件模块应提供版本和标识信息。 SWS_Efx_00815
SRS_BSW_00007 所有用 C 语言编写的 BSW 模块应符合 MISRA C 2012 标准。 SWS_Efx_00809
SRS_BSW_00304 所有 AUTOSAR 基本软件模块应使用以下数据类型,而非原生 C 数据类型。 SWS_Efx_00812
SRS_BSW_00306 AUTOSAR 基本软件模块应是编译器和平台无关的。 SWS_Efx_00813
SRS_BSW_00318 每个 AUTOSAR 基本软件模块文件应在头文件中提供版本号。 SWS_Efx_00815
SRS_BSW_00321 AUTOSAR 基本软件模块的版本号应按特定规则枚举。 SWS_Efx_00815
SRS_BSW_00348 所有 AUTOSAR 标准类型和常量应放置并组织在标准类型头文件中。 SWS_Efx_00811
SRS_BSW_00374 所有基本软件模块应提供可读的模块供应商标识。 SWS_Efx_00814
SRS_BSW_00378 AUTOSAR 应提供 boolean 类型。 SWS_Efx_00812
SRS_BSW_00379 所有软件模块应在头文件和模块 XML 描述文件中提供模块标识符。 SWS_Efx_00814
SRS_BSW_00402 每个模块应提供版本信息。 SWS_Efx_00814
SRS_BSW_00407 每个 BSW 模块应提供读取专用模块实现版本信息的函数。 SWS_Efx_00815, SWS_Efx_00816
SRS_BSW_00411 所有 AUTOSAR 基本软件模块应应用 API 存在启用/禁用的命名规则。 SWS_Efx_00816
SRS_BSW_00437 内存映射应提供定义启动期间不初始化的 RAM 段的可能性。 SWS_Efx_00810
SRS_BSW_00448 模块 SWS 不应包含来自其他模块的需求。 SWS_Efx_00822
SRS_LIBS_00001 每个库函数的功能行为不应可配置。 SWS_Efx_00818
SRS_LIBS_00002 库应在所有 BSW 模块和应用 SWC 之前可用。 SWS_Efx_00800
SRS_LIBS_00003 库应在关闭之前保持可用。 SWS_Efx_00801
SRS_LIBS_00005 每个库应提供一个具有其公共接口的头文件。 SWS_Efx_00001
SRS_LIBS_00013 由运行时输入参数值检查产生的错误情况应在 SWS 中列出。 SWS_Efx_00817, SWS_Efx_00819
SRS_LIBS_00015 应可以配置微控制器,使库代码在所有调用者之间共享。 SWS_Efx_00806
SRS_LIBS_00017 应避免使用宏。 SWS_Efx_00807
SRS_LIBS_00018 库函数只能调用库函数。 SWS_Efx_00808

7 功能规范

7.1 错误分类

[SWS_Efx_00821] ⌈ 由于库不支持 DET 调用,因此无错误分类定义。 ⌋()

7.2 错误检测

[SWS_Efx_00819] ⌈ 错误检测:函数应在运行时(无论在生产代码还是开发代码中)检查输入参数的值,特别是当错误值可能导致致命错误或不可预测结果的情况,前提是这些值在函数规范允许的范围内。所有错误情况应在 SWS 中列出,并且函数应返回 SWS 中规定的不可配置的值。该值取决于具体的函数和错误情况,因此逐个确定。

如果传递给例程的值无效且不符合函数规范,则不检测此类错误。

例如: 如果传递值 > 32 作为位位置,或将负数轴分布样本数传递给例程。 ⌋(SRS_LIBS_00013)

7.3 错误通知

[SWS_Efx_00817] ⌈ 函数不应调用 DET 进行错误通知。 ⌋(SRS_LIBS_00013)

7.4 初始化与关闭

[SWS_Efx_00800] ⌈ Efx 库不需要初始化阶段。库函数可在 ECU 初始化的最开始被调用,例如甚至可由 OS 或 EcuM 调用,因此库应就绪。 ⌋(SRS_LIBS_00002)

[SWS_Efx_00801] ⌈ Efx 库不需要关闭操作阶段。 ⌋(SRS_LIBS_00003)

7.5 使用库 API

Efx API 可直接从 BSW 模块或 SWC 调用。无需端口定义。这是一种纯函数调用。

Efx.h 语句应由开发人员或应用程序代码生成器放置,而不是由 RTE 生成器放置。

库的使用应记录在文档中。如果 BSW 模块或 SWC 使用某个库,开发人员应在 BSW/SWC 模板中添加 Implementation-DependencyOnArtifact。

minVersionmaxVersion 参数对应于供应商版本。对于 AUTOSAR 库,这些参数可以留空,因为 SWC 或 BSW 模块可以依赖库行为而非供应商实现。但是,SWC 或 BSW 模块应与其所集成的 AUTOSAR 平台兼容。

7.6 库实现

[SWS_Efx_00806] ⌈ Efx 库的实现方式应使代码可在不同内存分区中的调用者之间共享。 ⌋(SRS_LIBS_00015)

[SWS_Efx_00807] ⌈ 应避免使用宏。函数应声明为函数或内联函数(inline)。不应使用 #define 宏。 ⌋(SRS_LIBS_00017)

[SWS_Efx_00808] ⌈ 库函数不应调用任何 BSW 模块的函数,例如 DET。库函数可以调用其他库函数。因为库函数应是可重入的,但其他 BSW 模块函数可能不可重入。 ⌋(SRS_LIBS_00018)

[SWS_Efx_00809] ⌈ 用 C 语言编写的库应符合 MISRA C 标准。请参阅 SWS_BSW_00115 了解更多详情。 ⌋(SRS_BSW_00007)

[SWS_Efx_00810] ⌈ 每个 AUTOSAR 库模块实现 <library>*.c<library>*.h 应使用 AUTOSAR 内存映射机制将其代码映射到内存段。 ⌋(SRS_BSW_00437)

[SWS_Efx_00811] ⌈ 每个使用 AUTOSAR 整数数据类型和/或标准返回值的 AUTOSAR 库模块实现 <library>*.c 应包含头文件 StandardTypes.h。 ⌋(SRS_BSW_00348)

[SWS_Efx_00812] ⌈ 所有 AUTOSAR 库模块应使用 AUTOSAR 数据类型(整数、布尔)而非原生 C 数据类型,除非该库明确被标识为仅与某个平台兼容。 ⌋(SRS_BSW_00304, SRS_BSW_00378)

[SWS_Efx_00813] ⌈ 所有 AUTOSAR 库模块应避免直接使用编译器和平台特定的关键字,例如 #pragmatypeof 等,除非该库明确被标识为仅与某个平台兼容。 ⌋(SRS_BSW_00306)

[SWS_Efx_00823] ⌈ 整数提升必须遵守 Efx 服务。 ⌋()

8 API 规范

8.1 导入类型

本章列出从以下模块包含的所有类型:

头文件 导入类型
Std_Types.h boolean, sint8, uint8, sint16, uint16, sint32, uint32

由于 C 语言提供的整数类型的大小是实现定义的,因此每种整数类型可以表示的值范围将因实现而异。

库例程名称中使用以下助记符:

大小 平台类型 助记符 范围
unsigned 8-Bit boolean u8 [ TRUE, FALSE ]
signed 8-Bit sint8 s8 [ -128, 127 ]
signed 16-Bit sint16 s16 [ -32768, 32767 ]
signed 32-Bit sint32 s32 [ -2147483648, 2147483647 ]
signed 64-Bit sint64 s64 [-9223372036854775808, 9223372036854775807]
unsigned 8-Bit uint8 u8 [ 0, 255 ]
unsigned 16-Bit uint16 u16 [ 0, 65535 ]
unsigned 32-Bit uint32 u32 [ 0, 4294967295 ]
unsigned 64-Bit uint64 u64 [0, 18446744073709551615]

表 1:基本类型

注意: 对于返回类型/参数类型为 boolean 的 API,命名约定采用 _u8,应解释为 _b(Boolean)。如果返回类型/参数类型中不存在 boolean 数据类型,则 _u8 应解释为 _u8 本身。

作为本文档其余部分的约定:

  • 助记符将用于例程名称中(使用 <InTypeMn1> 表示输入 1 的类型助记符)
  • 实际类型将用于例程原型的描述中(使用 <InType1><OutType>)。

8.2 类型定义

无。

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 数学函数定义

下表描述了以下章节中使用的符号含义:

符号 描述
Yn 要计算的实际输出
Yn-1 一个时间步长之前的输出值
Xn 从输入给出的实际输入
Xn-1 一个时间步长之前的输入
a, b0, b1 滤波器相关常数

8.5.1 一阶低通滤波器

我们考虑一个具有传递函数的递归一阶低通滤波器:

H(z) = b1 / (1 + a * z^(-1))

在任何时间点,新的返回值(Yn)可以根据先前的值(Yn-1)、当前值(Xn)和已知常数(K)计算。计算公式如下:

Yn = Yn-1 + (Xn - Yn-1) * K

其中 b1=Ka = K - 1。

滤波器是收敛低通滤波器,仅当平均值 K 包含在 [0,1] 中时。

8.5.1.1 第一次计算

[SWS_Efx_00005] ⌈

内容
服务名称 Efx_LpFilterFac1_<InTypeMn><InTypeMn><InTypeMn>_<OutTypeMn>
语法 <OutType> Efx_LpFilterFac1_<InTypeMn><InTypeMn><InTypeMn>_<OutTypeMn>(<InType> Yn-1, <InType> Xn, <InType> fac)
服务 ID[hex] 0x01 to 0x08
描述 此服务计算一阶低通滤波器的输出。
通过 Efx.h

⌋()

[SWS_Efx_00006] ⌈

Yn = Yn-1 + (((Xn - Yn-1) * fac) >> n)

其中 'n' 是移位,取决于函数用于因子的类型。 ⌋()

[SWS_Efx_00007] ⌈ 为了始终收敛,使用以下逻辑校正结果以实现值饱和:

if (Yn == Yn-1)
    if (((Xn - Yn-1) * fac) > 0)
        Yn++
    else if (((Xn - Yn-1) * fac) < 0)
        Yn--

⌋()

[SWS_Efx_00008] ⌈ 已实现函数列表:

服务 ID[hex] 语法 关联移位
0x01 sint16 Efx_LpFilterFac1_s16s16s16_s16(sint16, sint16, sint16) 15
0x02 sint16 Efx_LpFilterFac1_s16s16u16_s16(sint16, sint16, uint16) 16
0x03 sint32 Efx_LpFilterFac1_s32s32u16_s32(sint32, sint32, uint16) 16
0x04 uint16 Efx_LpFilterFac1_u16u16s16_u16(uint16, uint16, sint16) 15
0x05 uint16 Efx_LpFilterFac1_u16u16u16_u16(uint16, uint16, uint16) 16
0x06 uint8 Efx_LpFilterFac1_u8u8u8_u8(uint8, uint8, uint8) 8
0x07 uint32 Efx_LpFilterFac1_u32u32u32_u32(uint32, uint32, uint32) 32
0x08 uint32 Efx_LpFilterFac1_u32u32u16_u32(uint32, uint32, uint16) 16

⌋()

8.5.1.2 第三次计算

[SWS_Efx_00012] ⌈

内容
服务名称 Efx_LpFilter_<InTypeMn>_<OutTypeMn>
语法 <OutType> Efx_LpFilter_<InTypeMn>_<OutTypeMn>(<InType> input, <InType> old_output, uint32 tau_const, uint16 recurrence, uint8 reset, <InType> init_val, uint8* started)
服务 ID[hex] 0x0D and 0x0E
参数 (in) input 输入信号;old_output 滤波器前一个值;tau_const 滤波器参数 Tau:时间常数(秒);recurrence 函数两次执行之间的时间增量;reset 重置滤波信号的标志;init_val 滤波器的初始值
参数 (in-out) started 指向用于检测函数第一次调用的标志的指针
描述 此服务计算一阶离散滤波器。

⌋()

[SWS_Efx_00013] ⌈ 如果 tau_const==0,则 output = input。 ⌋()

[SWS_Efx_00014] ⌈ 如果 *started==0,则 output = init_val。此标志用于指示滤波器状态。*Started = 0 表示当前函数调用是函数的第一次调用以触发初始化。 ⌋()

[SWS_Efx_00015] ⌈ 此服务计算一阶离散滤波器:

output = old_output + (input - old_output) * (1 - exp(-recurrence/tau_const))
output = old_output * exp(-recurrence/tau_const) + input * (1 - exp(-recurrence/tau_const))

公式 1

注: 指数函数可以使用插值计算。

⌋()

[SWS_Efx_00016] ⌈ 如果 (reset == 1)(*started == 0),则 output = init_val。 ⌋()

[SWS_Efx_00017] ⌈ 如果 *started == 0,则 *started=1。 ⌋()

[SWS_Efx_00018] ⌈ 已实现函数列表:

服务 ID[hex] 语法
0x0D uint32 Efx_LpFilter_u32_u32(uint32, uint32, uint32, uint16, uint8, uint32, uint8*)
0x0E sint32 Efx_LpFilter_s32_s32(sint32, sint32, uint32, uint16, uint8, sint32, uint8 *)

⌋()

注意: 不建议在满足任何条件的情况下调用 Efx_LpFilter_<InTypeMn>_<OutTypeMn>。必须在每次重复时调用它,即使未使用。如果不满足条件,则输出应一直冻结为前一个值。参数 started 必须由调用方声明为私有变量,并应初始化为 0(默认初始化),因为函数使用此输出的先前值(因此不得使用堆栈)。

8.5.2 一阶高通滤波器

我们考虑一个具有传递函数的递归一阶高通滤波器:

H(z) = (b0 * z + b1) / (z + a)

在任何时间点,新的返回值(Yn)可以根据先前的值(Yn-1)、当前输入(Xn)、先前的输入(Xn-1)和已知常数(K)计算。计算公式如下:

Yn = Yn-1 - K * Yn-1 + (Xn - Xn-1)

其中 b0 = 1, b1 = -1a = K - 1。

滤波器是收敛高通滤波器,仅当因子值 m 包含在 [0,1] 中时。

[SWS_Efx_00022] ⌈

内容
服务名称 Efx_HpFilter_u8_s16
语法 sint16 Efx_HpFilter_u8_s16(sint16 Yn-1, uint8 Xn, uint8 Xn-1, uint16 K)
服务 ID[hex] 0x10
描述 此服务计算一阶高通滤波器的输出。

⌋()

[SWS_Efx_00023] ⌈:

Yn = Yn-1 - (K * Yn-1 / 2^16) + (Xn - Xn-1) * 2^7

结果向 0 舍入。 ⌋()

[SWS_Efx_00024] ⌈ 在发生负溢出或正溢出时,返回值应饱和为边界值。 ⌋()

[SWS_Efx_00025] ⌈ 对结果应用饱和校正以使输出收敛到零:

  • 如果 (Yn 等于 Yn-1)(Yn-1 > 0),则 Yn 减一
  • 如果 (Yn 等于 Yn-1)(Yn-1 < 0),则 Yn 加一

⌋()

摘要标记8.5.3 至 8.5.23 包含以下例程类别(完整定义见原文 PDF):

  • 8.5.3 控制器例程P、PT1、DT1、PD、I、PI、PID 控制器(多个变体)
  • 8.5.4 范围和限制定义
  • 8.5.5 浮点数学例程
  • 8.5.6 限制
  • 8.5.7 对数和指数
  • 8.5.8 三角函数
  • 8.5.9 平均值
  • 8.5.10 数组平均值
  • 8.5.11 斜边
  • 8.5.12 斜坡例程
  • 8.5.13 滞后例程
  • 8.5.14 死区时间(已弃用)
  • 8.5.15 去抖例程
  • 8.5.16 升序排序例程
  • 8.5.17 降序排序例程
  • 8.5.18 中值排序例程
  • 8.5.19 边沿检测例程
  • 8.5.20 区间例程
  • 8.5.21 计数器例程
  • 8.5.22 触发器例程
  • 8.5.23 限制器例程
  • 8.5.24 64 位函数

由于文档体量较大(112 页,包含数百个函数原型),此处仅翻译关键定义和前几个示例。完整表见原文 PDF。

8.6 函数使用示例

见原文档 8.6 节。

8.7 版本 API

8.7.1 Efx_GetVersionInfo

[SWS_Efx_00815] ⌈

内容
服务名称 Efx_GetVersionInfo
语法 void Efx_GetVersionInfo(Std_VersionInfoType* versioninfo)
服务 ID[hex] 0xff
同步/异步 同步
可重入性 可重入
参数 (in)
参数 (in-out)
参数 (out) versioninfo 指向存储此模块版本信息的位置。格式符合 [BSW00321]。
返回值
描述 返回此库的版本信息。
通过 Efx.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_Efx_00816] ⌈ 如果 Efx_GetVersionInfo 的调用方和被调用方的源代码都可用,Efx 库应将 Efx_GetVersionInfo 实现为模块头文件中定义的宏。 ⌋(SRS_BSW_00407, SRS_BSW_00411)

8.8 回调通知

无。

8.9 调度函数

Efx 库没有调度函数。

8.10 预期接口

无。

8.10.1 强制接口

无。

8.10.2 可选接口

无。

8.10.3 可配置接口

无。

9 时序图

不适用。

10 配置规范

10.1 发布信息

[SWS_Efx_00814] ⌈ 如 [3] 中 SRS_BSW_00402 要求的标准化通用发布参数,应在本模块的头文件中发布,并需要在 BSW Module Description 中提供。相应的模块缩写可在 [1] 基本软件模块列表中找到。 ⌋(SRS_BSW_00402, SRS_BSW_00374, SRS_BSW_00379)

其他模块特定的发布参数(如果适用)将在下面列出。

10.2 配置选项

[SWS_Efx_00818] ⌈ Efx 库不应具有任何可能影响例程功能行为的配置选项。即对于给定的输入参数集合,输出应始终相同。例如,出错时返回的值不应可配置。 ⌋(SRS_LIBS_00001)

但是,库供应商被允许添加与库实现相关的特定配置选项,例如用于资源消耗优化。

11 不适用的需求

[SWS_Efx_00822] ⌈ 这些需求不适用于本规范。 ⌋(SRS_BSW_00448)


翻译说明

  1. 本文档为 AUTOSAR CP Release 4.4.0 的 EFX 库软件规范(SWS)。
  2. 所有 API 标识符(如 Efx_LpFilterFac1_s16s16s16_s16Efx_HpFilter_u8_s16Efx_GetVersionInfo 等)保留英文原名。
  3. 数据类型(uint8uint16uint32sint8sint16sint32boolean)保留英文原名。
  4. 需求 ID(如 SWS_Efx_00005)保留原样。
  5. 章节中包含的所有 C 代码片段按原文翻译并保留格式。
  6. AUTOSAR 方框符 ⌈⌋ 已保留。
  7. 文档涵盖 23 个例程类别(8.5.1 至 8.5.23),包括一阶低通/高通滤波器、各种控制器(P、PT1、DT1、PD、I、PI、PID)、三角函数、斜坡、滞后、去抖、排序、边沿检测、区间、计数器、触发器、限制器、64 位函数等。由于内容极多(数百个函数原型),此处仅翻译关键定义和前几个示例。完整表见原文 PDF。