422 lines
26 KiB
Markdown
422 lines
26 KiB
Markdown
# SRS_Libraries — 库需求规范
|
||
|
||
| 文档元信息 | 值 |
|
||
|------------|------|
|
||
| 文档标题 | Requirements on Libraries(库需求) |
|
||
| 文档所有者 | AUTOSAR |
|
||
| 文档责任方 | AUTOSAR |
|
||
| 文档标识号 | 314 |
|
||
| 文档状态 | Final(最终版) |
|
||
| 所属 AUTOSAR 标准 | Classic Platform(经典平台) |
|
||
| 所属标准发布版本 | 4.4.0 |
|
||
| 发布版本 | AUTOSAR CP Release 4.4.0 |
|
||
|
||
## 文档变更历史
|
||
|
||
| 日期 | 发布版本 | 变更人 | 变更说明 |
|
||
|------|----------|--------|----------|
|
||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 编辑性修改 |
|
||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 编辑性修改 |
|
||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 移除需求 SRS_LIBS_00006;添加需求追踪章节;添加有关 64 位 CRC 的详细信息 |
|
||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 移除"5.1.7"章节;为 CRC 库添加多项式 |
|
||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性修改;缩小 SRS_LIBS_08535 的范围:仅提供当前元素 |
|
||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 正式修订需求追踪;修复不一致的需求表;根据 TPS 标准化模板进行正式更新;将 SRS 需求链接到新功能文档 |
|
||
| 2011-12-22 | 4.0.3 | AUTOSAR Administration | 更正拼写错误:使用 E2E 代替 E2e(第 1 章第 6 页) |
|
||
| 2010-09-30 | 3.1.5 | AUTOSAR Administration | 扩大初始文档范围为一般库需求;引入错误处理;引入 E2E profile;修订法律免责声明 |
|
||
| 2008-08-13 | 3.1.1 | AUTOSAR Administration | 修订法律免责声明;从"Requirements on CRC Routines"重命名为"Requirements on Libraries" |
|
||
| 2007-12-21 | 3.0.1 | AUTOSAR Administration | 初始发布:从"Requirements on Memory Services"中分离出来 |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [文档范围](#1-文档范围)
|
||
2. [使用的约定](#2-使用的约定)
|
||
3. [缩略语与缩写](#3-缩略语与缩写)
|
||
4. [功能概述](#4-功能概述)
|
||
- 4.1 [CRC 库](#41-crc-库)
|
||
- 4.2 [SW-C 端到端通信保护库](#42-sw-c-端到端通信保护库)
|
||
5. [需求追踪](#5-需求追踪)
|
||
6. [需求规范](#6-需求规范)
|
||
- 6.1 [功能需求](#61-功能需求)
|
||
- 6.2 [非功能需求](#62-非功能需求)
|
||
7. [参考文献](#7-参考文献)
|
||
|
||
---
|
||
|
||
## 1 文档范围
|
||
|
||
本文档规定了对 AUTOSAR 库的需求。它适用于 AUTOSAR 规定的所有库:
|
||
|
||
| 库简称 | 描述 |
|
||
|--------|------|
|
||
| **Mfx** | Mathematical FiXed point calculations(数学定点计算库) |
|
||
| **Mfl** | Mathematical FLoating point calculations(数学浮点计算库) |
|
||
| **Ifx** | Interpolation functions of FiXed point(定点插值函数库) |
|
||
| **Ifl** | Interpolation functions of FLoating point(浮点插值函数库) |
|
||
| **Bfx** | Bit handling(位处理库) |
|
||
| **Efx** | Extended functions on Fixed point(定点扩展函数库) |
|
||
| **Crc** | CRC routines(CRC 例程库) |
|
||
| **E2E** | SW-C End-to-End Communication Protection Library(SW-C 端到端通信保护库) |
|
||
|
||
每个库都有其独立的 SWS,但本 SRS 文档适用于所有库。
|
||
|
||
对所有实现而言,遵循所有需求是强制性的。"可配置"也意味着该需求必须被满足,但此类功能如果不需要在 ECU(BSW 或 SW-C)中使用,则可以被禁用。
|
||
|
||
本文档最初专用于 CRC 例程。为了保持可追溯性,CRC 需求仍然存在,但在专门的章节中。
|
||
|
||
## 2 使用的约定
|
||
|
||
- AUTOSAR 文档中的需求表示遵循 [TPS_STDT_00078] 中指定的表。
|
||
|
||
- 在需求中,应使用以下特定语义(基于互联网工程任务组 IETF):
|
||
|
||
本文档中的关键词 "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY" 和 "OPTIONAL" 应解释为:
|
||
|
||
- **SHALL**:该词表示该定义是规范的绝对要求。
|
||
- **SHALL NOT**:该短语表示该定义是规范的绝对禁止。
|
||
- **MUST**:该词表示由于法律原因该定义是规范的绝对要求。
|
||
- **MUST NOT**:该短语表示由于法律约束该定义是规范的绝对禁止。
|
||
- **SHOULD**:该词或形容词 "RECOMMENDED" 表示在特定情况下可能存在有效理由忽略特定项目,但在选择不同方案之前必须充分理解并仔细权衡其影响。
|
||
- **SHOULD NOT**:该短语或短语 "NOT RECOMMENDED" 表示在特定情况下特定行为可能是可接受的或甚至有用,但在实现任何以此标签描述的行为之前,应充分理解其影响并仔细权衡该情况。
|
||
- **MAY**:该词或形容词 "OPTIONAL" 表示某项是真正可选的。一个供应商可能选择包含该项目,因为特定市场需要它,或者因为供应商认为它增强了产品,而另一个供应商可能省略同一项。不包含特定选项的实现必须准备好与包含该选项的另一实现互操作(但可能功能降低)。同样,包含特定选项的实现必须准备好与不包含该选项的另一实现互操作(当然,该选项提供的功能除外)。
|
||
|
||
## 3 缩略语与缩写
|
||
|
||
本文档中使用的所有技术术语(除下表所列之外)都可以在官方 AUTOSAR 词汇表 [] 中找到。
|
||
|
||
具有局部范围、因此未包含在 AUTOSAR 词汇表中的缩略语和缩写出现在下面的词汇表中。
|
||
|
||
| 缩写 | 描述 |
|
||
|------|------|
|
||
| **API** | Application Programming Interface(应用程序编程接口)。首选术语是"function"(函数)。 |
|
||
| **AR** | 缩写,用于代替 AUTOSAR |
|
||
| **AR_** | (前缀) |
|
||
| **BFX** | Library of Bit handling(位处理库) |
|
||
| **CRC** | Cyclic Redundancy check(循环冗余校验) |
|
||
| **DET** | Default Error Tracer(默认错误追踪器) |
|
||
| **E2E** | End to End(端到端) |
|
||
| **EcuM** | ECU Manager(ECU 管理器) |
|
||
| **EFX** | Extended function on Fixed point(定点扩展函数) |
|
||
| **IFL** | Interpolation functions of FLoating point(浮点插值函数) |
|
||
| **IFX** | Interpolation functions of FiXed point(定点插值函数) |
|
||
| **Library** | 可从任何模块(BSW 模块或 SW-C)调用的 API(即函数)集 |
|
||
| **MFL** | Mathematical FLoating point calculation(数学浮点计算) |
|
||
| **MFX** | Mathematical FiXed point calculation(数学定点计算) |
|
||
| **OS** | Operating System(操作系统) |
|
||
|
||
## 4 功能概述
|
||
|
||
AUTOSAR 库为其他 BSW 模块和应用 SW-C 提供数学服务。
|
||
|
||
这些库提供可从源代码调用的 C 函数,即从 BSW 模块、SW-C、RTE 或复杂驱动程序中调用。
|
||
|
||
### 4.1 CRC 库
|
||
|
||
CRC 库提供用于 8 位、16 位、32 位和 64 位 CRC(循环冗余校验)计算的函数。CRC 库可在以下方面进行缩放:
|
||
|
||
- 基于表的计算(快速,但代码大小较大)
|
||
- 运行时计算(较慢,但代码大小较小)
|
||
- 不同的标准 CRC 生成多项式
|
||
|
||
汽车微控制器已经支持硬件支持的 CRC 计算。
|
||
|
||
### 4.2 SW-C 端到端通信保护库
|
||
|
||
SW-C 端到端通信保护库(简称:E2E 库)提供用于检测安全相关 SW-C 之间(安全相关)通信中错误的功能。保护是通过保护 SW-C 之间交换的安全相关数据元素来实现的,并且保护/检查信号的责任在于直接调用 E2E 库的 SW-C(应用程序)。该库应可在 SW-C 间通信使用的任何通信堆栈上工作,目前包括 FlexRay、CAN 和 LIN。将来,当添加更多通信堆栈时,可能需要添加更多 E2E profile。
|
||
|
||
## 5 需求追踪
|
||
|
||
| 需求 | 描述 | 由以下需求满足 |
|
||
|------|------|----------------|
|
||
| RS_BRF_01024 | AUTOSAR 应提供公共符号的命名规则。 | SRS_LIBS_00011 |
|
||
| RS_BRF_01128 | AUTOSAR 应允许在所有 BSW 模块初始化之前启动软件组件。 | SRS_LIBS_00002 |
|
||
| RS_BRF_01192 | AUTOSAR 应记录使用 RTE 和 BSW 时存在的所有架构约束。 | SRS_LIBS_00007 |
|
||
| RS_BRF_01240 | AUTOSAR OS 应支持 OSApplications 之间的通信。 | SRS_LIBS_00003 |
|
||
| RS_BRF_01440 | AUTOSAR 服务应支持系统诊断功能。 | SRS_LIBS_00013 |
|
||
| RS_BRF_02072 | AUTOSAR 应提供在汽车领域广泛使用的通用功能作为库。 | SRS_LIBS_00015 |
|
||
| RS_BRF_02080 | AUTOSAR 库应使用 C 接口。 | SRS_LIBS_00001, SRS_LIBS_00004, SRS_LIBS_00005, SRS_LIBS_00012 |
|
||
| RS_BRF_02088 | AUTOSAR 库功能应是可重入的。 | SRS_LIBS_00003, SRS_LIBS_00009 |
|
||
| RS_BRF_02096 | AUTOSAR 应提供循环冗余校验和的校验和计算作为库。 | SRS_LIBS_00008, SRS_LIBS_00016, SRS_LIBS_08518, SRS_LIBS_08521, SRS_LIBS_08525, SRS_LIBS_08526 |
|
||
|
||
## 6 需求规范
|
||
|
||
### 6.1 功能需求
|
||
|
||
#### 6.1.1 配置
|
||
|
||
**6.1.1.1 [SRS_LIBS_00001] 每个库函数的功能行为不应可配置**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 库函数的功能行为不应可配置。对于某些给定的输入(C 函数参数),函数应始终返回与函数规范中定义的相同输出。但是,内部行为可以是可配置的。例如:选择资源消耗策略,如优先考虑 CPU/RAM/ROM。但这是特定于实现的,AUTOSAR 未对其进行标准化。 |
|
||
| **Rationale(理由)** | 使用库函数的 SW-C 期望确定性和标准化的行为。如果 SW 集成商有可能配置和更改行为,则 SW-C 可能会产生意外反应。 |
|
||
| **Use Case(用例)** | 除法函数。在除以零的情况下,函数应始终返回相同的值。如果 SW 集成商有可能配置此返回值,则对于某些 SW-C 可能是正确的,但对于其他 SW-C 可能是灾难性的。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | (RS_BRF_02080) |
|
||
|
||
**6.1.1.2 [SRS_LIBS_00015] 应可以配置微控制器,使库代码在所有调用者之间共享**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 如果在给定的微控制器上启用了内存分区,则应可以配置微控制器,使库代码在共享库的所有调用者之间共享。 |
|
||
| **Rationale(理由)** | 这样可以减少 Flash 内存消耗。 |
|
||
| **Use Case(用例)** | 在分区系统中,不同分区中的 SW-C 访问同一个库。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02072) |
|
||
|
||
#### 6.1.2 初始化
|
||
|
||
**6.1.2.1 [SRS_LIBS_00002] 库应在所有 BSW 模块和应用 SW-C 之前可用**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | -- |
|
||
| **Rationale(理由)** | 库函数可在 ECU 初始化的最开始被调用,例如甚至可由 OS 或 EcuM 调用,因此库应就绪。 |
|
||
| **Use Case(用例)** | AUTOSAR OS 初始化可能调用位处理函数。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_01128) |
|
||
|
||
#### 6.1.3 正常运行
|
||
|
||
**6.1.3.1 [SRS_LIBS_00004] 库的使用不应通过端口接口**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | SW-C 应直接调用库函数,而无需通过端口 RTE 接口。要访问库 API,SW-C 应直接包含库头文件。 |
|
||
| **Rationale(理由)** | SW 开发人员应能自由地使用库,而不必更改 SW-C 接口描述:减少工作量和不一致性。端口+RTE 机制对于库调用不是必需的:无一致性检查、无队列、无 ECU 外部通信等。<br>- 使用库函数是软件设计人员的决定。它与实现相关,与 SW-C 接口无关。<br>- 调用库函数是一个基本操作。它不像客户端/服务器操作。<br>- 因为库函数经常被使用,所以应以高效方式调用。<br>因此,可以直接从源代码(例如 runnables)调用函数,而无需使用 RTE API。 |
|
||
| **Use Case(用例)** | 应用程序包含浮点算术库头文件,并在控制循环计算中调用浮点例程,无需通过 RTE。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02080) |
|
||
|
||
**6.1.3.2 [SRS_LIBS_00005] 每个库应提供一个具有其公共接口的头文件**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 每个库应提供一个具有其公共接口的头文件。此头文件应声明由库规范定义的所有公共函数原型和类型。头文件应按以下方式命名:`<library short name>.h` |
|
||
| **Rationale(理由)** | 访问函数原型和类型;标准化头文件名称。 |
|
||
| **Use Case(用例)** | `#include "AR_MFX.h"` |
|
||
| **Dependencies(依赖)** | [SRS_LIBS_00004] |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02080) |
|
||
|
||
**6.1.3.3 [SRS_LIBS_00009] 所有库函数都应可重入**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 所有库函数都应可重入,这意味着它们应能够处理多个并发的、交错的和/或并发的请求。为了使函数可重入,它(1)不应调用任何不可重入的函数,(2)不应写入任何全局或静态变量。如果应处理某些类型的数据,调用者必须创建(定义)它们并将它们作为函数参数传递。<br>库函数仅在调用者的上下文中、调用它的内核上、在同一保护环境中运行。<br>库函数只能调用库函数。<br>库函数是同步的,例如它没有等待点。 |
|
||
| **Rationale(理由)** | 避免导致效率低下的机制。 |
|
||
| **Use Case(用例)** | 多任务环境;每个 BSW 模块和 SW-C 将在不同任务中使用相同的函数。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02088) |
|
||
|
||
**6.1.3.4 [SRS_LIBS_00010] 仅当 AUTOSAR 尚未定义时,库才应在库头文件中定义其自己的特定类型**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 仅当 AUTOSAR 尚未在 `std_types.h` 和 `platform_types.h` 中定义时,库才应在库头文件中定义(typedef)其自己的特定类型。这些类型应在相应的 SWS 中通过名称和描述标识,但不标识实际实现。在公共库接口的实现中不允许新的特定于实现的类型,即 SWS 中未指定的其他类型不应存在。实现(typedef)可以不同,例如根据平台。调用者不应依赖于任何实现。对这些特定类型使用 C 运算符是禁止的。 |
|
||
| **Rationale(理由)** | 库可能处理 AUTOSAR 未定义的某些特定类型。为了确保代码可移植性,独立于任何特定 AUTOSAR 库实现,只允许 SWS 指定的类型。 |
|
||
| **Use Case(用例)** | 用于 64 位数据数学库的类型 u64、S64。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | () |
|
||
|
||
**6.1.3.5 [SRS_LIBS_00011] 所有函数名和类型名应以 "Library short name_" 开头**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 所有函数名和类型名应以 "Library short name_" 开头。 |
|
||
| **Rationale(理由)** | 避免与现有库冲突;在代码中快速识别 AUTOSAR 库调用。 |
|
||
| **Use Case(用例)** | -- |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_01024) |
|
||
|
||
**6.1.3.6 [SRS_LIBS_00012] 应允许使用结构传递参数**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Rationale(理由)** | 函数调用变得更简单。如果需要一组固定参数,可以在结构中定义一次并多次使用。在某些情况下,将多个函数参数分组成一个或几个结构是有意义的:<br>- 当有许多参数时;<br>- 当某些参数可以按功能分组时。 |
|
||
| **Use Case(用例)** | ```c<br>sint16 EFX_PGOV_WIN(sint32 X, sint32 Kp, sint32 KpPos, sint32 KpNeg, sint32 WinPos, sint32 WinNeg);<br>sint16 EFX_PGOV_WIN(sint32 X, const PWin_Type * Struct);<br>``` |
|
||
| **Dependencies(依赖)** | [SRS_LIBS_00008]:如果将参数添加到结构中,则应定义新的结构名称和新的函数名称。因此在库演进时不存在遗漏新结构字段的风险。 |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02080) |
|
||
|
||
#### 6.1.4 关闭操作
|
||
|
||
**6.1.4.1 [SRS_LIBS_00003] 库应在关闭之前保持可用**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 库应在关闭之前保持可用。库不需要关闭操作阶段。如果需要关闭操作阶段,则应发生在所有 AUTOSAR BSW 模块关闭操作之后。 |
|
||
| **Rationale(理由)** | 库函数可在 ECU 关闭的最晚步骤调用,例如甚至由 OS 调用,因此库应一直就绪到结束。 |
|
||
| **Use Case(用例)** | AUTOSAR OS 关闭操作可能调用位处理函数。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_01240, RS_BRF_02088) |
|
||
|
||
#### 6.1.5 故障操作
|
||
|
||
**6.1.5.1 [SRS_LIBS_00013] 由运行时输入参数值检查产生的错误情况应在 SWS 中列出**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 函数应在运行时(无论在生产代码还是开发代码中)检查输入参数的值,特别是当错误值可能导致致命错误或不可预测结果的情况,前提是这些值在函数规范允许的范围内。所有错误情况应在 SWS 中列出,并且函数应返回 SWS 中规定的不可配置的值。该值取决于具体的函数和错误情况,因此逐个确定。 |
|
||
| **Rationale(理由)** | 避免致命错误;提供标准化行为。 |
|
||
| **Use Case(用例)** | 除以零、负数的平方根、超出范围、上溢、下溢等。 |
|
||
| **Dependencies(依赖)** | [SRS_LIBS_00001] |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_01440) |
|
||
|
||
#### 6.1.6 CRC 库
|
||
|
||
**6.1.6.1 [SRS_LIBS_08525] CRC 库应支持标准生成多项式**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | CRC 库应支持以下生成多项式:<br>- CRC 8-bit SAE-J850 (0x1D)<br>- CRC 16-bit CRC-CCITT<br>- CRC 32-bit Ethernet IEEE-802 (0x04C11DB7)<br>- CRC 32-bit 0xF4ACFB13<br>- CRC 64-bit ECMA 0x42F0E1EBA9EA3693 |
|
||
| **Rationale(理由)** | 这些多项式被认为是标准的。 |
|
||
| **Use Case(用例)** | - CRC 8-bit:检测 CAN/LIN/FlexRay 通信中的错误/不一致数据<br>- CRC 16-bit 和 32-bit:检测 NVRAM/RAM 和 FlexRay/Ethernet 通信中的错误/不一致数据<br>- CRC 64-bit:检测 NVRAM/RAM 和以太网/无线通信中的错误/不一致数据 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02096) |
|
||
|
||
### 6.2 非功能需求
|
||
|
||
#### 6.2.1 通用
|
||
|
||
**6.2.1.1 [SRS_LIBS_08518] CRC 库应提供不同的计算方法,优化性能或内存使用**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | CRC 库应提供不同的计算方法(算法),优化性能或内存使用(例如,用于运行时计算)。 |
|
||
| **Rationale(理由)** | 允许根据特定 ECU 要求优化代码大小或执行时间。 |
|
||
| **Use Case(用例)** | -- |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02096) |
|
||
|
||
**6.2.1.2 [SRS_LIBS_08526] CRC 库应支持当前的 CRC 计算标准**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | CRC 库应支持当前的 CRC 计算标准:<br>- 基于表<br>- 运行时计算<br>- 基于硬件(将来可能支持) |
|
||
| **Rationale(理由)** | 允许根据特定 ECU 要求优化代码大小或执行时间。 |
|
||
| **Use Case(用例)** | -- |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02096) |
|
||
|
||
**6.2.1.3 [SRS_LIBS_08521] 所有 CRC 例程应允许对大数据块进行逐步计算**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 所有 CRC 例程应允许对通过起始地址、长度和起始值传递的大数据块进行逐步计算。 |
|
||
| **Rationale(理由)** | 在不阻塞整个系统的情况下对大数据块进行 CRC 计算。 |
|
||
| **Use Case(用例)** | 应执行 4k ROM 数据块的 CRC 计算。如果 CRC 例程在一次调用中计算整个块,看门狗将不再被触发并导致复位。因此,计算必须分多个步骤完成(例如 16 字节一步)。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02096) |
|
||
|
||
#### 6.2.2 CRC 库
|
||
|
||
##### 6.2.2.1 兼容性
|
||
|
||
**6.2.2.1.1 [SRS_LIBS_00008] 对于给定的函数原型名称,一旦成为 AUTOSAR 最终发布版本的一部分,行为和参数不应再演进**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 对于给定的函数原型名称,一旦成为 AUTOSAR 最终发布版本的一部分,行为和参数不应再演进。出于任何原因,如果行为规范必须在 AUTOSAR 发布 N+1 中更改,例如 WP LIBRARIES 决定新功能,或必须从规范中添加/删除/修改参数/类型,并且库实现可能已经在生产中,则应创建新的函数原型。之前的(AUTOSAR 发布 N)应保持不变。<br>如果 SWS 中指定了类型实现,则如果此实现发生更改,应创建新的类型名称和 API 名称,并保留先前的名称。<br>如果 SWS 中未定义类型实现,则库开发人员可以自由更改实现而无需创建新类型名称。 |
|
||
| **Rationale(理由)** | 避免在库演进时重新开发 SW-C。避免在 SW-C 不需要新功能时集成新库版本。如果集成商必须添加依赖不同库(AUTOSAR 规范)版本的不同 SW-C,他可以(必须)购买最新的库版本,因为已确保向上兼容性。 |
|
||
| **Use Case(用例)** | 在一个项目中,集成商使用与 AR4.0 兼容的库,以及使用此库的 SW-C。在下一个 V 周期中,集成与 AR4.1 兼容的新库版本。借助向上兼容性规则,确保 SW-C 将以相同方式做出反应,即使添加了新功能。 |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02096) |
|
||
|
||
**6.2.2.1.2 [SRS_LIBS_00016] SW-C 可以使用市场上可用的非 AUTOSAR 库**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | SW-C 可以使用市场上可用的非 AUTOSAR 库。在这种情况下,开发人员可以不分发此库,只需在 SW-C 模板(DependencyOnLibrary)中提及它。集成商有责任获取此库以便能够集成 SW-C。此非 AUTOSAR 库应遵守本文档的要求。建议非 AUTOSAR 函数以特定的供应商前缀开头。 |
|
||
| **Rationale(理由)** | 允许实现的自由度。避免名称冲突。 |
|
||
| **Use Case(用例)** | 供应商特定库。 |
|
||
| **Dependencies(依赖)** | [SRS_LIBS_00011] |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_02096) |
|
||
|
||
##### 6.2.2.2 其他
|
||
|
||
**6.2.2.2.1 [SRS_LIBS_00007] 库的使用应记录在文档中**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 如果 BSW 模块或 SW-C 使用某个库,开发人员应在 BSW/SW-C 模板中添加 Implementation-DependencyOnLibrary。`minVersion` 和 `maxVersion` 参数对应于供应商版本。对于 AUTOSAR 库,这些参数可以留空,因为 SW-C 或 BSW 模块可以依赖库行为而非供应商实现。但是,SW-C 或 BSW 模块应与其所集成的 AUTOSAR 平台兼容。 |
|
||
| **Rationale(理由)** | SW 集成商在集成 BSW 模块或 SW-C 时检查 AUTOSAR 平台兼容性。 |
|
||
| **Use Case(用例)** | -- |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | ( RS_BRF_01192) |
|
||
|
||
**6.2.2.2.2 [SRS_LIBS_00017] 应避免使用宏**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 函数应声明为函数或内联函数(inline)。不应使用 `#define` 宏。 |
|
||
| **Rationale(理由)** | 宏不指定参数类型和返回类型,因此更有可能被误用。 |
|
||
| **Use Case(用例)** | -- |
|
||
| **Dependencies(依赖)** | -- |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | () |
|
||
|
||
**6.2.2.2.3 [SRS_LIBS_00018] 库函数只能调用库函数**
|
||
|
||
| 项 | 内容 |
|
||
|----|------|
|
||
| **Type(类型)** | Valid |
|
||
| **Description(描述)** | 库函数不应调用任何 BSW 模块的函数,例如 DET。库函数可以调用其他库函数。 |
|
||
| **Rationale(理由)** | 库函数应是可重入的。其他 BSW 模块函数可能不可重入。 |
|
||
| **Use Case(用例)** | 多核架构;内存保护方案。 |
|
||
| **Dependencies(依赖)** | [SRS_LIBS_00009] |
|
||
| **Supporting Material(支持材料)** | -- |
|
||
| **满足的需求** | () |
|
||
|
||
## 7 参考文献
|
||
|
||
- [1] Standardisation Template, AUTOSAR_TPS_StandardizationTemplate.pdf
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
1. 本文档为 AUTOSAR CP Release 4.4.0 的库需求规范(SRS)。
|
||
2. 所有 API 标识符和库名称(Bfx、Crc、E2E、Efx、Ifl、Ifx、Mfl、Mfx)保留英文原名。
|
||
3. 需求 ID(如 `SRS_LIBS_00001`、`SRS_LIBS_08518`、`RS_BRF_02080`)保留原样。
|
||
4. 章节中包含的所有 C 代码片段按原文翻译并保留格式。
|
||
5. AUTOSAR 方框符 `⌈⌋` 已保留。
|
||
6. 文档涵盖 8 个 AUTOSAR 库的通用需求:Mfx、Mfl、Ifx、Ifl、Bfx、Efx、Crc、E2E。
|
||
7. 文档分为 6 个章节,详细规定了功能需求(配置、初始化、正常运行、关闭操作、故障操作、CRC 库)和非功能需求(通用、CRC 库的兼容性与其他)。
|