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

Autosar RTE实现观测量生成-基于ETAS软件

文章目录

    • 前言
    • 观测量定义
      • arTypedPerInstanceMemory
      • Ports Measurable
    • 工具链配置及使用
      • Port中的配置
      • arTypedPerInstanceMemory观测量
    • 生成文件分析
    • 总结

前言

之前我们在XCP中,对于标定量和观测量并没有严格按照Autosar标准中定义,Autosar RTE中对标定量和观测量都有对应的定义,本文基于标准介绍观测量在ETAS软件中的实现。

观测量定义

RTE中提供几种观测的方式:

  1. communication between Ports Measurable are
    • VariableDataPrototypes of a SenderReceiverInterface used in
    a PortPrototype (of a SwComponentPrototype) to capture sender receiver communication or between SwComponentPrototypes
    • VariableDataPrototypes of a NvDataInterface used in a PortPrototype (of a SwComponentPrototype) to capture non volatile data communication or between SwComponentPrototypes
    • ArgumentDataPrototypes of an ClientServerOperation in a ClientServerInterface to capture client-server communication between SwComponentPrototypes
  2. communication inside of AUTOSAR SW-Cs Measurable are implicitInterRunnableVariable, explicitInterRunnableVariable or arTypedPerInstanceMemory
  3. data structures inside a AUTOSAR NvBlockSwComponent Measurable are ramBlocks and romBlocks of a NvBlockSwComponent’s NvBlock
  4. Communication inside of AUTOSAR Basic Software Modules Measurable are VariableDataPrototypes defined in role of arTypedPerInstanceMemory.

主要就是:
1.SWC中的Port可以作为观测量,CS接口中的参数可以作为观测量

2.SWC内部也可以定义观测量

3.Nvmblock也可以作为观测量

4.BSW模块中的通信变量也可以作为观测量

观测量定义需要在SwDataDefProps中配置swCalibrationAccess,规范原文如下:
在这里插入图片描述
只有配置为readOnly or readWrite的才能作为观测量,否则会被忽略作为观测量

注意:作为观测量后,会生成对应的变量信息到Rte_McSupportData.arxml中以便后面生成a2l

arTypedPerInstanceMemory

该内存定义是ETAS推荐的观测量定义方式,标准中描述如下:在这里插入图片描述
这种方式定义的Memory需要在SwcInternalBehavior中配置

该方式定义的内存需要配置对应的数据类型,实际访问时通过Rte_Pim接口访问在这里插入图片描述
该类型生成的Rte_Pim接口为Rte_Pim_<name>

Ports Measurable

以SenderReceiverInterface为例,只需要设置对应Port中的VariableDataPrototypes中的swCalibrationAccess即可

工具链配置及使用

Port中的配置

对于SenderReceiverInterface的Port,需要配置对应的swCalibrationAccess在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
配置好后即可作为观测量使用

arTypedPerInstanceMemory观测量

需要在InternalBehaviors中配置arTypedPerInstanceMemory
在这里插入图片描述
设置对应Type中的swCalibrationAccess
在这里插入图片描述
需要注意的是:由于设置swCalibrationAccess是针对于ImplementationDataTpye的,如果多个Port引用了同一个ImplementationDataTpye,则可能会出现不期望观测的变量或者不存在的变量做为观测量出现。

配置好后,需要进行EcuExtract,然后生成RTE

生成文件分析

对于Port中的观测量来说,之前已经有了对应的变量,现在只是生成对应的a2l所需的信息到Rte_McSupportData.arxml中

                           <MC-DATA-INSTANCE><!--This is Sender-Receiver DataItem /Interfaces/ETAS_SenderReceiverInterface_sint8/sint8 in port /ETAS_BIP/INP_SWC/PP_Bsw_AmbTemp on Application Software Component Instance /SUM_FlatView/SwComponentTypes/SUM_FlatView/CPT_INP_SWC--><!--Reported because the data prototype is marked as measurable and is referenced by a FlatInstanceDescriptor and RTE measurement support is enabled--><SHORT-NAME>sint8</SHORT-NAME><LONG-NAME><L-4 L="EN">signed integer 8bit</L-4></LONG-NAME><CATEGORY>VALUE</CATEGORY><ADMIN-DATA><SDGS><SDG GID="ETAS-RTARTE"><SD GID="MC-DATA-CLASS">DATA-ITEM</SD></SDG></SDGS></ADMIN-DATA><FLAT-MAP-ENTRY-REF DEST="FLAT-INSTANCE-DESCRIPTOR">/SUM_FlatView/SUM_FlatMap/sint8</FLAT-MAP-ENTRY-REF><RESULTING-PROPERTIES><SW-DATA-DEF-PROPS-VARIANTS><SW-DATA-DEF-PROPS-CONDITIONAL><BASE-TYPE-REF BASE="Rte_MCSD_SwBaseTypes" DEST="SW-BASE-TYPE">AUTOSAR_PlatformTypes_SwBaseTypes_sint8</BASE-TYPE-REF><SW-CALIBRATION-ACCESS>READ-ONLY</SW-CALIBRATION-ACCESS><SW-REFRESH-TIMING><CSE-CODE>4</CSE-CODE><CSE-CODE-FACTOR>1</CSE-CODE-FACTOR></SW-REFRESH-TIMING></SW-DATA-DEF-PROPS-CONDITIONAL></SW-DATA-DEF-PROPS-VARIANTS></RESULTING-PROPERTIES><SYMBOL>Rte_Ms_000042</SYMBOL></MC-DATA-INSTANCE>

例如,此处关联的变量为Rte_Ms_000042,后面会通过该文件生成a2l

对于arTypedPerInstanceMemory观测量,生成的代码示例如下:

#define RTE_START_SEC_EcucPartition_ComCore_VAR_CLEARED_32
#include "Rte_MemMap.h"
VAR(uint32, RTE_APPL_DATA) Rte_ArPim_INP_SWC_TestMea;
#define RTE_STOP_SEC_EcucPartition_ComCore_VAR_CLEARED_32
#include "Rte_MemMap.h"

对应变量的命名为Rte_ArPim_+SWC名+定义的变量名

对应的SWC的RTE头文件中,生成了对应的接口函数

#define Rte_Pim_TestMea()  ( (P2VAR(uint32, AUTOMATIC, RTE_APPL_DATA)) &Rte_ArPim_INP_SWC_TestMea )

后面在SWC中通过Rte_Pim_TestMea访问变量的地址,进而访问其中的数据

示例访问如下:

uint32* Pim_TestMea;
Pim_TestMea = Rte_Pim_TestMea();

生成的a2l信息如下:

                           <MC-DATA-INSTANCE><!--This is ArTyped Per-Instance Memory /ETAS_BIP/INP_SWC/IB_INP_SWC/TestMea on Application Software Component Instance /SUM_FlatView/SwComponentTypes/SUM_FlatView/CPT_INP_SWC--><!--Reported because the ArTyped PIM is marked as measurable and RTE measurement support is enabled--><SHORT-NAME>TestMea</SHORT-NAME><LONG-NAME><L-4 L="EN">unsigned integer 32bit</L-4></LONG-NAME><CATEGORY>VALUE</CATEGORY><ADMIN-DATA><SDGS><SDG GID="ETAS-RTARTE"><SD GID="MC-DATA-CLASS">AR-TYPED-PER-INSTANCE-MEMORY</SD></SDG></SDGS></ADMIN-DATA><FLAT-MAP-ENTRY-REF DEST="FLAT-INSTANCE-DESCRIPTOR">/SUM_FlatView/SUM_FlatMap/TestMea</FLAT-MAP-ENTRY-REF><RESULTING-PROPERTIES><SW-DATA-DEF-PROPS-VARIANTS><SW-DATA-DEF-PROPS-CONDITIONAL><BASE-TYPE-REF BASE="Rte_MCSD_SwBaseTypes" DEST="SW-BASE-TYPE">AUTOSAR_Platform_BaseTypes_uint32</BASE-TYPE-REF><SW-CALIBRATION-ACCESS>READ-ONLY</SW-CALIBRATION-ACCESS><SW-REFRESH-TIMING><CSE-CODE>1000</CSE-CODE><CSE-CODE-FACTOR>1</CSE-CODE-FACTOR></SW-REFRESH-TIMING></SW-DATA-DEF-PROPS-CONDITIONAL></SW-DATA-DEF-PROPS-VARIANTS></RESULTING-PROPERTIES><SYMBOL>Rte_ArPim_INP_SWC_TestMea</SYMBOL></MC-DATA-INSTANCE>

后面可以通过RTA-A2L工具将Rte_McSupportData.arxml中的变量生成到a2l中,然后就是更新a2l中的地址信息了。

生成的a2l MEASUREMENT 示例如下:
···
/begin MEASUREMENT Rte_ArPim_INP_SWC_TestMea
“unsigned integer 32bit”
ULONG
NO_COMPU_METHOD
0
0
0
4294967295
DISPLAY_IDENTIFIER TestMea
ECU_ADDRESS 0x00000000
MAX_REFRESH 1000
1
/end MEASUREMENT
···

总结

通过Autosar工具链的方式,可以自动生成对应的A2L信息,但开发过程中很多时候都会加一些全局变量来调试,一般手动添加一次a2l,也不会有太大的工作量,反而用工具生成可能更加麻烦一些。对于应用层开发有大量观测量的,可以使用Simulink来生成对应的a2l信息~

http://www.lryc.cn/news/593849.html

相关文章:

  • MYSQL:从增删改查到高级查询
  • 技术演进中的开发沉思-40 MFC系列:多线程协作
  • [特殊字符] 小程序 vs 智能体:下一代应用开发,谁主沉浮?
  • 社交圈子系统开源社交源码 / 小程序+H5+APP 多端互通的底层技术分析
  • 分享如何在保证画质的前提下缩小视频体积实用方案
  • 敏捷开发的历史演进:从先驱实践到全域敏捷(1950s-2025)
  • Hiredis 构建 Redis 命令实战指南
  • 音视频学习(四十一):H264帧内压缩技术
  • 【AI】文生图文生视频
  • 吴恩达机器学习笔记(3)—线性代数回顾(可选)
  • 17.TaskExecutor与ResourceManager交互
  • 微服务雪崩防护最佳实践之sentinel
  • ThinkSound:阿里开源首个“会思考”的音频生成模型——从“看图配音”到“听懂画面”的技术跃迁
  • SpringBoot 整合 Langchain4j 实现会话记忆存储深度解析
  • Node.js 与 Java 性能对比
  • 【Kafka】深入理解 Kafka MirrorMaker2 - 实战篇
  • Node.js v20.19.4 (LTS)升级
  • Python模块和包
  • 【PTA数据结构 | C语言版】邻接矩阵表示的图基本操作
  • simulink系列之模型接口表生成及自动连线脚本
  • LeetCode|Day19|14. 最长公共前缀|Python刷题笔记
  • CSS篇——第一章 六十五项关键技能(上篇)
  • Python高级数据类型:集合(Set)
  • 【通识】PCB文件
  • 【Linux服务器】-MySQL数据库参数调优
  • day11 ADC
  • 深入解析Linux文件重定向原理与dup2系统调用
  • MyBatis之缓存机制详解
  • 立创EDA中双层PCB叠层分析
  • 如何快速学习一门新技术