Files
autosar_standard_spec_v4.4/Libraries/AUTOSAR_SWS_BFXLibrary.md
T

1141 lines
39 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_<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] ⌈ 预期功能:
```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_<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] ⌈ 预期功能:
```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_<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] ⌈
```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_<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 >
```
**例如:**
```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_<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 >
```
**例如:**
```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_<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] ⌈ 预期功能:
```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_<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',其余位保持原值。预期功能:
```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_<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] ⌈
```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_<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 |
⌋ ()
**例如:**
```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_<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 |
⌋ ()
**例如:**
```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_<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 |
⌋ ()
**例如:**
```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_<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 |
⌋ ()
**例如:**
```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)均已完整翻译。