文章目錄
- 前言
- 觀測量定義
- 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信息~