AUTOSAR进阶图解==>AUTOSAR_SWS_IFXLibrary

AUTOSAR 固定点插值库 (IFX Library) 详解

基于 AUTOSAR CP Release 4.4.0 的规范文档

目录

  1. 概述
  2. 架构设计
    2.1 模块架构
    2.2 数据流设计
    2.3 数据类型定义
  3. 功能规范
    3.1 错误分类与检测
    3.2 初始化与关闭
    3.3 库实现要求
  4. 例程规范
    4.1 数据类型
    4.2 舍入规则
    4.3 目标优化
    4.4 特殊情况处理
  5. 总结

1. 概述

AUTOSAR固定点插值库(IFX Library)是AUTOSAR平台中的基础组件,提供固定点数学运算和插值功能,用于实现各种数值计算。本文档详细分析了IFX库的规范、架构和使用方法。

IFX库的主要特点:

  • 提供固定点插值运算功能
  • 支持各种数据类型的输入/输出
  • 无需初始化和关闭阶段
  • 不依赖于DET错误处理机制
  • 符合MISRA C 2012标准
  • 使用AUTOSAR标准数据类型

2. 架构设计

2.1 模块架构

IFX库在AUTOSAR架构中的位置及其与其它模块的关系如下图所示:

在这里插入图片描述

架构解释

IFX库位置

  • 功能:IFX库位于AUTOSAR基础软件层,属于库(Libraries)模块
  • 主要组成:插值函数(Interpolation)、查表函数(Map Lookup)、数据点搜索(DP Search)
  • 调用方式:可直接被应用软件组件(SWC)或其他BSW模块调用

调用关系

  • 应用软件组件可以直接调用IFX库函数
  • 其他BSW模块也可以直接调用IFX库函数
  • 不需要通过RTE或其他中间层

特性说明

  • 无初始化和关闭阶段:IFX库可以在ECU初始化的最早阶段被调用
  • 不依赖DET:不使用DET进行错误通知
  • 无状态设计:采用纯函数调用方式,无内部状态
  • 符合标准:遵循MISRA-C 2012编码标准
  • 数据类型:使用AUTOSAR标准数据类型

2.2 数据流设计

IFX库中数据的处理流程和各模块间的交互如下图所示:

在这里插入图片描述

数据流解释

基本调用流程

  • 调用IFX API:应用软件组件或BSW模块调用IFX库函数
  • 数据处理路径:
    1. 插值函数路径:调用插值函数→找到相邻数据点→计算插值结果→返回结果
    2. 查表函数路径:调用查表函数→找到相邻数据点→查表获取结果→返回结果

数据点搜索特性

  • 处理单调递增数据系列
  • 返回索引和插值比率
  • 比率分辨率为2^-16
  • 使用结构体Ifx_DPResultU16_Type存储结果

插值计算规则

  • 边界处理:
    • 输入值小于第一个分布点:使用第一个值
    • 输入值大于最后一个分布点:使用最后一个值
  • 中间结果向零舍入

2.3 数据类型定义

IFX库使用的数据类型及其关系如下图所示:

在这里插入图片描述

数据类型解释

标准数据类型

  • IFX库使用AUTOSAR标准数据类型:
    • boolean:布尔类型,值为TRUE或FALSE
    • sint8/s8:有符号8位整型,范围[-128, 127]
    • uint8/u8:无符号8位整型,范围[0, 255]
    • sint16/s16:有符号16位整型,范围[-32768, 32767]
    • uint16/u16:无符号16位整型,范围[0, 65535]
    • sint32/s32:有符号32位整型,范围[-2147483648, 2147483647]
    • uint32/u32:无符号32位整型,范围[0, 4294967295]

自定义数据类型

  • Ifx_DPResultU16_Type:用于数据点搜索的结构体,包含:
    • Index:数据点索引
    • Ratio:插值比率,分辨率为2^-16,向零舍入
    • 此结构体不应被用户直接读/写/修改

API函数类型

  • 数据点搜索函数:Ifx_DP_search_<InTypeMn1>(...)
  • 插值函数:Ifx_Ipo_<InTypeMn1>_<OutTypeMn1>(...)Ifx_IntIpo_<InTypeMn1>_<OutTypeMn1>(...)
  • 查表函数:Ifx_IpoMap_<InTypeMn1>_<OutTypeMn1>(...)Ifx_IntIpoMap_<InTypeMn1>_<OutTypeMn1>(...)

命名约定

  • InTypeMn1:输入类型助记符 (u8, s8, u16, s16, u32, s32)
  • OutTypeMn1:输出类型助记符 (u8, s8, u16, s16, u32, s32)
  • 示例:Ifx_IpoMap_s16u8_s8表示使用sint16输入X, uint8输入Y, sint8输出
数据类型示例代码
/* Ifx_DPResultU16_Type结构体定义 */
typedef struct {
    uint16 Index;  /* 数据点索引 */
    uint16 Ratio;  /* 数据点比率,分辨率2^-16 */
} Ifx_DPResultU16_Type;

/* 数据点搜索函数示例 */
Ifx_DPResultU16_Type Ifx_DP_search_s16(
    const sint16* X_TablePtr,  /* X坐标表指针 */
    uint16 NoOfPoints,         /* 点数量 */
    sint16 X                   /* 查询点X坐标 */
);

/* 插值函数示例 */
sint16 Ifx_Ipo_s16_s16(
    const sint16* X_TablePtr,  /* X坐标表指针 */
    const sint16* Y_TablePtr,  /* Y坐标表指针 */
    uint16 NoOfPoints,         /* 点数量 */
    sint16 X                   /* 查询点X坐标 */
);

/* 查表函数示例 */
sint16 Ifx_IpoMap_s16u8_s16(
    const sint16* X_TablePtr,  /* X坐标表指针 */
    uint16 NoOfXPoints,        /* X点数量 */
    const uint8* Y_TablePtr,   /* Y坐标表指针 */
    uint16 NoOfYPoints,        /* Y点数量 */
    const sint16* Z_TablePtr,  /* Z值表指针 */
    sint16 X,                  /* 查询点X坐标 */
    uint8 Y                    /* 查询点Y坐标 */
);

3. 功能规范

3.1 错误分类与检测

IFX库采用简单的错误处理机制:

  • 无错误分类定义:IFX库不支持DET(Default Error Tracer)调用
  • 错误检测:函数应在运行时检查输入参数值,特别是那些可能导致致命错误或不可预测结果的情况
  • 错误处理:当检测到错误时,函数应返回规范中指定的非可配置值
  • 不检测的错误:如果传递给例程的值无效且超出函数规范范围,则不检测此类错误
/* 错误检测示例 */
sint16 Ifx_Ipo_s16_s16(
    const sint16* X_TablePtr,
    const sint16* Y_TablePtr,
    uint16 NoOfPoints,
    sint16 X
)
{
    /* 参数验证 */
    if (X_TablePtr == NULL || Y_TablePtr == NULL || NoOfPoints == 0) {
        return 0; /* 返回规范指定的错误值 */
    }
    
    /* 其它处理逻辑 */
    /* ... */
}

3.2 初始化与关闭

IFX库的初始化和关闭特性:

  • 无初始化阶段:IFX库不需要初始化阶段,可在ECU初始化的第一步被调用
  • 无关闭阶段:IFX库不需要关闭操作阶段
  • 直接API调用:IFX API可直接从BSW模块或SWC调用,无需端口定义
  • 无状态设计:纯函数调用,无内部状态维护

3.3 库实现要求

IFX库的实现必须遵循以下要求:

  • 代码共享:库代码应实现为可在不同内存分区的调用者之间共享
  • 避免宏:应避免使用宏,函数应声明为函数或内联函数
  • 函数调用限制:库函数可以调用其他库函数,但不能调用任何BSW模块函数
  • 编码标准:应符合MISRA C标准
  • 内存映射:使用AUTOSAR内存映射机制映射代码到内存段
  • 标准类型:包含StandardTypes.h头文件,使用AUTOSAR整数数据类型
  • 平台独立性:避免直接使用编译器和平台特定关键字

4. 例程规范

4.1 数据类型

IFX库使用的数据类型及助记符:

  • 布尔类型boolean,值为TRUE或FALSE
  • 有符号整型
    • sint8/s8:范围[-128, 127]
    • sint16/s16:范围[-32768, 32767]
    • sint32/s32:范围[-2147483648, 2147483647]
  • 无符号整型
    • uint8/u8:范围[0, 255]
    • uint16/u16:范围[0, 65535]
    • uint32/u32:范围[0, 4294967295]

这些助记符用在例程名称中表示输入和输出类型。

4.2 舍入规则

IFX库中的舍入规则:

  • 向零舍入
    • 0 ≤ X < 1 舍入为 0
    • -1 < X ≤ 0 舍入为 0
  • 插值计算中的舍入:插值计算中的中间结果应向零舍入

4.3 目标优化

IFX库支持两种优化方式:

  1. 目标优化

    • 部分例程可被另一个使用整数提升的例程替代
    • 部分例程可被限制例程和不同签名的例程组合替代
  2. 例程数量优化

    • 通过交换’X’和’Y’数据类型减少例程总数
    • 优化规则:
      • 规则1:较大数据类型优先(16位优先于8位)
      • 规则2:无符号类型优先于有符号类型(u16优先于s16)
    • 数据类型优先级:u32, s32, u16, s16, u8, s8

4.4 特殊情况处理

IFX库对特殊情况的处理规定:

  • 输入值小于第一个分布条目:返回或使用分布数组的第一个值
  • 输入值大于最后一个分布条目:返回或使用分布数组的最后一个值
  • 轴分布要求:传递给Ifx例程的轴分布必须具有严格单调序列

5. 总结

AUTOSAR固定点插值库(IFX)是AUTOSAR平台中的基础组件,提供了一系列用于固定点数学运算和插值的功能。它的设计特点包括:

  • 无状态设计:纯函数调用,无需初始化和关闭阶段
  • 错误处理简化:不依赖DET,直接返回规范指定的错误值
  • 优化灵活:支持多种优化方式,适应不同目标平台
  • 标准遵循:符合MISRA C 2012标准,使用AUTOSAR标准数据类型
  • 特殊情况处理:对边界情况有明确定义的处理方式

IFX库作为AUTOSAR平台的基础库,为各种数值计算提供支持,包括插值、查表和数据点搜索等功能,适用于需要高效固定点数学计算的各种应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KaiGer666

慧眼~施主!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值