39 KiB
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 引言与功能概述
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_<name>.c用于实现库。所有 C 文件应以Bfx为前缀。 - 头文件
Bfx.h提供由 BFX 库规范定义的所有公共函数原型和类型。 ⌋(SRS_LIBS_00005)
[SWS_Bfx_00222] ⌈ 库例程的实现和分组(相对于 C 文件)应按以下选项之一进行。⌋()
选项 1:<Name> 可以是函数名,每个函数一个 C 文件。
例如:Bfx_setbit.c 等。
选项 2:<Name> 可以是函数组的通用名称:
- 2.1 按对象族分组:例如
Bfx_set.c、Bfx_get.c - 2.2 按例程族分组:例如
Bfx_bit8.c、Bfx_bit16.c等 - 2.3 按其他方式分组:(允许自定义分组)
选项 3:可以省略 <Name>,使单个 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:基本类型范围
作为本文档其余部分的约定:
- 助记符将用于例程名称中(使用
<InTypeMn1>表示输入 1 的类型助记符) - 实际类型将用于例程原型的描述中(使用
<InType>或<OutType>)。
本文档的位寻址规则:
- 最低有效位(LSB)的位位置定义为 0(零)
- 位域长度定义为位的数量
8.2 类型定义
无。
8.3 关于目标优化的函数说明
本规范中描述的函数可作为常规函数或内联函数(inline)实现。
8.4 位函数定义
8.4.1 Bfx_SetBit
[SWS_Bfx_00001] ⌈
| 项 | 内容 |
|---|---|
| 服务名称 | Bfx_SetBit_<TypeMn>u8 |
| 语法 | void Bfx_SetBit_<TypeMn>u8(<Type>* Data, uint8 BitPn) |
| 服务 ID[hex] | 0x01 to 0x03 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | BitPn 位位置 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应在请求的位位置将输入数据的逻辑状态设置为 '1'。 |
| 通过 | Bfx.h |
⌋ ()
[SWS_Bfx_00002] ⌈ 预期功能:
*Data = *Data | (0x01 << BitPn)
例如:
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_<TypeMn>u8 |
| 语法 | void Bfx_ClrBit_<TypeMn>u8(<Type>* Data, uint8 BitPn) |
| 服务 ID[hex] | 0x06 to 0x08 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | BitPn 位位置 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应在请求的位位置将输入数据的逻辑状态清除为 '0'。 |
| 通过 | Bfx.h |
⌋ ()
[SWS_Bfx_00011] ⌈ 预期功能:
*Data = (*Data & ~(0x01 << BitPn))
例如:
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_<InTypeMn>u8_u8 |
| 语法 | boolean Bfx_GetBit_<InTypeMn>u8_u8(<InType> Data, uint8 BitPn) |
| 服务 ID[hex] | 0x0a to 0x0c |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | Data 输入数据;BitPn 位位置 |
| 参数 (in-out) | 无 |
| 参数 (out) | 无 |
| 返回值 | boolean 位状态 |
| 描述 | 此函数应返回请求位位置上输入数据的逻辑状态。 |
| 通过 | Bfx.h |
⌋ ()
[SWS_Bfx_00017] ⌈
Result = TRUE, ((Data & (0x01 << BitPn)) != 0)
Result = FALSE, 其他情况
例如:
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_<TypeMn>u8u8u8 |
| 语法 | void Bfx_SetBits_<TypeMn>u8u8u8(<Type>* 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
<BitStartPn>
< BitLn >
例如:
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_<TypeMn>u8u8_<TypeMn> |
| 语法 | <Type> Bfx_GetBits_<TypeMn>u8u8_<TypeMn>(<Type> Data, uint8 BitStartPn, uint8 BitLn) |
| 服务 ID[hex] | 0x26 to 0x28 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | Data 输入数据;BitStartPn 起始位位置;BitLn 位域长度 |
| 参数 (in-out) | 无 |
| 参数 (out) | 无 |
| 返回值 | <Type> 位域序列 |
| 描述 | 此函数应返回输入数据从 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 >
例如:
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_<TypeMn><TypeMn> |
| 语法 | void Bfx_SetBitMask_<TypeMn><TypeMn>(<Type>* Data, <Type> Mask) |
| 服务 ID[hex] | 0x2a to 0x2c |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | Mask 用于设置位的掩码 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应根据掩码中相应位为 1 时将数据设置为逻辑状态 '1',其余位保持原值。 |
| 通过 | Bfx.h |
⌋ ()
[SWS_Bfx_00036] ⌈ 预期功能:
*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_<TypeMn><TypeMn> |
| 语法 | void Bfx_ClrBitMask_<TypeMn><TypeMn>(<Type>* Data, <Type> Mask) |
| 服务 ID[hex] | 0x30 to 0x32 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | Mask 掩码值 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应根据掩码将输入数据所有相应位的逻辑状态清除为 '0'。 |
| 通过 | Bfx.h |
⌋ ()
[SWS_Bfx_00040] ⌈ 此函数应根据相应掩码位为 1 时将数据清除为逻辑状态 '0',其余位保持原值。预期功能:
*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_<InTypeMn><InTypeMn>_u8 |
| 语法 | boolean Bfx_TstBitMask_<InTypeMn><InTypeMn>_u8(<InType> Data, <InType> Mask) |
| 服务 ID[hex] | 0x36 to 0x38 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | Data 输入数据;Mask 掩码值 |
| 参数 (in-out) | 无 |
| 参数 (out) | 无 |
| 返回值 | boolean 值 |
| 描述 | 如果输入数据 Data 中 Mask 值所定义的所有位均被设置,则此函数应返回 TRUE。其他所有情况下,此函数应返回 FALSE。 |
| 通过 | Bfx.h |
⌋ ()
[SWS_Bfx_00047] ⌈
Result = TRUE, ((Data & Mask) == Mask)
Result = FALSE, 其他所有情况
例如:
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_<InTypeMn><InTypeMn>_u8 |
| 语法 | boolean Bfx_TstBitLnMask_<InTypeMn><InTypeMn>_u8(<InType> Data, <InType> 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_<InTypeMn>_u8 |
| 语法 | boolean Bfx_TstParityEven_<InTypeMn>_u8(<InTypeMn> 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_<TypeMn> |
| 语法 | void Bfx_ToggleBits_<TypeMn>(<Type>* 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_<TypeMn><TypeMn> |
| 语法 | void Bfx_ToggleBitMask_<TypeMn><TypeMn>(<Type>* Data, <Type> 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_<TypeMn>u8 |
| 语法 | void Bfx_ShiftBitRt_<TypeMn>u8(<Type>* 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_<TypeMn>u8 |
| 语法 | void Bfx_ShiftBitLt_<TypeMn>u8(<Type>* 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_<TypeMn>u8 |
| 语法 | void Bfx_RotBitRt_<TypeMn>u8(<Type>* 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_<TypeMn>u8 |
| 语法 | void Bfx_RotBitLt_<TypeMn>u8(<Type>* 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_<TypeMn>u8<TypeMn>u8 |
| 语法 | void Bfx_CopyBit_<TypeMn>u8<TypeMn>u8(<Type>* DestinationData, uint8 DestinationPosition, <Type> SourceData, uint8 SourcePosition) |
| 服务 ID[hex] | 0x66 to 0x68 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | DestinationPosition 目标位置;SourceData 源数据;SourcePosition 源位置 |
| 参数 (in-out) | DestinationData 目标数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应将源数据中指定位位置的位复制到目标数据的指定位位置。 |
| 通过 | Bfx.h |
⌋ ()
例如:
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_<TypeMn>u8u8<TypeMn> |
| 语法 | void Bfx_PutBits_<TypeMn>u8u8<TypeMn>(<Type>* Data, uint8 BitStartPn, uint8 BitLn, <Type> Pattern) |
| 服务 ID[hex] | 0x70 to 0x72 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | BitStartPn 起始位位置;BitLn 位域长度;Pattern 要设置的模式 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应按照 Pattern 所述将位放入输入数据中,从指定位位置开始。 |
| 通过 | Bfx.h |
⌋ ()
例如:
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_<TypeMn><TypeMn><TypeMn> |
| 语法 | void Bfx_PutBitsMask_<TypeMn><TypeMn><TypeMn>(<Type>* Data, <Type> Pattern, <Type> Mask) |
| 服务 ID[hex] | 0x80 to 0x82 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | Pattern 要设置的模式;Mask 掩码值 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应将 Pattern 中定义且对应 Mask 位设置为 1 的所有位放入输入数据中。 |
| 通过 | Bfx.h |
⌋ ()
例如:
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_<TypeMn>u8u8 |
| 语法 | void Bfx_PutBit_<TypeMn>u8u8(<Type>* Data, uint8 BitPn, boolean Status) |
| 服务 ID[hex] | 0x85 to 0x87 |
| 同步/异步 | 同步 |
| 可重入性 | 可重入 |
| 参数 (in) | BitPn 位位置;Status 状态值 |
| 参数 (in-out) | Data 输入数据指针 |
| 参数 (out) | 无 |
| 返回值 | 无 |
| 描述 | 此函数应根据 Status 值将输入数据中由 BitPn 指定的位更新为 '1' 或 '0'。 |
| 通过 | Bfx.h |
⌋ ()
例如:
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)
翻译说明
- 本文档为 AUTOSAR CP Release 4.4.0 的 BFX 库软件规范(SWS)。
- 所有 API 标识符(如
Bfx_SetBit_u8u8、Bfx_GetBit_u32u8_u8等)保留英文原名。 - 数据类型(
uint8、uint16、uint32、sint8、sint16、sint32、boolean)保留英文原名。 - 需求 ID(如
SWS_Bfx_00001)保留原样。 - 章节中包含的所有 C 代码片段按原文翻译并保留格式。
- AUTOSAR 方框符
⌈⌋已保留。 - 本文档所有 20 个位函数(Bfx_SetBit 至 Bfx_PutBit)均已完整翻译。