当前位置: 首页 > ds >正文

AUTOSAR图解==>AUTOSAR_SWS_StandardTypes

AUTOSAR 标准类型规范

AUTOSAR 标准类型详解与实现

目录

  • 1. 概述
    • 1.1 功能概览
    • 1.2 标准类型的作用
  • 2. 标准类型架构
    • 2.1 软件架构中的位置
    • 2.2 文件包含关系
  • 3. 标准类型详细内容
    • 3.1 类型结构
    • 3.2 标准类型定义
    • 3.3 符号定义
  • 4. 约束和限制
    • 4.1 兼容性考虑
    • 4.2 使用规范
  • 5. 总结

1. 概述

1.1 功能概览

AUTOSAR标准类型头文件定义了在AUTOSAR平台的多个基础软件模块之间共享的标准数据类型。这个规范确保了跨平台和编译器的独立性,提供了一个统一的数据类型定义方式。对于AUTOSAR生态系统中的所有开发人员和供应商来说,使用这些标准类型是确保互操作性的关键。

1.2 标准类型的作用

标准类型在AUTOSAR架构中具有以下关键作用:

  • 平台无关性:确保定义的类型在不同硬件平台上具有一致行为
  • 编译器无关性:避免因编译器实现差异导致的类型定义不一致
  • 互操作性:允许不同供应商的组件无缝协作而不必担心类型兼容问题
  • 代码可移植性:通过使用标准类型,使代码可以更容易地在不同的ECU间移植

标准类型的统一定义是AUTOSAR实现"一次开发,多处部署"愿景的基础。


2. 标准类型架构

2.1 软件架构中的位置

AUTOSAR标准类型在整个软件架构中占据核心位置,被应用层、RTE和各个基础软件模块共同使用。下图展示了标准类型在AUTOSAR软件架构中的位置:

在这里插入图片描述

从上图中可以看出:

  1. StandardTypes.h

    • 定义平台和编译器无关的标准类型
    • 被所有基础软件模块包含
    • 确保类型在AUTOSAR社区中的一致性
    • 防止供应商切换导致的类型变化
  2. ComStackTypes.h

    • 包含通信相关的类型定义
    • 包含StandardTypes.h
    • 被通信栈模块引用
  3. 应用层组件通过RTE使用这些标准类型,而基础软件层中的各种服务和抽象层直接包含这些类型定义。

这种结构确保了从应用层到微控制器抽象层的所有模块都使用相同的类型定义,为整个AUTOSAR架构提供了统一的类型系统基础。

2.2 文件包含关系

标准类型的包含关系遵循特定的规则,下图展示了AUTOSAR中文件包含的层次结构:

在这里插入图片描述

从包含关系图中可以看出:

  1. StandardTypes.h

    • 包含多重包含保护机制(#ifndef/#define/#endif)
    • 定义所有标准类型
    • 不允许添加项目或供应商特定扩展
  2. ComStackTypes.h

    • 包含StandardTypes.h
    • 添加通信相关的特定类型
    • 同样使用多重包含保护机制
  3. 包含规则

    • 通信相关BSW模块应包含ComStackTypes.h(SWS_Std_00016)
    • 其他BSW模块应直接包含StandardTypes.h

这种包含结构确保了类型定义的一致性,避免了重复包含和定义冲突的问题。


3. 标准类型详细内容

3.1 类型结构

AUTOSAR标准类型包含多种数据类型和符号定义,下图展示了其整体结构:

在这里插入图片描述

标准类型结构主要包括:

  1. 基本类型定义

    • Std_ReturnType:标准返回类型
    • Std_VersionInfoType:版本信息结构
  2. 标准符号定义

    • 状态类型:E_OK/E_NOT_OK
    • 电平类型:STD_HIGH/STD_LOW
    • 活动状态:STD_ACTIVE/STD_IDLE
    • 开关类型:STD_ON/STD_OFF
  3. 文件结构

    • StandardTypes.h:包含所有标准类型定义
    • ComStackTypes.h:包含通信相关类型定义,并包含StandardTypes.h

这些类型和定义共同构成了AUTOSAR软件架构中的基本数据类型系统。

3.2 标准类型定义

标准类型的详细定义如下:

在这里插入图片描述

从图中可以看出以下关键定义:

  1. Std_ReturnType(SWS_Std_00005):

    typedef uint8 Std_ReturnType;
    
    • 用作标准API返回类型
    • 在RTE和BSW模块之间共享
    • 通常与E_OKE_NOT_OK值一起使用
  2. Std_VersionInfoType(SWS_Std_00015):

    typedef struct {uint16 vendorID;uint16 moduleID;uint8 sw_major_version;uint8 sw_minor_version;uint8 sw_patch_version;
    } Std_VersionInfoType;
    
    • 用于通过<Module_Name>_GetVersionInfo()函数获取BSW模块版本信息
  3. OSEK兼容性

    typedef unsigned char StatusType;
    
    • 为保持与OSEK/VDX操作系统的兼容性

3.3 符号定义

标准类型头文件中定义了多种符号常量:

  1. 状态返回值(SWS_Std_00006):

    #ifndef STATUSTYPEDEFINED
    #define STATUSTYPEDEFINED
    #define E_OK 0x00u
    #define E_NOT_OK 0x01u
    #endif
    
    • 使用条件编译避免与OSEK定义冲突
  2. 高低电平(SWS_Std_00007):

    #define STD_HIGH 0x01u /* 物理状态 5V或3.3V */
    #define STD_LOW 0x00u /* 物理状态 0V */
    
  3. 活动/空闲状态(SWS_Std_00013):

    #define STD_ACTIVE 0x01u /* 逻辑状态激活 */
    #define STD_IDLE 0x00u /* 逻辑状态空闲 */
    
  4. 开/关状态(SWS_Std_00010):

    #define STD_ON 0x01u
    #define STD_OFF 0x00u
    

这些标准符号在整个AUTOSAR基础软件中广泛使用,确保了状态表达的一致性。


4. 约束和限制

4.1 兼容性考虑

AUTOSAR标准类型规范在设计时考虑了以下兼容性问题:

  1. 现有代码兼容性

    • 许多符号(如OKNOT_OKONOFF)已在旧代码中定义
    • 冲突问题通过条件编译解决
    • AUTOSAR需要保持与传统ECU的网络兼容性
  2. OSEK兼容性

    • 由于E_OK已在OSEK中定义,StandardTypes.h使用条件编译避免重定义
    • 提供StatusType类型定义确保与OSEK接口一致

4.2 使用规范

使用标准类型时必须遵循以下关键规范:

  1. 不允许扩展(SWS_Std_00004):

    • 禁止向标准类型文件添加任何项目或供应商特定扩展
    • 任何扩展都将破坏AUTOSAR兼容性
  2. 多重包含保护(SWS_Std_00014):

    • 标准类型头文件必须使用以下形式的多重包含保护:
    #ifndef STD_TYPES_H
    #define STD_TYPES_H
    /* 文件内容 */
    #endif /* STD_TYPES_H */
    
  3. 返回值使用(SWS_Std_00011):

    • Std_ReturnType通常应使用E_OKE_NOT_OK
    • 用户可以使用6个最低有效位(值范围0x02-0x3F)定义特定返回值
    • 高两位(Bit 7和Bit 8)由RTE规范保留

5. 总结

AUTOSAR标准类型是整个AUTOSAR基础软件架构的基础组成部分,通过提供统一的类型定义,确保了跨平台和跨编译器的兼容性。标准类型的主要优势包括:

  • 一致性:确保所有模块使用相同的数据类型定义
  • 互操作性:允许不同供应商的软件组件无缝协作
  • 可移植性:简化了软件在不同平台间的移植
  • 可维护性:提供了清晰的类型系统和命名规范

标准类型定义的严格规范确保了AUTOSAR生态系统的健壮性和稳定性,是实现汽车电子系统软件标准化的关键要素。

http://www.xdnf.cn/news/2404.html

相关文章:

  • PotPlayer,强大的高清视频播放器
  • 使用 Spring Boot 进行开发
  • TypeScript基础数据类型详解
  • 多数元素(简单)
  • VSCode远程登录云服务器并设置免密登录全攻略
  • java每日精进 4.26【多租户之过滤器及请求处理流程】
  • llama factory怎么命令行推理图片
  • java—基础
  • A. Everybody Likes Good Arrays!
  • Java 程序运行和类路径处理
  • map和set的应用总结
  • MySQL 常用语句教程
  • Python数值类型修炼手册:从青铜到王者的进阶之路
  • Buffer Pool是什么,有什么作用
  • 【MATLAB第118期】基于MATLAB的双通道CNN多输入单输出分类预测方法
  • Android学习总结之协程对比优缺点(协程一)
  • 腾讯云智三道算法题
  • 侵水防触电的原理是什么? 侵水防触电算先进技术吗?-优雅草卓伊凡
  • 【Redis——通用命令】
  • 写时拷贝讲解
  • SQL:MySQL 函数
  • Eigen库入门
  • 博客文章格式更新2.0
  • N维漂洛界的定义和参数方程
  • 算法设计课作业
  • 【概念】什么是 JWT Token?
  • JAVA多线程(8.0)
  • matlab实现稀疏低秩去噪
  • day7 python针对心脏病数据集预处理
  • Java ThreadLocal与内存泄漏