1 介绍与功能概述(Introduction and functional overview)
本规范定义了 AUTOSAR 通信栈类型头文件。它包含所有在基础软件通信栈多个模块中复用的类型,以及所有与平台和编译器无关的基础软件模块类型。
强烈推荐在 AUTOSAR 社区内统一使用这些通信栈类型文件,以保证类型的唯一性,并避免从供应商 A 切换到供应商 B 时类型发生变化。
2 缩略语与术语(Acronyms and abbreviations)
仅在本文件局部使用、因而未收录到 AUTOSAR 术语表中的缩略语与术语,必须在本节"局部术语表"中列出。
| 缩略语 | 说明 |
|---|---|
| API | Application Programming Interface(应用程序编程接口) |
| DCM | Diagnostic Communication Manager(诊断通信管理器) |
| I-PDU | Interaction Layer PDU(交互层 PDU)。在 AUTOSAR 中,交互层等同于"通信服务层"(Communication Services Layer)。 |
| L-PDU | Data Link Layer PDU(数据链路层 PDU)。在 AUTOSAR 中,数据链路层等同于"通信硬件抽象层"和"微控制器抽象层"。 |
| N-PDU | Network Layer PDU(网络层 PDU)。在 AUTOSAR 中,网络层等同于"传输协议"。 |
| OSEK/VDX | Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug(汽车电子开放系统及其接口)。1993 年 5 月由德国汽车行业联合发起,目标是为车辆分布式控制单元提供开放式架构标准。初始成员:BMW、Bosch、DaimlerChrysler、Opel、Siemens、VW 及卡尔斯鲁厄大学 IIIT;1994 年法国 PSA 与 Renault 携 VDX(Vehicle Distributed eXecutive)方案加入。 |
| PDU | Protocol Data Unit(协议数据单元) |
| SDU | Service Data Unit(服务数据单元),即 PDU 的有效载荷 |
| TP | Transport Protocol(传输协议) |
| 缩写 | 说明 |
|---|---|
| Com | Communication(通信) |
| EcuC | ECU Configuration(ECU 配置) |
| e.g. | [lat.] exempli gratia = [eng.] for example(例如) |
| i.e. | [lat.] it est = [eng.] that is(即) |
3 相关文档(Related documentation)
3.1 输入文档
| 编号 / 标签 | 文档名 | 原 PDF |
|---|---|---|
| [1] GeneralSRS | General Requirements on Basic Software Modules | AUTOSAR_SRS_BSWGeneral.pdf |
| [2] SRSSPAL | General Requirements on SPAL | AUTOSAR_SRS_SPALGeneral.pdf |
| [3] StdTypes | Specification of Standard Types | AUTOSAR_SWS_StandardTypes.pdf |
| [4] PltfTypes | Specification of Platform Types | AUTOSAR_SWS_PlatformTypes.pdf |
| [5] CompTypes | Specification of Compiler Abstraction | AUTOSAR_SWS_CompilerAbstraction.pdf |
| [6] CANTP | Specification of CAN Transport Layer | AUTOSAR_SWS_CANTransportLayer.pdf |
| [7] FlexRayTP | Specification of FlexRay Transport Layer | AUTOSAR_SWS_FlexRayTransportLayer.pdf |
| [8] CANTRCV | Specification of CAN Transceiver Driver | AUTOSAR_SWS_CANTransceiverDriver.pdf |
| [9] FRTRCV | Specification of FlexRay Transceiver Driver | AUTOSAR_SWS_FlexRayTransceiverDriver.pdf |
| [10] BSMDT | Basic Software Module Description Template | AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf |
| [11] BSWModule | List of Basic Software Modules | AUTOSAR_TR_BSWModuleList |
| [12] BSWGeneral | General Specification of Basic Software Modules | AUTOSAR_SWS_BSWGeneral.pdf |
3.2 相关标准与规范
- [CProgLang]:ISO/IEC 9899:1990 Programming Language – C
- [ISONM]:ISO/IEC 15765-2; 2003 Diagnostics on Controller Area Networks (CAN) – Network layer services
3.3 相关规范
AUTOSAR 提供了通用基础软件模块规范(参见 3.1 节 [12],SWS BSW General),该规范对通信栈类型同样适用。
因此,SWS BSW General 应被视为通信栈类型的附加且必需的规范。
4 约束与假设(Constraints and assumptions)
4.1 限制(Limitations)
无限制。
4.2 对汽车领域的适用性(Applicability to car domains)
无限制。
4.3 对功能安全相关环境的适用性(Applicability to safety related environments)
无限制,因为本规范的主题是定义类型的头文件,它不包含或实现任何功能。
5 软件架构(Software Architecture)
5.1 对其他模块的依赖(Dependencies to other modules)
通信栈类型头文件基于平台类型 [PltfTypes](PlatformTypes.h)和编译器头文件 [CompTypes](Compiler.h)定义通信类型。为防止头文件被多次包含,通信栈头文件包含标准类型头文件 [StdTypes],而后者已经包含了上述两个文件。
6 需求追溯(Requirements traceability)
本规范引用了大量 SRS 需求,绝大多数通过 SWS_Comtype_NA_0–SWS_Comtype_NA_5 声明"不适用"(详见 第 11 节)。
| SRS 需求 | 由以下满足 |
|---|---|
配置类相关(无配置参数):SRS_BSW_00158、SRS_BSW_00159、SRS_BSW_00160、SRS_BSW_00167、SRS_BSW_00171、SRS_BSW_00342、SRS_BSW_00343、SRS_BSW_00344、SRS_BSW_00345、SRS_BSW_00346、SRS_BSW_00380、SRS_BSW_00381、SRS_BSW_00383、SRS_BSW_00388、SRS_BSW_00389、SRS_BSW_00390、SRS_BSW_00392、SRS_BSW_00393、SRS_BSW_00394、SRS_BSW_00395、SRS_BSW_00396、SRS_BSW_00397、SRS_BSW_00398、SRS_BSW_00399、SRS_BSW_00400、SRS_BSW_00401、SRS_BSW_00404、SRS_BSW_00405、SRS_BSW_00408、SRS_BSW_00412 | SWS_Comtype_NA_0 |
SW-C 依赖相关:SRS_BSW_00168、SRS_BSW_00170、SRS_BSW_00423 | SWS_Comtype_NA_1 |
中断/驱动/OS 相关(无中断实现):SRS_BSW_00005、SRS_BSW_00101、SRS_BSW_00161、SRS_BSW_00162、SRS_BSW_00164、SRS_BSW_00172、SRS_BSW_00314、SRS_BSW_00325、SRS_BSW_00347、SRS_BSW_00361、SRS_BSW_00375、SRS_BSW_00406、SRS_BSW_00410、SRS_BSW_00413、SRS_BSW_00416、SRS_BSW_00424、SRS_BSW_00425、SRS_BSW_00426、SRS_BSW_00427、SRS_BSW_00428、SRS_BSW_00429 | SWS_Comtype_NA_2 |
命名/类型/API 等通用规范:SRS_BSW_00006、SRS_BSW_00007、SRS_BSW_00009、SRS_BSW_00010、SRS_BSW_00300、SRS_BSW_00301、SRS_BSW_00302、SRS_BSW_00304、SRS_BSW_00306、SRS_BSW_00307、SRS_BSW_00308、SRS_BSW_00309、SRS_BSW_00310、SRS_BSW_00312、SRS_BSW_00321、SRS_BSW_00323、SRS_BSW_00330、SRS_BSW_00331、SRS_BSW_00333、SRS_BSW_00334、SRS_BSW_00335、SRS_BSW_00341、SRS_BSW_00348、SRS_BSW_00353、SRS_BSW_00357、SRS_BSW_00358、SRS_BSW_00359、SRS_BSW_00360、SRS_BSW_00371、SRS_BSW_00373、SRS_BSW_00374、SRS_BSW_00377、SRS_BSW_00378、SRS_BSW_00379、SRS_BSW_00407、SRS_BSW_00411、SRS_BSW_00414、SRS_BSW_00415、SRS_BSW_00432、SRS_BSW_00433、SRS_BSW_00328 | SWS_Comtype_NA_3 |
关闭功能:SRS_BSW_00336 | SWS_Comtype_NA_4 |
错误处理:SRS_BSW_00327、SRS_BSW_00337、SRS_BSW_00339、SRS_BSW_00350、SRS_BSW_00369、SRS_BSW_00385、SRS_BSW_00386、SRS_BSW_00409、SRS_BSW_00417、SRS_BSW_00422 | SWS_Comtype_NA_5 |
7 功能规范(Functional specification)
7.1 通用问题(General issues)
[SWS_Comtype_00004]
本文件不得添加任何项目或供应商特定的扩展。任何扩展都将使 AUTOSAR 一致性失效。
[SWS_Comtype_00015]
由于许多通信栈类型依赖于具体的 ECU,本文件应根据每个 ECU 的具体配置独立生成。
[SWS_Comtype_00030]
PduIdType 和 PduLengthType 的取值应当分别派生自 EcuC 虚拟层中 EcuCPduCollection 容器的 PduIdTypeEnum 和 PduLengthTypeEnum。
8 API 规范(API specification)
8.1 类型定义(Type definitions)
8.1.1 PduIdType
[SWS_COMTYPE_00005]
| 名称(Name) | PduIdType |
|---|---|
| 类型(Type) | uint8, uint16 |
| 取值(Range) | 0...<PduIdmax> —— 从零开始的整数。该全局类型的大小取决于一个软件模块内使用的最大 PDU 数。此参数由生成工具根据 EcuC 虚拟层中配置的值生成,并写入 ComStack_Cfg.h 文件。示例: · 若无模块处理的 PDU 超过 256 个,可设为 uint8。· 若至少一个模块处理超过 256 个 PDU,则必须全局设为 uint16。 |
| 说明(Description) | 该类型在整个 AUTOSAR 通信栈中使用,不包含总线驱动。 |
| 可获取于(Available via) | ComStackTypes.h |
[SWS_Comtype_00006]
此类型的变量用作软件模块(或其集合)内 PDU 的唯一标识符,也用于两个软件模块之间的交互——此时使用目标模块对应的 PduId 进行引用。
[SWS_Comtype_00007]
为支持在软件模块内进行表索引,此类型的变量应当从零开始且连续。模块内可以有多个 PduId 范围,每种操作类型(如发送与接收)对应一个范围。
[SWS_Comtype_00014]
PduIdmax(一个 PduId 范围的最大值)为该模块中相应操作类型所处理的 PDU 数减 1。
8.1.2 PduLengthType
[SWS_COMTYPE_00008]
| 名称(Name) | PduLengthType |
|---|---|
| 类型(Type) | uint8, uint16, uint32 |
| 取值(Range) | 0...<PduLengthmax> —— 从零开始的整数。该全局类型的大小取决于一个 ECU 所发送 PDU 的最大长度。此参数由生成工具根据 EcuC 虚拟层中配置的值生成,并写入 ComStack_Cfg.h 文件。示例: · 若不使用分段传输,长度取决于底层通信系统单帧的最大有效载荷(FlexRay 最大为 255,因此使用 uint8)。· 若使用分段传输,则取决于分段 N-PDU 的最大长度(通常使用 uint16)。 |
| 说明(Description) | 该类型应当在一个 ECU 的整个 AUTOSAR 通信栈中使用,不包含总线驱动。 |
| 可获取于(Available via) | ComStackTypes.h |
[SWS_Comtype_00010]
此类型的变量用作 PDU 的长度信息。长度信息以字节数给出。
[SWS_Comtype_00017]
PduLengthmax(PDU 的最大长度)是该 ECU 所发送最大(可能分段的)PDU 的长度。
8.1.3 PduInfoType
[SWS_COMTYPE_00011]
| 名称(Name) | PduInfoType |
|---|---|
| 类型(Type) | Structure(结构体) |
| 元素(Element) | uint8* SduDataPtr 指向 PDU 的 SDU(即有效载荷数据)的指针。该指针的类型取决于编译时使用的内存模型。 |
uint8* MetaDataPtr 指向 PDU 的元数据(例如 CAN ID、socket ID、诊断地址)的指针,由一系列元数据项组成。每个 PDU 的元数据项的长度和类型在配置时静态确定。超过 8 位的元数据项使用平台字节序。 | |
PduLengthType SduLength SDU 的字节长度。 | |
| 说明(Description) | 此类型的变量应当用于存储任意类型 PDU 的基本信息,即:一个指向其 SDU(有效载荷)的指针变量、一个指向 PDU 元数据的指针、以及 SDU 对应的字节长度。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.4 PNCHandleType
[SWS_COMTYPE_00036]
| 名称(Name) | PNCHandleType |
|---|---|
| 类型(Type) | uint8 |
| 说明(Description) | 用于存储部分网络(Partial Network)集群的标识符。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.5 TPParameterType
[SWS_COMTYPE_00031]
| 名称(Name) | TPParameterType |
|---|---|
| 类型(Type) | Enumeration(枚举) |
| 取值(Range) | TP_STMIN 0x00 Separation Time(分隔时间) |
TP_BS 0x01 Block Size(块大小) | |
TP_BC 0x02 FlexRay 传输协议模块中使用的带宽控制参数 | |
| 说明(Description) | 指定要修改其值的参数(BS 或 STmin)。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.6 BufReq_ReturnType
[SWS_COMTYPE_00012]
| 名称(Name) | BufReq_ReturnType |
|---|---|
| 类型(Type) | Enumeration(枚举) |
| 取值(Range) | BUFREQ_OK 0x00 缓冲区请求成功完成。该状态的取值必须为 0。 |
BUFREQ_E_NOT_OK 0x01 缓冲区请求不成功,无法访问缓冲区。该状态的取值必须为 1。 | |
BUFREQ_E_BUSY 0x02 暂时无可用缓冲区。由请求方在一段时间后重试。该状态的取值必须为 2。 | |
BUFREQ_E_OVFL 0x03 无法提供所需长度的缓冲区。该状态的取值必须为 3。 | |
| 说明(Description) | 此类型的变量应当用于存储缓冲区请求的结果。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.7 TpDataStateType
[SWS_COMTYPE_00027]
| 名称(Name) | TpDataStateType |
|---|---|
| 类型(Type) | Enumeration(枚举) |
| 取值(Range) | TP_DATACONF 0x00 表示到目前为止已复制的数据都已确认,可以从 TP 缓冲区移除。本次 API 调用复制的数据除外,将在之后确认。 |
TP_DATARETRY 0x01 表示本次 API 调用应重新复制已复制的数据以从错误中恢复。此时 TxTpDataCnt 指定本次 API 调用要复制的第一个字节的偏移。 | |
TP_CONFPENDING 0x02 表示之前复制的数据必须保留在 TP 中。 | |
| 说明(Description) | 此类型的变量应当用于存储 TP 缓冲区的状态。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.8 RetryInfoType
[SWS_COMTYPE_00037]
| 名称(Name) | RetryInfoType |
|---|---|
| 类型(Type) | Structure(结构体) |
| 元素(Element) | TpDataStateType TpDataState 用于存储 TP 缓冲区状态的枚举类型。 |
PduLengthType TxTpDataCnt 从当前位置开始的偏移,标识需要重传的字节数。 | |
| 说明(Description) | 此类型的变量应当用于存储 TP 缓冲区处理的相关信息。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.9 NetworkHandleType
[SWS_COMTYPE_00038]
| 名称(Name) | NetworkHandleType |
|---|---|
| 种类(Kind) | Type(类型) |
| 派生自(Derived from) | uint8 |
| 说明(Description) | NetworkHandleType 类型的变量应当用于存储通信通道的标识符。 |
| 取值(Range) | 0..255 从零开始的整数 |
| 变化(Variation) | — |
| 可获取于(Available via) | ComStackTypes.h |
8.1.10 IcomConfigIdType
[SWS_COMTYPE_00039]
| 名称(Name) | IcomConfigIdType |
|---|---|
| 类型(Type) | uint8 |
| 说明(Description) | IcomConfigIdType 定义配置 ID。ID 为 0 表示默认配置。ID 大于 0 应当用于识别"拟网络(Pretended Networking)"的一种配置。允许存在多种配置。 |
| 可获取于(Available via) | ComStackTypes.h |
8.1.11 IcomSwitch_ErrorType
[SWS_COMTYPE_00040]
| 名称(Name) | IcomSwitch_ErrorType |
|---|---|
| 类型(Type) | Enumeration(枚举) |
| 取值(Range) | ICOM_SWITCH_E_OK 0x00 拟网络的激活成功。 |
ICOM_SWITCH_E_FAILED 0x01 拟网络的激活失败。 | |
| 说明(Description) | IcomSwitch_ErrorType 定义激活或去激活"拟网络"时可能发生的错误。 |
| 可获取于(Available via) | ComStackTypes.h |
8.2 函数定义(Function definitions)
不适用。
9 时序图(Sequence diagrams)
不适用。
10 配置规范(Configuration specification)
10.1 发布参数(Published parameters)
详细信息参见 SWS_BSWGeneral [12] 的 10.3 节"发布信息"。
11 不适用的需求(Not applicable requirements)
[SWS_Comtype_NA_0]
本条目引用的需求不适用,因为 ComStack_Types 既无可配置参数,也未引用其他模块的配置参数。
(SRS_BSW_00344、SRS_BSW_00404、SRS_BSW_00405、SRS_BSW_00345、SRS_BSW_00159、SRS_BSW_00167、SRS_BSW_00171、SRS_BSW_00380、SRS_BSW_00381、SRS_BSW_00412、SRS_BSW_00383、SRS_BSW_00388、SRS_BSW_00389、SRS_BSW_00390、SRS_BSW_00392、SRS_BSW_00393、SRS_BSW_00394、SRS_BSW_00395、SRS_BSW_00396、SRS_BSW_00397、SRS_BSW_00398、SRS_BSW_00399、SRS_BSW_00400、SRS_BSW_00342、SRS_BSW_00343、SRS_BSW_00160、SRS_BSW_00408、SRS_BSW_00346、SRS_BSW_00158、SRS_BSW_00401)
[SWS_Comtype_NA_1]
本条目引用的需求不适用,因为 ComStack_Types 与软件组件(SW-C)之间没有依赖关系。
(SRS_BSW_00170、SRS_BSW_00168、SRS_BSW_00423)
[SWS_Comtype_NA_2]
本条目引用的需求不适用,因为 ComStack_Types 不实现任何中断,不是驱动或 MCAL 抽象层,也未直接访问 OS。
(SRS_BSW_00375、SRS_BSW_00101、SRS_BSW_00406、SRS_BSW_00416、SRS_BSW_00424、SRS_BSW_00425、SRS_BSW_00426、SRS_BSW_00427、SRS_BSW_00428、SRS_BSW_00429、SRS_BSW_00161、SRS_BSW_00162、SRS_BSW_00005、SRS_BSW_00164、SRS_BSW_00325、SRS_BSW_00413、SRS_BSW_00347、SRS_BSW_00314、SRS_BSW_00410、SRS_BSW_00361、SRS_BSW_00172)
[SWS_Comtype_NA_3]
本条目引用的需求不适用,因为 ComStack_Types 不实现版本检查、主函数、API、标准类型等。
(SRS_BSW_00323、SRS_BSW_00415、SRS_BSW_00007、SRS_BSW_00300、SRS_BSW_00307、SRS_BSW_00310、SRS_BSW_00373、SRS_BSW_00335、SRS_BSW_00411、SRS_BSW_00348、SRS_BSW_00353、SRS_BSW_00301、SRS_BSW_00302、SRS_BSW_00328、SRS_BSW_00312、SRS_BSW_00006、SRS_BSW_00357、SRS_BSW_00377、SRS_BSW_00304、SRS_BSW_00378、SRS_BSW_00306、SRS_BSW_00308、SRS_BSW_00309、SRS_BSW_00371、SRS_BSW_00358、SRS_BSW_00407、SRS_BSW_00432、SRS_BSW_00433、SRS_BSW_00414、SRS_BSW_00359、SRS_BSW_00360、SRS_BSW_00330、SRS_BSW_00331、SRS_BSW_00009、SRS_BSW_00010、SRS_BSW_00333、SRS_BSW_00374、SRS_BSW_00379、SRS_BSW_00321、SRS_BSW_00341、SRS_BSW_00334)
[SWS_Comtype_NA_4]
本条目引用的需求不适用,因为 ComStack_Types 不包含任何关闭功能。
(SRS_BSW_00336)
[SWS_Comtype_NA_5]
本条目引用的需求不适用,因为 ComStack_Types 不实现开发错误和生产错误。
(SRS_BSW_00337、SRS_BSW_00369、SRS_BSW_00339、SRS_BSW_00422、SRS_BSW_00417、SRS_BSW_00409、SRS_BSW_00385、SRS_BSW_00386、SRS_BSW_00327、SRS_BSW_00350)