AUTOSAR图解==>AUTOSAR_SRS_Libraries

AUTOSAR 库详解

AUTOSAR标准组件解析系列之库模块详解

目录


1. 概述

1.1 AUTOSAR库的作用

AUTOSAR (AUtomotive Open System ARchitecture) 库是AUTOSAR标准的重要组成部分,为其他BSW (基础软件) 模块和应用软件组件 (SW-C) 提供基础功能支持。这些库提供了通用的、可重用的功能集合,可以被任何软件组件调用,无需通过复杂的RTE (运行时环境) 通信机制,极大地提高了开发效率和代码重用率。

AUTOSAR库提供的功能包括位操作、CRC校验计算、定点和浮点数学计算、插值函数以及端到端通信保护等,这些都是汽车电子控制单元 (ECU) 中常用的基础功能。

1.2 AUTOSAR库的类型

AUTOSAR标准定义了以下几种库:

  • Bfx (位处理库):提供位操作相关功能
  • Crc (CRC校验库):提供8位、16位、32位和64位CRC校验计算
  • Mfx (定点数学计算库):提供定点数学计算功能
  • Ifx (定点插值函数库):提供定点数插值功能
  • Efx (定点扩展函数库):提供定点数扩展功能
  • Mfl (浮点数学计算库):提供浮点数学计算功能
  • Ifl (浮点插值函数库):提供浮点数插值功能
  • E2E (端到端通信保护库):提供安全相关通信的保护功能

2. AUTOSAR库架构

2.1 整体架构

下图展示了AUTOSAR库的整体架构和组织结构,包括各个库模块及其与调用者的关系:

在这里插入图片描述

图2.1 AUTOSAR库架构图

该架构图清晰地展示了AUTOSAR库的组成部分和调用关系:

  1. 库模块组成

    • Bfx (位处理库):提供位级操作功能,如设置位、清除位、获取位等
    • Crc (CRC校验库):包含8位、16位、32位和64位CRC计算功能
    • 定点数计算库:包括Mfx (数学计算)、Ifx (插值函数) 和Efx (扩展函数)
    • 浮点数计算库:包括Mfl (数学计算) 和Ifl (插值函数)
    • E2E (端到端通信保护库):为安全相关通信提供保护
  2. 调用者

    • BSW模块:基础软件模块可以直接调用库功能
    • 软件组件 (SW-C):应用软件组件可以直接调用库功能
    • RTE:运行时环境也可以调用库功能
    • 复杂驱动:复杂驱动程序可以调用库功能
  3. 库特点

    • 提供C函数接口
    • 不依赖BSW模块函数
    • 函数可重入
    • 不通过端口访问,直接调用
    • 函数名统一使用"Library short name_"前缀
    • 行为不可配置,确保确定性

2.2 库的分类与功能

AUTOSAR库可根据功能类型分为以下几类:

  1. 基础数据处理库

    • Bfx (位处理库):提供位级操作,如位设置、清除、获取、逻辑操作等
    • Crc (CRC校验库):提供多种标准的CRC校验算法,支持不同的计算方式和多项式
  2. 数值计算库

    • 定点数库:包括Mfx (基础数学计算)、Ifx (插值函数) 和Efx (扩展功能)
    • 浮点数库:包括Mfl (基础数学计算) 和Ifl (插值函数)
  3. 通信保护库

    • E2E (端到端通信保护库):为安全相关的SW-C间通信提供保护机制

2.3 库在AUTOSAR架构中的位置

下图展示了AUTOSAR库在整个AUTOSAR架构中的位置和与其他模块的关系:

在这里插入图片描述

图2.3 AUTOSAR库与其他模块关系图

该图展示了AUTOSAR库在ECU软件架构中的特殊位置:

  1. 库的独立性

    • 库不属于传统的BSW层次结构(服务层、ECU抽象层、微控制器抽象层)
    • 库提供横向服务,可被任何层级的组件调用
  2. 调用关系

    • 应用层软件组件可以直接调用库(虚线所示),而不通过RTE
    • RTE可以调用库
    • 所有BSW层组件(服务层、ECU抽象层、微控制器抽象层)都可以调用库
    • 操作系统(OS)和ECU管理器(EcuM)也可以调用库
  3. 特殊性质

    • 库在ECU初始化最早阶段就可用
    • 库可在ECU关闭最后阶段仍然可用
    • 库不依赖于任何BSW模块
    • 库通过直接调用方式使用,不经过RTE或端口机制

3. AUTOSAR库接口

3.1 接口设计原则

AUTOSAR库的接口设计遵循以下几个关键原则:

  1. 标准化:所有库函数使用统一的命名规则和接口风格
  2. 简单直接:不使用复杂的配置或调用机制,直接通过C函数调用
  3. 可重入性:所有库函数都必须是可重入的,以支持多任务环境
  4. 独立性:库函数不依赖其他BSW模块,只能调用其他库函数
  5. 确定性:对于给定的输入,库函数必须产生确定的输出,行为不可配置

3.2 库接口结构

下图展示了AUTOSAR库的接口结构和调用方式:

在这里插入图片描述

图3.2 AUTOSAR库接口类图

该类图详细说明了AUTOSAR库的接口结构:

  1. 库函数命名规则

    • 所有函数名以库的短名称为前缀,如Bfx_GetBit()Crc_CalculateCRC32()
    • 命名风格统一,确保可识别性和可读性
  2. 库接口特点

    • 每个库提供一个独立的头文件(如Bfx.hCrc.h等)
    • 头文件定义库的公共接口
    • 头文件可能定义特定类型(如果AUTOSAR标准类型不足)
    • 调用者直接包含库头文件,不通过RTE或端口机制
  3. 库的直接调用

    • 通过C标准的#include机制包含头文件
    • 直接调用函数,无需通过RTE或端口
    • 库函数行为确定不可配置
  4. 类型定义

    • 库可以定义自己的特定类型,但仅限于AUTOSAR标准类型(如std_types.h)中未定义的类型
    • 类型名称也使用库短名称前缀

3.3 库的使用方式

AUTOSAR库的使用方式非常直接:

  1. 包含库头文件
#include "Bfx.h"   // 包含位处理库
#include "Crc.h"   // 包含CRC校验库
  1. 直接调用库函数
boolean bitValue = Bfx_GetBit(data, position);     // 获取位值
uint32 crcValue = Crc_CalculateCRC32(data, length, initialValue); // 计算CRC
  1. 函数调用特点
    • 调用不通过RTE或端口机制
    • 库函数行为确定,不可配置
    • 函数可在任何执行上下文中调用(任务、中断等)

4. AUTOSAR库调用机制

4.1 调用流程

下图展示了AUTOSAR库的调用流程和不同调用场景:

在这里插入图片描述

图4.1 AUTOSAR库调用流程序列图

该序列图说明了库调用流程的几个重要方面:

  1. 初始化阶段调用

    • 库在ECU启动最早阶段即可用
    • 库不需要初始化
    • OS/EcuM可以在初始化阶段调用库函数
  2. BSW模块调用

    • BSW模块包含库头文件
    • 直接调用库函数
    • 库函数可调用其他库函数
    • 库函数不能调用BSW模块函数
  3. 软件组件调用

    • 软件组件直接包含头文件(不通过RTE)
    • 直接调用库函数
    • 调用方式简单高效

4.2 错误处理机制

AUTOSAR库有统一的错误处理机制:

  1. 参数检查

    • 库函数在运行时检查输入参数
    • 捕获错误情况如除以零、超出范围等
    • 根据SWS规定,对错误情况返回固定值
    • 返回值不可配置,确保行为一致
  2. 错误响应

    • 库函数不使用DET(默认错误跟踪器)或其他BSW错误处理机制
    • 库函数必须自己处理错误并返回适当的错误值
    • 错误处理逻辑必须内置在库函数中

4.3 分步计算机制

对于处理大量数据的库函数(特别是CRC计算),AUTOSAR提供了分步计算机制:

  1. CRC分步计算

    • 支持分块计算大数据块
    • 首次调用使用初始值(通常为0)
    • 后续调用使用前一次计算的结果作为新的初始值
    • 可避免长时间阻塞系统
    • 允许看门狗重置
  2. 调用示例

// 第一步:计算前16字节的CRC,初始值为0
uint32 crcValue = Crc_CalculateCRC32(dataChunk1, 16, 0);

// 第二步:计算接下来16字节的CRC,使用上一步的结果作为初始值
crcValue = Crc_CalculateCRC32(dataChunk2, 16, crcValue);

// 继续处理后续数据块...

5. AUTOSAR库的关键要求

5.1 功能要求

AUTOSAR对库模块提出了以下功能要求:

  1. 初始化与关闭

    • [SRS_LIBS_00002] 库必须在所有BSW模块和应用SW-C初始化之前即可操作
    • [SRS_LIBS_00003] 库必须在关闭阶段仍然可操作,直到shutdown
    • 库不需要初始化操作
  2. 接口规范

    • [SRS_LIBS_00004] 使用库不需要通过端口(直接调用)
    • [SRS_LIBS_00005] 每个库必须提供一个头文件,命名为<library short name>.h
    • [SRS_LIBS_00011] 所有函数名和类型名必须以"Library short name_"为前缀
  3. 行为配置

    • [SRS_LIBS_00001] 库函数的功能行为不可配置
    • [SRS_LIBS_00015] 可以配置微控制器,使库代码在所有调用者之间共享
  4. 内部调用限制

    • [SRS_LIBS_00018] 库函数只能调用其他库函数,不能调用BSW模块函数

5.2 非功能要求

AUTOSAR还对库模块提出了以下非功能要求:

  1. 重入性

    • [SRS_LIBS_00009] 所有库函数必须是可重入的
    • 函数必须能处理来自多个任务的并发调用
  2. 性能优化

    • [SRS_LIBS_08518] CRC库必须提供不同的计算方法,优化性能或内存使用
    • [SRS_LIBS_08521] 所有CRC例程必须支持大数据块的分步计算
  3. 错误处理

    • [SRS_LIBS_00013] 运行时检查输入参数的错误情况必须在SWS中列出
    • 对于每种错误情况,必须返回SWS中规定的固定值
  4. 标准合规

    • [SRS_LIBS_08525] CRC库必须支持标准生成多项式
    • [SRS_LIBS_08526] CRC库必须支持当前CRC计算标准

5.3 兼容性要求

为确保向后兼容性和稳定性,AUTOSAR对库接口提出了以下兼容性要求:

  1. 接口稳定性

    • [SRS_LIBS_00008] 一旦函数原型名称成为AUTOSAR最终发布的一部分,其行为和参数就不能再改变
    • 如果需要修改规范,必须创建新的函数原型,保留旧的函数原型不变
  2. 类型定义

    • [SRS_LIBS_00010] 库只能定义自己的特定类型,前提是这些类型尚未被AUTOSAR定义
    • 类型必须在库头文件中定义
  3. 参数传递

    • [SRS_LIBS_00012] 允许使用结构体传递参数
    • 当参数较多或功能分组需要时,可以使用结构体简化调用
  4. 非AUTOSAR库

    • [SRS_LIBS_00016] 软件组件可以使用市场上可获得的非AUTOSAR库
    • 供应商特定库应使用特定前缀以避免名称冲突

6. 总结

AUTOSAR库是AUTOSAR标准的重要组成部分,为整个软件架构提供了基础的、可重用的功能模块。它们具有以下关键特性:

  1. 直接可用性

    • 库不需要初始化,在ECU启动最早阶段即可使用
    • 库在关闭阶段仍然可用
    • 库提供直接的C函数接口,不通过RTE或端口机制
  2. 独立性

    • 库不依赖其他BSW模块
    • 库函数只能调用其他库函数
    • 所有库函数必须是可重入的
  3. 标准化

    • 统一的命名规则("Library short name_"前缀)
    • 每个库提供一个标准头文件
    • 函数行为一致且不可配置
  4. 基础功能覆盖

    • 位处理(Bfx)
    • CRC校验(Crc)
    • 定点和浮点数学计算(Mfx、Mfl)
    • 插值函数(Ifx、Ifl)
    • 端到端通信保护(E2E)

通过提供这些基础功能,AUTOSAR库简化了软件开发,提高了代码重用率,并确保了跨平台的兼容性。库的设计遵循AUTOSAR的标准化原则,使不同供应商的实现可以互相替换,同时保持接口稳定性和行为一致性。

在AUTOSAR软件架构中,库模块是一个独特的横向服务提供者,可以被从应用层到微控制器抽象层的任何组件直接调用,为整个软件栈提供基础功能支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值