文章目录
- 前言
- 观测量定义
- arTypedPerInstanceMemory
- Ports Measurable
- 工具链配置及使用
- Port中的配置
- arTypedPerInstanceMemory观测量
- 生成文件分析
- 总结
前言
之前我们在XCP中,对于标定量和观测量并没有严格按照Autosar标准中定义,Autosar RTE中对标定量和观测量都有对应的定义,本文基于标准介绍观测量在ETAS软件中的实现。
观测量定义
RTE中提供几种观测的方式:
- 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 - communication inside of AUTOSAR SW-Cs Measurable are implicitInterRunnableVariable, explicitInterRunnableVariable or arTypedPerInstanceMemory
- data structures inside a AUTOSAR NvBlockSwComponent Measurable are ramBlocks and romBlocks of a NvBlockSwComponent’s NvBlock
- 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信息~