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

【AUTOSAR开发实战】(3)Data Type及Constants

文章目录

    • 一、Type Mapping Sets
    • 二、Data Type
      • 1.Application Data Types
      • 2.Implementation Data Types
      • 3.Base Types
      • 4.Units
      • 5.Compu Method
        • a) **Identical(恒等转换)**
        • b)Linear(线性转换)
        • c)**Scale-Linear(分段线性转换)**
        • d)**TextTable(文本映射表)**
        • e)Scale-LinearAndTextTable(混合转换)
        • f)BitfieldTextTable(位域文本映射)
      • 6.Data Contraints(数据约束)
      • 7.Constants
      • image-20260228151953709

一、Type Mapping Sets

​ 在介绍Data Type及Constants之前我们先来介绍一下Type Mapping Sets(在上一篇SWC的介绍中我们也提到过这个)

​ 我们可以把Type Mapping Sets 当成是一本字典,它会把我们developer对应的arxml文件里的内容翻译成C语言的格式,例如名为APP_MaappingSet的一个Type Mapping Sets,在arxml文件中的格式如下。

​ 其中提到的AdtVehicleType是一个应用层记录数据类型(可以理解为即结构体),在c语言中直接映射到基础实现类型float32;而AdtM_Type在C语言中,映射到自定义的实现数据类型(IDT)IdtM_ype 。

<AR-PACKAGE> <SHORT-NAME>DataTypeMappingSets</SHORT-NAME> <ELEMENTS> <DATA-TYPE-MAPPING-SET > <SHORT-NAME>APP_MaappingSet</SHORT-NAME> <DATA-TYPE-MAPS> <DATA-TYPE-MAP> <!-- ARXML中的类型... --> <APPLICATION-DATA-TYPE-REF DEST="APPLICATION-PRIMITIVE-DATA-TYPE">/DataTypes/AdtVehicleType</APPLICATION-DATA-TYPE-REF> <!-- C语言中的类型 --> <IMPLEMENTATION-DATA-TYPE-REF DEST="IMPLEMENTATION-DATA-TYPE">/AUTOSAR_Platform/ImplementationDataTypes/sint16</IMPLEMENTATION-DATA-TYPE-REF> </DATA-TYPE-MAP> <DATA-TYPE-MAP> <!-- ARXML中的类型... --> <APPLICATION-DATA-TYPE-REF DEST="APPLICATION-RECORD-DATA-TYPE">/DataTypes/AdtM_Type</APPLICATION-DATA-TYPE-REF> <!-- C语言中的类型 --> <IMPLEMENTATION-DATA-TYPE-REF DEST="IMPLEMENTATION-DATA-TYPE">/DataTypes/IdtM_Type</IMPLEMENTATION-DATA-TYPE-REF> </DATA-TYPE-MAP> …… </DATA-TYPE-MAPS> </DATA-TYPE-MAPPING-SET> </ELEMENTS> </AR-PACKAGE>

二、Data Type

Autosar的数据类型共有七种:

1.Application Data Types

​ 面向业务的抽象数据类型定义,定义数据在应用层的意义和约束。所以当数据原型具备明确的物理意义时,通常采用ADT。我们现在基本不使用ADT,如果需要结构体使用IDT,不需要的话就直接定义普通类型。

2.Implementation Data Types

定义数据在内存中的实际表示。

例如,我们要新建一个Record类型的IDT,包含三个element。

#defineRte_TypeDef_IdtAsw_Inttypedefstruct{Rte_DT_IdtAsw_Int_0 demo_a_u16;Rte_DT_IdtAsw_Int_1 demo_b_u16;Rte_DT_IdtAsw_Int_2 demo_cu16;}IdtAsw_Int;

​ 上文提到的AdtM_Type关联IdtM_Type,可以在Type Mapping Sets中新建一个map,选择Data Type Maps,将这二者关联起来。

3.Base Types

包括通常使用的boolean、float、sint(有符号整型)、uint(无符号整型)等。

4.Units

数据的物理单位,用于标定、测量和显示,如km、s、°等

5.Compu Method

定义原始值物理值之间的转换关系,不仅仅是宏定义,而是完整的转换方法。

主要有以下六种类型:

a)Identical(恒等转换)

原始值 = 物理值(不转换)

b)Linear(线性转换)

线性比例转换:物理值 = 系数a × 内部值 + 偏移量b

c)Scale-Linear(分段线性转换)

不同区间使用不同的线性转换公式

例如:

内部值区间 0-100: 温度 = 0.1 × 内部值 - 40 内部值区间 100-1000: 温度 = 0.15 × 内部值 - 50
d)TextTable(文本映射表)

将数字映射为有意义的字符串

例如:

<SHORT-NAME>CompuMethods</SHORT-NAME> <ELEMENTS> <COMPU-METHOD> <SHORT-NAME>boolean_CompuMethod</SHORT-NAME> <CATEGORY>TEXTTABLE</CATEGORY> <COMPU-INTERNAL-TO-PHYS> <COMPU-SCALES> <COMPU-SCALE> <SHORT-LABEL>FALSE</SHORT-LABEL> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">0</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">0</UPPER-LIMIT> <COMPU-CONST> <VT>FALSE</VT> </COMPU-CONST> </COMPU-SCALE> <COMPU-SCALE> <SHORT-LABEL>TRUE</SHORT-LABEL> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">1</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">1</UPPER-LIMIT> <COMPU-CONST> <VT>TRUE</VT> </COMPU-CONST> </COMPU-SCALE> </COMPU-SCALES> </COMPU-INTERNAL-TO-PHYS> </COMPU-METHOD> </ELEMENTS> </AR-PACKAGE>

状态显示(0=故障,1=正常)

模式选择(0=自动,1=手动)

e)Scale-LinearAndTextTable(混合转换)

数值+文本混合转换:既有线性转换,又有文本映射

例如:

<SHORT-NAME>ADASTorqueLimit</SHORT-NAME> <CATEGORY>SCALE_LINEAR_AND_TEXTTABLE</CATEGORY> <UNIT-REF DEST="UNIT">/DataType/Unit/U_Nm</UNIT-REF> <COMPU-INTERNAL-TO-PHYS> <COMPU-SCALES> <!-- 区间1:文本映射(特殊状态) --> <COMPU-SCALE> <LOWER-LIMIT>65535</LOWER-LIMIT> <UPPER-LIMIT>65535</UPPER-LIMIT> <COMPU-CONST> <VT>CxFFFF_NotAvailalble</VT> </COMPU-CONST> </COMPU-SCALE> <!-- 区间2:线性转换(正常数据范围) --> <COMPU-SCALE> <LOWER-LIMIT>0</LOWER-LIMIT> <UPPER-LIMIT>61255</UPPER-LIMIT> <COMPU-RATIONAL-COEFFS> <COMPU-NUMERATOR> <V>0</V> <!-- 偏移量 --> <V>0.08</V> <!-- 系数 --> </COMPU-NUMERATOR> <COMPU-DENOMINATOR> <V>1</V> </COMPU-DENOMINATOR> </COMPU-RATIONAL-COEFFS> </COMPU-SCALE> </COMPU-SCALES> </COMPU-INTERNAL-TO-PHYS> </COMPU-METHOD>
  • 两种区间完整展示

    -线性转换区间0-61255带系数0.08
    -文本映射区间65535映射到"CxFFFF_NotAvailable"

f)BitfieldTextTable(位域文本映射)

位域到文本的映射:一个字节的不同bit代表不同的状态

例如:

<SHORT-NAME>UDSSTATUSBYTETYPE</SHORT-NAME> <CATEGORY>BITFIELD_TEXTTABLE</CATEGORY> <COMPU-INTERNAL-TO-PHYS> <COMPU-SCALES> <!-- 8个位域定义,每个bit对应一个状态 --> <!-- Bit 0(最低位) --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_testFailed</SHORT-LABEL> <SYMBOL>UDS_STATUS_testFailed</SYMBOL> <MASK>1</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">1</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">1</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 1 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_testFailedThisOperationCycle</SHORT-LABEL> <SYMBOL>UDS_STATUS_testFailedThisOperationCycle</SYMBOL> <MASK>2</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">2</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">2</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 2 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_pendingDTC</SHORT-LABEL> <SYMBOL>UDS_STATUS_pendingDTC</SYMBOL> <MASK>4</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">4</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">4</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 3 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_confirmedDTC</SHORT-LABEL> <SYMBOL>UDS_STATUS_confirmedDTC</SYMBOL> <MASK>8</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">8</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">8</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 4 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_testNotCompletedSinceLastClear</SHORT-LABEL> <SYMBOL>UDS_STATUS_testNotCompletedSinceLastClear</SYMBOL> <MASK>16</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">16</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">16</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 5 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_testFailedSinceLastClear</SHORT-LABEL> <SYMBOL>UDS_STATUS_testFailedSinceLastClear</SYMBOL> <MASK>32</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">32</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">32</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 6 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_testNotCompletedThisOperationCycle</SHORT-LABEL> <SYMBOL>UDS_STATUS_testNotCompletedThisOperationCycle</SYMBOL> <MASK>64</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">64</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">64</UPPER-LIMIT> </COMPU-SCALE> <!-- Bit 7 --> <COMPU-SCALE> <SHORT-LABEL>UDS_STATUS_warningIndicatorRequested</SHORT-LABEL> <SYMBOL>UDS_STATUS_warningIndicatorRequested</SYMBOL> <MASK>128</MASK> <LOWER-LIMIT INTERVAL-TYPE="CLOSED">128</LOWER-LIMIT> <UPPER-LIMIT INTERVAL-TYPE="CLOSED">128</UPPER-LIMIT> </COMPU-SCALE> </COMPU-SCALES> </COMPU-INTERNAL-TO-PHYS> </COMPU-METHOD>

6.Data Contraints(数据约束)

数据约束:定义数据的有效范围

7.Constants

​ 常量总是通过名称、值和描述来定义。比如,我们为上文新建的Record类型的IDT创建constants,即为其定义初始值,选择New Record Constant

其中New Array Constant,数组常量是用于定义相同数据类型元素集合的常量。

New Record Constant记录常量是用于定义不同数据类型元素集合的常量,类似于C语言中的结构体(struct),用于组合多个相关但类型可能不同的数据。因而这里我们使用Record Constant

<SHORT-NAME>CAsw_Int</SHORT-NAME> <VALUE-SPEC> <RECORD-VALUE-SPECIFICATION> <FIELDS> <NUMERICAL-VALUE-SPECIFICATION> <SHORT-LABEL>demo_a_u16</SHORT-LABEL> <VALUE>1</VALUE> </NUMERICAL-VALUE-SPECIFICATION> <NUMERICAL-VALUE-SPECIFICATION> <SHORT-LABEL>demo_b_u16</SHORT-LABEL> <VALUE>1</VALUE> </NUMERICAL-VALUE-SPECIFICATION> <NUMERICAL-VALUE-SPECIFICATION> <SHORT-LABEL>demo_c_u16</SHORT-LABEL> <VALUE>0</VALUE> </NUMERICAL-VALUE-SPECIFICATION> </FIELDS> </RECORD-VALUE-SPECIFICATION> </VALUE-SPEC> </CONSTANT-SPECIFICATION> <CONSTANT-SPECIFICATION UUID="6 CATION> <SHORT-LABEL>demo_c_u16</SHORT-LABEL> <VALUE>0</VALUE> </NUMERICAL-VALUE-SPECIFICATION> </FIELDS> </RECORD-VALUE-SPECIFICATION> </VALUE-SPEC> </CONSTANT-SPECIFICATION> <CONSTANT-SPECIFICATION UUID="6
http://www.jsqmd.com/news/483609/

相关文章:

  • Fish Speech 1.5高算力适配:4–6GB显存高效运行CUDA 12.4优化方案
  • 小白也能用:Qwen3本地字幕生成工具部署指南,纯离线保护隐私
  • 通过测试-时强化学习实现即时VLA自适应
  • Python学习(二)接(一)
  • 基于 Hardhat + OpenZeppelin + MetaMask 钱包 开发的极简去中心化应用(DApp)demo
  • Z-Image-Turbo极速引擎揭秘:Jimeng AI Studio中Diffusers定制化改造
  • WindTerm 分窗功能:终端多任务的神器
  • 【临床数据挖掘黄金法则】:20年三甲医院R语言实战总结的7个避坑指南
  • OpenClaw对接飞书全攻略:手把手教你做个 AI 助手
  • Windows11系统下如何将Chrome设置为默认浏览器的完整指南
  • Janus-Pro-7B部署案例:中小企业低成本接入多模态AI能力
  • 香橙派5的开发测试(三)
  • 威联通QNAP通过Container快速部署Tranmission及美化UI实战
  • 服务拆分策略与领域驱动设计
  • 伏羲天气预报国产软件栈:全栈国产化(OpenEuler+MindSpore)适配
  • 手机隐藏技巧|解锁90%人不知道的实用功能,用机效率翻倍
  • OpenClaw 快速上手:1 分钟玩转你的专属 AI 助手
  • 泰山派OpenClaw飞书通道配置实战:从应用创建到机器人对话全流程
  • OpenClaw从入门到精通:25 个 Tools + 53 个 Skills 完整指南
  • R 4.5新时空引擎深度解析:如何用sf + stars + tmap 3步生成可交互时空热力图?
  • 海康摄像头SDK跨平台开发实战:Linux与Windows兼容性深度解析
  • Servlet工作原理与注解
  • Redis命令-Hash命令
  • SpringBoot与RocketMQ深度整合:多连接配置与动态Topic处理实战
  • 通过Linux Deploy在旧Android设备上搭建轻量级Linux开发环境
  • WIN10系统解决ST-LINK V2 驱动安装失败数字签名问题
  • TongWeb7在国产操作系统上的安装与配置实战指南
  • 基于N32G430的USB供电参数监测终端设计
  • 2026精选课题-基于springboot美食菜谱分享平台的设计与实现
  • SecGPT-14B开源可部署:提供完整Dockerfile与build.sh,支持离线环境重建镜像