Files
autosar_standard_spec_v4.4/Libraries/AUTOSAR_SWS_BFXLibrary.md
T

39 KiB
Raw Blame History

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. 引言与功能概述
  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

图:分层架构

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.cBfx_get.c
  • 2.2 按例程族分组:例如 Bfx_bit8.cBfx_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。minVersionmaxVersion 参数对应于供应商版本。对于 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)


翻译说明

  1. 本文档为 AUTOSAR CP Release 4.4.0 的 BFX 库软件规范(SWS)。
  2. 所有 API 标识符(如 Bfx_SetBit_u8u8Bfx_GetBit_u32u8_u8 等)保留英文原名。
  3. 数据类型(uint8uint16uint32sint8sint16sint32boolean)保留英文原名。
  4. 需求 ID(如 SWS_Bfx_00001)保留原样。
  5. 章节中包含的所有 C 代码片段按原文翻译并保留格式。
  6. AUTOSAR 方框符 ⌈⌋ 已保留。
  7. 本文档所有 20 个位函数(Bfx_SetBit 至 Bfx_PutBit)均已完整翻译。