# SWS_BFXLibrary — 位处理例程规范 | 文档元信息 | 值 | |------------|------| | 文档标题 | Specification of Bit Handling Routines(位处理例程规范) | | 文档所有者 | AUTOSAR | | 文档责任方 | AUTOSAR | | 文档标识号 | 399 | | 文档状态 | Final(最终版) | | 所属 AUTOSAR 标准 | Classic Platform(经典平台) | | 所属标准发布版本 | 4.4.0 | | 发布版本 | AUTOSAR CP Release 4.4.0 | ## 文档变更历史 | 日期 | 发布版本 | 变更人 | 变更说明 | |------|----------|--------|----------| | 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 新增 64 位处理需求 | | 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 为布尔型添加助记符 "u8";编辑性修改 | | 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除需求 SWS_Bfx_00204;更新 MISRA 违反注释格式;更新 BitPn、BitStartPn、BitLn 与 ShiftCnt 的未指定值范围;澄清说明 | | 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 更新 SWS_Bfx_00017,将 Bfx_GetBit 函数返回类型从 1 和 0 改为 TRUE 和 FALSE;更新第 8.1 章中位寻址定义以及 Bfx_SetBit、Bfx_ClrBit、Bfx_GetBit、Bfx_SetBits、Bfx_CopyBit、Bfx_PutBits、Bfx_PutBit 的示例;将表 2 中的 Boolean 替换为 boolean;在 SWS_Bfx_00029 的示例中将 BFX_GetBits_u16u8u8_u16 替换为 Bfx_GetBits_u16u8u8_u16 | | 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 正确使用函数声明中的 const;编辑性修改 | | 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 编辑性修改 | | 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 改进 C 文件的函数映射方式描述;改进错误分类定义;编辑性修改 | | 2013-03-15 | 4.1.1 | AUTOSAR Administration | 将 Test Bit API 的返回值改为 boolean;改进内存映射处理;更改 Put Bit API 的参数数量 | | 2011-12-22 | 4.0.3 | AUTOSAR Administration | 更清晰地描述位移位和循环移位操作的需求;更正 PutBit 例程的表;更正 Copy Bit 例程的接口;移除错误分类支持和定义(库不支持 DET 调用);移除版本信息例程的配置参数描述/支持;将缩写中的 DET 重命名为 "Default Error Tracer" | | 2009-12-18 | 4.0.1 | AUTOSAR Administration | 优化位处理函数签名以方便使用;消除有符号变量上的位处理;引入额外的位处理函数 | | 2010-02-02 | 3.1.4 | AUTOSAR Administration | 初始发布 | --- ## 目录 1. [引言与功能概述](#1-引言与功能概述) 2. [缩略语与缩写](#2-缩略语与缩写) 3. [相关文档](#3-相关文档) - 3.1 [输入文档](#31-输入文档) - 3.2 [相关标准与规范](#32-相关标准与规范) 4. [约束与假设](#4-约束与假设) - 4.1 [局限性](#41-局限性) - 4.2 [对汽车领域的适用性](#42-对汽车领域的适用性) 5. [与其他模块的依赖关系](#5-与其他模块的依赖关系) - 5.1 [文件结构](#51-文件结构) 6. [需求可追溯性](#6-需求可追溯性) 7. [功能规范](#7-功能规范) - 7.1 [错误分类](#71-错误分类) - 7.2 [错误检测](#72-错误检测) - 7.3 [错误通知](#73-错误通知) - 7.4 [初始化与关闭](#74-初始化与关闭) - 7.5 [使用库 API](#75-使用库-api) - 7.6 [库实现](#76-库实现) 8. [API 规范](#8-api-规范) - 8.1 [导入类型](#81-导入类型) - 8.2 [类型定义](#82-类型定义) - 8.3 [关于目标优化的函数说明](#83-关于目标优化的函数说明) - 8.4 [位函数定义](#84-位函数定义) - 8.5 [回调通知](#85-回调通知) - 8.6 [调度函数](#86-调度函数) - 8.7 [预期接口](#87-预期接口) - 8.8 [版本 API](#88-版本-api) 9. [时序图](#9-时序图) 10. [配置规范](#10-配置规范) - 10.1 [发布信息](#101-发布信息) - 10.2 [配置选项](#102-配置选项) 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 ``` **图:分层架构** Bfx 例程规范规定了 AUTOSAR 位处理功能库的功能、API 和配置,该库专用于定点算术例程。 所有位函数都是可重入的(re-entrant),可以处理来自应用程序的多个并发请求。 ## 2 缩略语与缩写 具有局部范围、因此未包含在 AUTOSAR 词汇表中的缩略语和缩写必须出现在局部词汇表中。 **缩写说明:** | 缩写 | 描述 | |------|------| | **Bfx** | 定点位域函数的简称 | | **u8** | uint8 的简称,参见 AUTOSAR_SWS_PlatformTypes | | **u16** | uint16 的简称,参见 AUTOSAR_SWS_PlatformTypes | | **u32** | uint32 的简称,参见 AUTOSAR_SWS_PlatformTypes | | **s8** | sint8 的简称,参见 AUTOSAR_SWS_PlatformTypes | | **s16** | sint16 的简称,参见 AUTOSAR_SWS_PlatformTypes | | **s32** | sint32 的简称,参见 AUTOSAR_SWS_PlatformTypes | | **boolean** | 布尔数据类型,参见 AUTOSAR_SWS_PlatformTypes | | **DET** | Default Error Tracer(默认错误追踪器) | ## 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] AUTOSAR 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] Specification of Memory Mapping, AUTOSAR_SWS_MemoryMapping - [10] Software Component Template, AUTOSAR_TPS_SoftwareComponentTemplateSoftware - [11] Specification of C Implementation Rules, AUTOSAR_TR_CImplementationRules.pdf ### 3.2 相关标准与规范 - [10] ISO/IEC 9899:1990 Programming Language – C ## 4 约束与假设 ### 4.1 局限性 无局限性。 ### 4.2 对汽车领域的适用性 无限制。 ## 5 与其他模块的依赖关系 ### 5.1 文件结构 [SWS_Bfx_00220] ⌈ Bfx 模块应提供以下文件: - C 文件 `Bfx_.c` 用于实现库。所有 C 文件应以 `Bfx` 为前缀。 - 头文件 `Bfx.h` 提供由 BFX 库规范定义的所有公共函数原型和类型。 ⌋(SRS_LIBS_00005) [SWS_Bfx_00222] ⌈ 库例程的实现和分组(相对于 C 文件)应按以下选项之一进行。⌋() **选项 1**:`` 可以是函数名,每个函数一个 C 文件。 例如:`Bfx_setbit.c` 等。 **选项 2**:`` 可以是函数组的通用名称: - 2.1 按对象族分组:例如 `Bfx_set.c`、`Bfx_get.c` - 2.2 按例程族分组:例如 `Bfx_bit8.c`、`Bfx_bit16.c` 等 - 2.3 按其他方式分组:(允许自定义分组) **选项 3**:可以省略 ``,使单个 C 文件包含所有 Bfx 函数,例如 `Bfx.c`。 使用以上选项可在减少 C 文件数量的同时灵活选择合适的粒度。根据工具链,按需链接(linking on demand)可能可行也可能不可行。 ## 6 需求可追溯性 | 需求 | 描述 | 由以下需求满足 | |------|------|----------------| | SRS_BSW_00007 | 所有用 C 语言编写的 BSW 模块应符合 MISRA C 2012 标准。 | SWS_Bfx_00209 | | SRS_BSW_00304 | 所有 AUTOSAR 基本软件模块应使用以下数据类型,而非原生 C 数据类型。 | SWS_Bfx_00212 | | SRS_BSW_00348 | 所有 AUTOSAR 标准类型和常量应放置并组织在标准类型头文件中。 | SWS_Bfx_00213 | | SRS_BSW_00378 | AUTOSAR 应提供 boolean 类型。 | SWS_Bfx_00212 | | SRS_BSW_00407 | 每个 BSW 模块应提供读取专用模块实现版本信息的函数。 | SWS_Bfx_00302 | | SRS_BSW_00411 | 所有 AUTOSAR 基本软件模块应应用 API 存在启用/禁用的命名规则。 | SWS_Bfx_00302 | | SRS_BSW_00448 | 模块 SWS 不应包含来自其他模块的需求。 | SWS_Bfx_00999 | | SRS_LIBS_00001 | 每个库函数的功能行为不应可配置。 | SWS_Bfx_00314 | | SRS_LIBS_00002 | 库应在所有 BSW 模块和应用 SWC 之前可用。 | SWS_Bfx_00200 | | SRS_LIBS_00003 | 库应在关闭之前保持可用。 | SWS_Bfx_00201 | | SRS_LIBS_00005 | 每个库应提供一个具有其公共接口的头文件。 | SWS_Bfx_00220 | | SRS_LIBS_00007 | 库的使用应记录在文档中。 | SWS_Bfx_00205 | | SRS_LIBS_00013 | 由运行时输入参数值检查产生的错误情况应在 SWS 中列出。 | SWS_Bfx_00216 | | SRS_LIBS_00015 | 应可以配置微控制器,使库代码在所有调用者之间共享。 | SWS_Bfx_00206 | | SRS_LIBS_00017 | 应避免使用宏。 | SWS_Bfx_00207 | | SRS_LIBS_00018 | 库函数只能调用库函数。 | SWS_Bfx_00203, SWS_Bfx_00208, SWS_Bfx_00217 | ## 7 功能规范 ### 7.1 错误分类 [SWS_Bfx_00223] ⌈ 库不应支持错误分类定义——如 Det 错误 ID。 ⌋ () ### 7.2 错误检测 [SWS_Bfx_00216] ⌈ 错误检测:函数应在运行时(无论在生产代码还是开发代码中)检查输入参数的值,特别是当错误值可能导致致命错误或不可预测结果的情况,前提是这些值在函数规范允许的范围内。所有错误情况应在 SWS 中列出,并且函数应返回 SWS 中规定的不可配置的值。该值取决于具体的函数和错误情况,因此逐个确定。如果传递给库例程的值不在有效范围内、超出边界条件或不符合函数规范,则库例程不检测此类错误。 ⌋(SRS_LIBS_00013) ### 7.3 错误通知 [SWS_Bfx_00217] ⌈ 库函数只能调用库函数:函数在出错时不应调用 DET。 ⌋(SRS_LIBS_00018) ### 7.4 初始化与关闭 [SWS_Bfx_00200] ⌈ Bfx 库不需要初始化阶段。库函数可在 ECU 初始化的最开始被调用,例如甚至可由 OS 或 EcuM 调用,因此库应就绪。 ⌋(SRS_LIBS_00002) [SWS_Bfx_00201] ⌈ Bfx 库不需要关闭操作阶段。 ⌋(SRS_LIBS_00003) ### 7.5 使用库 API [SWS_Bfx_00203] ⌈ Bfx API 可直接从 BSW 模块或 SWC 调用。无需端口定义。这是一种纯函数调用。 ⌋(SRS_LIBS_00018) [SWS_Bfx_00205] ⌈ 库的使用应记录在文档中。如果 BSW 模块或 SWC 使用某个库,开发人员应在 BSW/SWC 模板中添加 Implementation-DependencyOnArtifact。`minVersion` 和 `maxVersion` 参数对应于供应商版本。对于 AUTOSAR 库,这些参数可以留空,因为 SWC 或 BSW 模块可以依赖库行为而非供应商实现。但是,SWC 或 BSW 模块应与其所集成的 AUTOSAR 平台兼容。 ⌋(SRS_LIBS_00007) ### 7.6 库实现 [SWS_Bfx_00206] ⌈ Bfx 库的实现方式应使代码可在不同内存分区中的调用者之间共享。 ⌋(SRS_LIBS_00015) [SWS_Bfx_00207] ⌈ 在库的上下文中必须避免使用宏。库函数必须声明为函数或内联函数(inline),不应使用 `#define` 宏。 ⌋( SRS_LIBS_00017) [SWS_Bfx_00208] ⌈ 库函数不应调用任何 BSW 模块的函数,例如 DET。库函数可以调用任何其他库函数,因为所有库函数都是可重入的,但 BSW 模块函数可能不可重入。 ⌋(SRS_LIBS_00018) [SWS_Bfx_00209] ⌈ 用 C 语言编写的库应符合 MISRA C 标准。请参阅 SWS_BSW_00115 了解更多详情。 ⌋(SRS_BSW_00007) [SWS_Bfx_00212] ⌈ 所有 AUTOSAR 库模块应使用 AUTOSAR 数据类型(整数、布尔)而非原生 C 数据类型,除非该库明确被标识为仅与某个平台兼容。 ⌋(SRS_BSW_00304, SRS_BSW_00378) [SWS_Bfx_00213] ⌈ 所有 AUTOSAR 库模块应避免直接使用编译器和平台特定的关键字,除非该库明确被标识为仅与某个平台兼容。 ⌋(SRS_BSW_00348) [SWS_Bfx_00214] ⌈ 所有位处理库模块应避免处理用户错误和超出指定范围的值。 ⌋() ## 8 API 规范 ### 8.1 导入类型 本章列出从以下模块包含的所有类型: | 头文件 | 导入类型 | |--------|----------| | Std_Types.h | boolean, sint8, uint8, sint16, uint16, sint32, uint32 | 我们注意到,由于 C 语言提供的整数类型的大小是实现定义的,因此每种整数类型可以表示的值范围将因实现而异。 因此,为了提高软件的可移植性,这些类型在 PlatformTypes.h [6] 中定义。库例程名称中使用以下助记符。 **注意:** 对于返回类型/参数类型为 boolean 的 API,命名约定采用 `_u8`,应解释为 `_b`(Boolean)。 如果返回类型/参数类型中不存在 boolean 数据类型,则 `_u8` 应解释为 `_u8` 本身。 | 大小 | 平台类型 | 助记符 | |------|----------|--------| | unsigned 8-Bit | boolean | u8 | | signed 8-Bit | sint8 | s8 | | signed 16-Bit | sint16 | s16 | | signed 32-Bit | sint32 | s32 | | unsigned 8-Bit | uint8 | u8 | | unsigned 16-Bit | uint16 | u16 | | unsigned 32-Bit | uint32 | u32 | **表 1:基本类型** 如 [6] 所述,每种基本类型的范围如表 2 所示。 | 基本类型 | 范围 | |----------|------| | boolean | [TRUE, FALSE] | | uint8 | [ 0, 255 ] | | sint8 | [ -128, 127 ] | | uint16 | [ 0, 65535 ] | | sint16 | [ -32768, 32767 ] | | uint32 | [ 0, 4294967295 ] | | sint32 | [ -2147483648, 2147483647 ] | **表 2:基本类型范围** 作为本文档其余部分的约定: - 助记符将用于例程名称中(使用 `` 表示输入 1 的类型助记符) - 实际类型将用于例程原型的描述中(使用 `` 或 ``)。 本文档的位寻址规则: - 最低有效位(LSB)的位位置定义为 0(零) - 位域长度定义为位的数量 ### 8.2 类型定义 无。 ### 8.3 关于目标优化的函数说明 本规范中描述的函数可作为常规函数或内联函数(inline)实现。 ### 8.4 位函数定义 #### 8.4.1 Bfx_SetBit [SWS_Bfx_00001] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_SetBit_u8` | | 语法 | `void Bfx_SetBit_u8(* Data, uint8 BitPn)` | | 服务 ID[hex] | 0x01 to 0x03 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `BitPn` 位位置 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应在请求的位位置将输入数据的逻辑状态设置为 '1'。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00002] ⌈ 预期功能: ```c *Data = *Data | (0x01 << BitPn) ``` **例如:** ```c Data = 10001010b Bfx_SetBit_u8u8(&Data, 2) Data 将被更新为 10001110b ``` ⌋() [SWS_Bfx_00008] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitPn 最大值 | |--------------|----------|--------------| | 0x001 | `void Bfx_SetBit_u8u8(uint8*, uint8)` | 7 | | 0x002 | `void Bfx_SetBit_u16u8(uint16*, uint8)` | 15 | | 0x003 | `void Bfx_SetBit_u32u8(uint32*, uint8)` | 31 | | 0x004 | `void Bfx_SetBit_u64u8(uint64*, uint8)` | 63 | ⌋ #### 8.4.2 Bfx_ClrBit [SWS_Bfx_00010] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_ClrBit_u8` | | 语法 | `void Bfx_ClrBit_u8(* Data, uint8 BitPn)` | | 服务 ID[hex] | 0x06 to 0x08 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `BitPn` 位位置 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应在请求的位位置将输入数据的逻辑状态清除为 '0'。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00011] ⌈ 预期功能: ```c *Data = (*Data & ~(0x01 << BitPn)) ``` **例如:** ```c Data = 10001010b Bfx_ClrBit_u8u8(&Data, 1) Data 将被更新为 10001000b ``` ⌋() [SWS_Bfx_00015] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitPn 最大值 | |--------------|----------|--------------| | 0x006 | `void Bfx_ClrBit_u8u8(uint8*, uint8)` | 7 | | 0x007 | `void Bfx_ClrBit_u16u8(uint16*, uint8)` | 15 | | 0x008 | `void Bfx_ClrBit_u32u8(uint32*, uint8)` | 31 | | 0x009 | `void Bfx_ClrBit_u64u8(uint64*, uint8)` | 63 | ⌋() #### 8.4.3 Bfx_GetBit [SWS_Bfx_00016] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_GetBit_u8_u8` | | 语法 | `boolean Bfx_GetBit_u8_u8( Data, uint8 BitPn)` | | 服务 ID[hex] | 0x0a to 0x0c | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Data` 输入数据;`BitPn` 位位置 | | 参数 (in-out) | 无 | | 参数 (out) | 无 | | 返回值 | `boolean` 位状态 | | 描述 | 此函数应返回请求位位置上输入数据的逻辑状态。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00017] ⌈ ```c Result = TRUE, ((Data & (0x01 << BitPn)) != 0) Result = FALSE, 其他情况 ``` **例如:** ```c Bfx_GetBit_u8u8(10001010b, 1) 返回 TRUE ``` ⌋() [SWS_Bfx_00020] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitPn 最大值 | |--------------|----------|--------------| | 0x00A | `boolean Bfx_GetBit_u8u8_u8(uint8, uint8)` | 7 | | 0x00B | `boolean Bfx_GetBit_u16u8_u8(uint16, uint8)` | 15 | | 0x00C | `boolean Bfx_GetBit_u32u8_u8(uint32, uint8)` | 31 | | 0x00D | `boolean Bfx_GetBit_u64u8_u8(uint64, uint8)` | 63 | ⌋() #### 8.4.4 Bfx_SetBits [SWS_Bfx_00021] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_SetBits_u8u8u8` | | 语法 | `void Bfx_SetBits_u8u8u8(* Data, uint8 BitStartPn, uint8 BitLn, uint8 Status)` | | 服务 ID[hex] | 0x20 to 0x22 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `BitStartPn` 起始位位置;`BitLn` 位域长度;`Status` 状态值 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应根据 `Status` 值将输入数据从 `BitStartPn` 开始的长度为 `BitLn` 的位设置为 '1' 或 '0'。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00022] ⌈ ``` 15 14 13 12 11 10 9 ... 2 1 0 1 1 1 0 1 0 0 ... 0 0 0 < BitLn > ``` **例如:** ```c Data = 1110100000000111b Bfx_SetBits_u16u8u8u8(&Data, 5, 5, 1) Data 将被更新为 1110101111100111b ``` ⌋() [SWS_Bfx_00025] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitLn 最大值 | BitStartPn 最大值 | BitStartPn + BitLn 最大值 | |--------------|----------|--------------|-------------------|---------------------------| | 0x020 | `void Bfx_SetBits_u8u8u8u8(uint8*, uint8, uint8, uint8)` | 8 | 7 | 8 | | 0x021 | `void Bfx_SetBits_u16u8u8u8(uint16*, uint8, uint8, uint8)` | 16 | 15 | 16 | | 0x022 | `void Bfx_SetBits_u32u8u8u8(uint32*, uint8, uint8, uint8)` | 32 | 31 | 32 | | 0x023 | `void Bfx_SetBits_u64u8u8u8(uint64*, uint8, uint8, uint8)` | 64 | 63 | 64 | ⌋() #### 8.4.5 Bfx_GetBits [SWS_Bfx_00028] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_GetBits_u8u8_` | | 语法 | ` Bfx_GetBits_u8u8_( Data, uint8 BitStartPn, uint8 BitLn)` | | 服务 ID[hex] | 0x26 to 0x28 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Data` 输入数据;`BitStartPn` 起始位位置;`BitLn` 位域长度 | | 参数 (in-out) | 无 | | 参数 (out) | 无 | | 返回值 | `` 位域序列 | | 描述 | 此函数应返回输入数据从 `BitStartPn` 开始的长度为 `BitLn` 的位。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00029] ⌈ ``` 15 14 13 12 11 10 9 ... 2 1 0 1 1 1 0 1 0 0 ... 0 1 1 BitStartPn < BitLn > ``` **例如:** ```c Bfx_GetBits_u16u8u8_u16(1110100000000111b, 9, 5) 返回 0000000000010100b ``` ⌋() [SWS_Bfx_00034] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitLn 最大值 | BitStartPn 最大值 | BitStartPn + BitLn 最大值 | |--------------|----------|--------------|-------------------|---------------------------| | 0x026 | `uint8 Bfx_GetBits_u8u8u8_u8(uint8, uint8, uint8)` | 8 | 7 | 8 | | 0x027 | `uint16 Bfx_GetBits_u16u8u8_u16(uint16, uint8, uint8)` | 16 | 15 | 16 | | 0x028 | `uint32 Bfx_GetBits_u32u8u8_u32(uint32, uint8, uint8)` | 32 | 31 | 32 | | 0x029 | `uint64 Bfx_GetBits_u64u8u8_u64(uint64, uint8, uint8)` | 64 | 63 | 64 | ⌋() #### 8.4.6 Bfx_SetBitMask [SWS_Bfx_00035] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_SetBitMask_` | | 语法 | `void Bfx_SetBitMask_(* Data, Mask)` | | 服务 ID[hex] | 0x2a to 0x2c | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Mask` 用于设置位的掩码 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应根据掩码中相应位为 1 时将数据设置为逻辑状态 '1',其余位保持原值。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00036] ⌈ 预期功能: ```c *Data = *Data | Mask ``` ⌋() [SWS_Bfx_00038] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x02A | `void Bfx_SetBitMask_u8u8(uint8*, uint8)` | | 0x02B | `void Bfx_SetBitMask_u16u16(uint16*, uint16)` | | 0x02C | `void Bfx_SetBitMask_u32u32(uint32*, uint32)` | | 0x02D | `void Bfx_SetBitMask_u64u64(uint64*, uint64)` | ⌋() #### 8.4.7 Bfx_ClrBitMask [SWS_Bfx_00039] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_ClrBitMask_` | | 语法 | `void Bfx_ClrBitMask_(* Data, Mask)` | | 服务 ID[hex] | 0x30 to 0x32 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Mask` 掩码值 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应根据掩码将输入数据所有相应位的逻辑状态清除为 '0'。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00040] ⌈ 此函数应根据相应掩码位为 1 时将数据清除为逻辑状态 '0',其余位保持原值。预期功能: ```c *Data = *Data & ~Mask ``` ⌋() [SWS_Bfx_00045] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x030 | `void Bfx_ClrBitMask_u8u8(uint8*, uint8)` | | 0x031 | `void Bfx_ClrBitMask_u16u16(uint16*, uint16)` | | 0x032 | `void Bfx_ClrBitMask_u32u32(uint32*, uint32)` | | 0x033 | `void Bfx_ClrBitMask_u64u64(uint64*, uint64)` | ⌋() #### 8.4.8 Bfx_TstBitMask [SWS_Bfx_00046] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_TstBitMask__u8` | | 语法 | `boolean Bfx_TstBitMask__u8( Data, Mask)` | | 服务 ID[hex] | 0x36 to 0x38 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Data` 输入数据;`Mask` 掩码值 | | 参数 (in-out) | 无 | | 参数 (out) | 无 | | 返回值 | `boolean` 值 | | 描述 | 如果输入数据 Data 中 Mask 值所定义的所有位均被设置,则此函数应返回 TRUE。其他所有情况下,此函数应返回 FALSE。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00047] ⌈ ```c Result = TRUE, ((Data & Mask) == Mask) Result = FALSE, 其他所有情况 ``` **例如:** ```c Bfx_TstBitMask_u8u8_u8(10010011b, 10010000b) 返回 TRUE ``` [SWS_Bfx_00050] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x036 | `boolean Bfx_TstBitMask_u8u8_u8(uint8, uint8)` | | 0x037 | `boolean Bfx_TstBitMask_u16u16_u8(uint16, uint16)` | | 0x038 | `boolean Bfx_TstBitMask_u32u32_u8(uint32, uint32)` | | 0x039 | `boolean Bfx_TstBitMask_u64u64_u8(uint64, uint64)` | ⌋() #### 8.4.9 Bfx_TstBitLnMask [SWS_Bfx_00051] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_TstBitLnMask__u8` | | 语法 | `boolean Bfx_TstBitLnMask__u8( Data, Mask)` | | 服务 ID[hex] | 0x3a to 0x3c | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Data` 输入数据;`Mask` 掩码值 | | 参数 (in-out) | 无 | | 参数 (out) | 无 | | 返回值 | `boolean` 数据 | | 描述 | 此函数对输入数据进行测试,如果根据掩码至少有一位被设置,则函数返回 TRUE,否则返回 FALSE。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00055] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x03A | `boolean Bfx_TstBitLnMask_u8u8_u8(uint8, uint8)` | | 0x03B | `boolean Bfx_TstBitLnMask_u16u16_u8(uint16, uint16)` | | 0x03C | `boolean Bfx_TstBitLnMask_u32u32_u8(uint32, uint32)` | | 0x03D | `boolean Bfx_TstBitLnMask_u64u64_u8(uint64, uint64)` | ⌋() #### 8.4.10 Bfx_TstParityEven [SWS_Bfx_00056] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_TstParityEven__u8` | | 语法 | `boolean Bfx_TstParityEven__u8( Data)` | | 服务 ID[hex] | 0x40 to 0x42 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Data` 输入数据 | | 参数 (in-out) | 无 | | 参数 (out) | 无 | | 返回值 | `boolean` 状态 | | 描述 | 此函数测试设置为 1 的位数。如果此数字为偶数,则返回 TRUE;否则返回 FALSE。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00060] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x040 | `boolean Bfx_TstParityEven_u8_u8(uint8)` | | 0x041 | `boolean Bfx_TstParityEven_u16_u8(uint16)` | | 0x042 | `boolean Bfx_TstParityEven_u32_u8(uint32)` | | 0x043 | `boolean Bfx_TstParityEven_u64_u8(uint64)` | ⌋() #### 8.4.11 Bfx_ToggleBits [SWS_Bfx_00061] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_ToggleBits_` | | 语法 | `void Bfx_ToggleBits_(* Data)` | | 服务 ID[hex] | 0x46 to 0x48 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | 无 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数切换数据的所有位(1 的补码)。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00065] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x046 | `void Bfx_ToggleBits_u8(uint8*)` | | 0x047 | `void Bfx_ToggleBits_u16(uint16*)` | | 0x048 | `void Bfx_ToggleBits_u32(uint32*)` | | 0x049 | `void Bfx_ToggleBits_u64(uint64*)` | ⌋() #### 8.4.12 Bfx_ToggleBitMask [SWS_Bfx_00066] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_ToggleBitMask_` | | 语法 | `void Bfx_ToggleBitMask_(* Data, Mask)` | | 服务 ID[hex] | 0x4a to 0x4c | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Mask` 掩码 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 当掩码中相应的位启用并设置为 1 时,此函数切换数据的位。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00069] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x04A | `void Bfx_ToggleBitMask_u8u8(uint8*, uint8)` | | 0x04B | `void Bfx_ToggleBitMask_u16u16(uint16*, uint16)` | | 0x04C | `void Bfx_ToggleBitMask_u32u32(uint32*, uint32)` | | 0x04D | `void Bfx_ToggleBitMask_u64u64(uint64*, uint64)` | ⌋() #### 8.4.13 Bfx_ShiftBitRt [SWS_Bfx_00070] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_ShiftBitRt_u8` | | 语法 | `void Bfx_ShiftBitRt_u8(* Data, uint8 ShiftCnt)` | | 服务 ID[hex] | 0x50 to 0x52 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `ShiftCnt` 右移位数 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应将数据右移 ShiftCnt 位。最高有效位(最左位)由 '0' 位替换,最低有效位(最右位)在每个单次位移循环中被丢弃。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00075] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | ShiftCnt 最大值 | |--------------|----------|-----------------| | 0x050 | `void Bfx_ShiftBitRt_u8u8(uint8*, uint8)` | 7 | | 0x051 | `void Bfx_ShiftBitRt_u16u8(uint16*, uint8)` | 15 | | 0x052 | `void Bfx_ShiftBitRt_u32u8(uint32*, uint8)` | 31 | | 0x053 | `void Bfx_ShiftBitRt_u64u8(uint64*, uint8)` | 63 | ⌋() #### 8.4.14 Bfx_ShiftBitLt [SWS_Bfx_00076] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_ShiftBitLt_u8` | | 语法 | `void Bfx_ShiftBitLt_u8(* Data, uint8 ShiftCnt)` | | 服务 ID[hex] | 0x56 to 0x58 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `ShiftCnt` 左移位数 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应将数据左移 ShiftCnt 位。最低有效位(最右位)由 '0' 位替换,最高有效位(最左位)在每个单次位移循环中被丢弃。 | | 通过 | Bfx.h | ⌋ () [SWS_Bfx_00080] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | ShiftCnt 最大值 | |--------------|----------|-----------------| | 0x056 | `void Bfx_ShiftBitLt_u8u8(uint8*, uint8)` | 7 | | 0x057 | `void Bfx_ShiftBitLt_u16u8(uint16*, uint8)` | 15 | | 0x058 | `void Bfx_ShiftBitLt_u32u8(uint32*, uint8)` | 31 | | 0x059 | `void Bfx_ShiftBitLt_u64u8(uint64*, uint8)` | 63 | ⌋() #### 8.4.15 Bfx_RotBitRt [SWS_Bfx_00086] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_RotBitRt_u8` | | 语法 | `void Bfx_RotBitRt_u8(* Data, uint8 ShiftCnt)` | | 服务 ID[hex] | 0x5a to 0x5c | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `ShiftCnt` 移位次数 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应将数据右旋转 ShiftCnt 位。在每个单次位移循环中,最低有效位被循环到最高有效位位置。 | | 通过 | Bfx.h | ⌋ () **例如:** - 如果 `ShiftCnt = 1`,则: - `uint8 Data = 0001 0111`(右旋转前) - `Data = 1000 1011`(右旋转后) - 如果 `ShiftCnt = 3`,则: - `uint8 Data = 0001 0111`(右旋转前) - `Data = 1110 0010`(右旋转后) [SWS_Bfx_00090] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | ShiftCnt 最大值 | |--------------|----------|-----------------| | 0x05A | `void Bfx_RotBitRt_u8u8(uint8*, uint8)` | 7 | | 0x05B | `void Bfx_RotBitRt_u16u8(uint16*, uint8)` | 15 | | 0x05C | `void Bfx_RotBitRt_u32u8(uint32*, uint8)` | 31 | | 0x05D | `void Bfx_RotBitRt_u64u8(uint64*, uint8)` | 63 | ⌋() #### 8.4.16 Bfx_RotBitLt [SWS_Bfx_00095] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_RotBitLt_u8` | | 语法 | `void Bfx_RotBitLt_u8(* Data, uint8 ShiftCnt)` | | 服务 ID[hex] | 0x60 to 0x62 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `ShiftCnt` 移位次数 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应将数据左旋转 ShiftCnt 位。在每个单次位移循环中,最高有效位被循环到最低有效位位置。 | | 通过 | Bfx.h | ⌋ () **例如:** - 如果 `ShiftCnt = 1`,则: - `uint8 Data = 1011 0111`(左旋转前) - `Data = 0110 1111`(左旋转后) - 如果 `ShiftCnt = 3`,则: - `uint8 Data = 1011 0111`(左旋转前) - `Data = 1011 1101`(左旋转后) [SWS_Bfx_00098] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | ShiftCnt 最大值 | |--------------|----------|-----------------| | 0x060 | `void Bfx_RotBitLt_u8u8(uint8*, uint8)` | 7 | | 0x061 | `void Bfx_RotBitLt_u16u8(uint16*, uint8)` | 15 | | 0x062 | `void Bfx_RotBitLt_u32u8(uint32*, uint8)` | 31 | | 0x063 | `void Bfx_RotBitLt_u64u8(uint64*, uint8)` | 63 | ⌋() #### 8.4.17 Bfx_CopyBit [SWS_Bfx_00101] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_CopyBit_u8u8` | | 语法 | `void Bfx_CopyBit_u8u8(* DestinationData, uint8 DestinationPosition, SourceData, uint8 SourcePosition)` | | 服务 ID[hex] | 0x66 to 0x68 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `DestinationPosition` 目标位置;`SourceData` 源数据;`SourcePosition` 源位置 | | 参数 (in-out) | `DestinationData` 目标数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应将源数据中指定位位置的位复制到目标数据的指定位位置。 | | 通过 | Bfx.h | ⌋ () **例如:** ```c DestinationData = 10100001b BFX_CopyBit_u8u8u8u8(&DestinationData, 6, 11011010, 1) DestinationData 将变为 11100001b ``` [SWS_Bfx_00108] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | SourcePosition 和 DestinationPosition 最大值 | |--------------|----------|-----------------------------------------------| | 0x066 | `void Bfx_CopyBit_u8u8u8u8(uint8*, uint8, uint8, uint8)` | 7 | | 0x067 | `void Bfx_CopyBit_u16u8u16u8(uint16*, uint8, uint16, uint8)` | 15 | | 0x068 | `void Bfx_CopyBit_u32u8u32u8(uint32*, uint8, uint32, uint8)` | 31 | | 0x069 | `void Bfx_CopyBit_u64u8u64u8(uint64*, uint8, uint64, uint8)` | 63 | ⌋() #### 8.4.18 Bfx_PutBits [SWS_Bfx_00110] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_PutBits_u8u8` | | 语法 | `void Bfx_PutBits_u8u8(* Data, uint8 BitStartPn, uint8 BitLn, Pattern)` | | 服务 ID[hex] | 0x70 to 0x72 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `BitStartPn` 起始位位置;`BitLn` 位域长度;`Pattern` 要设置的模式 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应按照 Pattern 所述将位放入输入数据中,从指定位位置开始。 | | 通过 | Bfx.h | ⌋ () **例如:** ```c Data = 11110000b Bfx_PutBits_u8u8u8u8(&Data, 1, 3, 00000011b) Data 将变为 11110110b ``` [SWS_Bfx_00112] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitLn 最大值 | BitStartPn 最大值 | BitStartPn + BitLn 最大值 | |--------------|----------|--------------|-------------------|---------------------------| | 0x070 | `void Bfx_PutBits_u8u8u8u8(uint8*, uint8, uint8, uint8)` | 8 | 7 | 8 | | 0x071 | `void Bfx_PutBits_u16u8u8u16(uint16*, uint8, uint8, uint16)` | 16 | 15 | 16 | | 0x072 | `void Bfx_PutBits_u32u8u8u32(uint32*, uint8, uint8, uint32)` | 32 | 31 | 32 | | 0x073 | `void Bfx_PutBits_u64u8u8u64(uint64*, uint8, uint8, uint64)` | 64 | 63 | 64 | ⌋() #### 8.4.19 Bfx_PutBitsMask [SWS_Bfx_00120] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_PutBitsMask_` | | 语法 | `void Bfx_PutBitsMask_(* Data, Pattern, Mask)` | | 服务 ID[hex] | 0x80 to 0x82 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `Pattern` 要设置的模式;`Mask` 掩码值 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应将 Pattern 中定义且对应 Mask 位设置为 1 的所有位放入输入数据中。 | | 通过 | Bfx.h | ⌋ () **例如:** ```c Bfx_PutBitsMask_u8u8u8(11100000b, 11001101b, 00001111b) 结果为 *Data = 11101101b ``` [SWS_Bfx_00124] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | |--------------|----------| | 0x080 | `void Bfx_PutBitsMask_u8u8u8(uint8*, uint8, uint8)` | | 0x081 | `void Bfx_PutBitsMask_u16u16u16(uint16*, uint16, uint16)` | | 0x082 | `void Bfx_PutBitsMask_u32u32u32(uint32*, uint32, uint32)` | | 0x083 | `void Bfx_PutBitsMask_u64u64u64(uint64*, uint64, uint64)` | ⌋() #### 8.4.20 Bfx_PutBit [SWS_Bfx_00130] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_PutBit_u8u8` | | 语法 | `void Bfx_PutBit_u8u8(* Data, uint8 BitPn, boolean Status)` | | 服务 ID[hex] | 0x85 to 0x87 | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | `BitPn` 位位置;`Status` 状态值 | | 参数 (in-out) | `Data` 输入数据指针 | | 参数 (out) | 无 | | 返回值 | 无 | | 描述 | 此函数应根据 `Status` 值将输入数据中由 BitPn 指定的位更新为 '1' 或 '0'。 | | 通过 | Bfx.h | ⌋ () **例如:** ```c uint8 InputData = 11100111b; Bfx_PutBit_u8u8u8(&InputData, 4, TRUE); 结果为 InputData = 11110111b ``` [SWS_Bfx_00132] ⌈ 已实现函数列表: | 函数 ID[hex] | 函数原型 | BitPn 最大值 | |--------------|----------|--------------| | 0x085 | `void Bfx_PutBit_u8u8u8(uint8*, uint8, boolean)` | 7 | | 0x086 | `void Bfx_PutBit_u16u8u8(uint16*, uint8, boolean)` | 15 | | 0x087 | `void Bfx_PutBit_u32u8u8(uint32*, uint8, boolean)` | 31 | | 0x088 | `void Bfx_PutBit_u64u8u8(uint64*, uint8, boolean)` | 63 | ⌋() ### 8.5 回调通知 无。 ### 8.6 调度函数 Bfx 库没有调度函数。 ### 8.7 预期接口 无。 #### 8.7.1 强制接口 无。 #### 8.7.2 可选接口 无。 #### 8.7.3 可配置接口 无。 ### 8.8 版本 API #### 8.8.1 Bfx_GetVersionInfo [SWS_Bfx_00301] ⌈ | 项 | 内容 | |----|------| | 服务名称 | `Bfx_GetVersionInfo` | | 语法 | `void Bfx_GetVersionInfo(Std_VersionInfoType* Versioninfo)` | | 服务 ID[hex] | 0xff | | 同步/异步 | 同步 | | 可重入性 | 可重入 | | 参数 (in) | 无 | | 参数 (in-out) | 无 | | 参数 (out) | `Versioninfo` 指向存储此模块版本信息的位置。格式符合 [BSW00321]。 | | 返回值 | 无 | | 描述 | 返回此库的版本信息。 | | 通过 | Bfx.h | ⌋ () BSW 模块的版本信息通常包含: - Module Id(模块 ID) - Vendor Id(供应商 ID) - Vendor specific version numbers(供应商特定版本号) [SWS_Bfx_00302] ⌈ 如果 Bfx_GetVersionInfo 的调用方和被调用方的源代码都可用,Bfx 库应将 Bfx_GetVersionInfo 实现为模块头文件中定义的宏。 ⌋( SRS_BSW_00407, SRS_BSW_00411) ## 9 时序图 不适用。 ## 10 配置规范 ### 10.1 发布信息 [SWS_Bfx_00133] ⌈ 如 [3] 中 SRS_BSW_00402 要求的标准化通用发布参数,应在本模块的头文件中发布,并需要在 BSW 模块描述中提供。相应的模块缩写可在 [1] 基本软件模块列表中找到。 ⌋() 其他模块特定的发布参数(如果适用)将在下面列出。 ### 10.2 配置选项 [SWS_Bfx_00314] ⌈ Bfx 库不应具有任何可能影响例程功能行为的配置选项。即对于给定的输入参数集合,输出应始终相同。例如,出错时返回的值不应可配置。 ⌋(SRS_LIBS_00001) 但是,库供应商被允许添加与库实现相关的特定配置选项,例如用于资源消耗优化。 ## 11 不适用的需求 [SWS_Bfx_00999] ⌈ 这些需求不适用于本规范。 ⌋ (SRS_BSW_00448) --- ## 翻译说明 1. 本文档为 AUTOSAR CP Release 4.4.0 的 BFX 库软件规范(SWS)。 2. 所有 API 标识符(如 `Bfx_SetBit_u8u8`、`Bfx_GetBit_u32u8_u8` 等)保留英文原名。 3. 数据类型(`uint8`、`uint16`、`uint32`、`sint8`、`sint16`、`sint32`、`boolean`)保留英文原名。 4. 需求 ID(如 `SWS_Bfx_00001`)保留原样。 5. 章节中包含的所有 C 代码片段按原文翻译并保留格式。 6. AUTOSAR 方框符 `⌈⌋` 已保留。 7. 本文档所有 20 个位函数(Bfx_SetBit 至 Bfx_PutBit)均已完整翻译。