当前位置:   article > 正文

IsolarAB导出arxml到Matlab/Simulink生成模型并配置内存分区_mbd的swaddrmethods

mbd的swaddrmethods

本文以一个简单的示例说明如何通过Isolar设计的SWC arxml导入到simulink中生成模型,并指定simulink生成的代码带内存分区信息。本文创建的SWC叫做ECAS_Sensor_SWC, 主要作用是对传感器信号进行处理和传递给后级SWC使用。

1. solarAB修改PlatformBase_Types.arxml文件

对IsolarAB AUTOSAR_Platform/BaseTypes(定义位于PlatformBase_Types.arxml)下面的基础数据类型添加如图所示NativeDeclaration属性。

在这里插入图片描述
添加完成后浏览Isolar工程下的PlatformBase_Types.arxml文件可以看到数据类型定义下多出了NativeDeclaration属性, 该属性为导入Simulink必要属性。
在这里插入图片描述

2. 创建必要的ImplementationDataTypes

创建ImplementationDataTypes请使用前缀IDT_, 同时新建一个DataTypes.arxml, 之后将所有DataTypes, ComputeMethods都放入该文件。
在这里插入图片描述
在这里插入图片描述
将ImplementationDataTypes类型设置为VALUE, 并选择对应的BaseType(这里有3个,需确定选择的定义位于Platform_BaseType.arxml)。

3.创建必要的Interfaces

创建Interface请使用前缀SRI/CSI, 同时新建一个Intefaces.arxml, 之后将所有Interface都放入该文件(至少是ASW所需的)。
在这里插入图片描述

4.为SR Interfaces添加必要的数据元素

在这里插入图片描述

5.对Component进行建模

这里以ECAS_Sensor_SWC为例, 每个SWC的描述文件(arxml)保持独立,名字保持默认。
在这里插入图片描述
创建Port, 其中RequestPort加前缀RP_,ProviderPort加前缀PP_。
在这里插入图片描述
创建如图所示的两个Runable。
在这里插入图片描述
创建对应Runable的Event。
在这里插入图片描述
指定Runable的DataAcess。
在这里插入图片描述

6.将Arxml导入Matlab并自动创建Simulink模型

首先新建一个工作文件夹, 并将工作区设置为该文件夹。
在这里插入图片描述
在该文件夹下新建一个子文件夹Arxml。
在这里插入图片描述
将Isolar工程下的PlatformBase_Types.arxml, Platform_Types.arxml, DataType
s.arxml, Intefaces.arxml, 以及XX_SWC.arxml放入该文件夹。
其中XX_SWC.arxml描述了SWC的名字, Port, Runable, Runable触发事件, Port引用的Inteface, 以及读写的DataElement等信息。
而Intefaces.arxml则是对Intefaces即其数据元素的具体描述, 同时数据元素的变量类型描述位于PlatformBase_Types.arxml文件, 这里的Platform_Types.arxml暂时没用到。
在这里插入图片描述
在工程根文件夹下创建一个.m函数, 方便自动生成模型,里面添加代码:

function CreateModefromArxml(modeName)
arxmlDir = './Arxml/';
platformTypeArxmlPath = strcat(arxmlDir,'Platform_Types.arxml');
platformBaseTypeArxmlPath = strcat(arxmlDir,'PlatformBase_Types.arxml');
interfaceArxmlPath = strcat(arxmlDir,'Interfaces.arxml');
dataTypeArxmlPath = strcat(arxmlDir,'DataTypes.arxml');
modeArxmlPath = strcat(arxmlDir,'SwComponentTypes_',modeName,'.arxml');
ar = arxml.importer({platformTypeArxmlPath,platformBaseTypeArxmlPath,interfaceArxmlPath,dataTypeArxmlPath,modeArxmlPath});
names=getComponentNames(ar);
createComponentAsModel(ar,names{1,1},'ModelPeriodicRunnablesAs','FunctionCallSubsystem');
end

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

将各个arxml中头部的AUTOSAR_00047改为AUTOSAR_00042, 因为2019b最高识别的AUTOSAR版本为4.2。
在这里插入图片描述
使用时直接在对话框输入CreateModefromArxml(‘ECAS_Sensor_SWC’);
在这里插入图片描述
生成的模型.slx如图所示。其中各种Autosar定义和Mapping都已经自动生成。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果有接口修改, Compnent重定义, 数据类型重定义等只需通过替换对应的arxml文件, 并通过自定义的Function UpdateAutosarMode更新模型即可, 其.m代码如下:

function UpdateAutosarMode(modeName)
arxmlDir = './Arxml/';
platformTypeArxmlPath = strcat(arxmlDir,'Platform_Types.arxml');
platformBaseTypeArxmlPath = strcat(arxmlDir,'PlatformBase_Types.arxml');
interfaceArxmlPath = strcat(arxmlDir,'Interfaces.arxml');
dataTypeArxmlPath = strcat(arxmlDir,'DataTypes.arxml');
modeArxmlPath = strcat(arxmlDir,'SwComponentTypes_',modeName,'.arxml');
ar = arxml.importer({platformTypeArxmlPath,platformBaseTypeArxmlPath,interfaceArxmlPath,dataTypeArxmlPath,modeArxmlPath});
open_system(modeName);
updateModel(ar,modeName);
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

将工作区生成的DataTypes保存到DataTypes.mat, 这样重新开启Matlab只用点击这个文件就会自动加载数据类型定义(通过arxml生成), 否则下次重新打开Matlab会丢失如IDT_Temperature的定义, 只能通过重新使用CreateModefromArxml生成。
在这里插入图片描述

7. 为Simulink模型创建自定义Storage class

命令行输入:
demoPath = ‘\toolbox\simulink\simdemos\dataclasses’;
cd([matlabroot,demoPath]);
在这里插入图片描述
将该文件夹整体复制到自己的工程目录。将工程目录下该文件夹改名。
在这里插入图片描述
修改Signal.m和Parameter.m中的如下段:
在这里插入图片描述
在这里插入图片描述
替换成MyAutosarPackage
命令行输入:
cscdesigner(‘MyAutosarPackage’);打开如下界面。
在这里插入图片描述
删除掉默认的Custom Storage Class和Memory Section。添加如图所示几个Memory Section。
在这里插入图片描述
其中CONST_UNSPECIFIED来存放所有未通过SwAddrMethod指定的rodata段, CODE用来存放所有未通过SwAddrMethod指定的code段, VAR_CLEARED_UNSPECIFIED用来存放所有未通过SwAddrMethod指定的bss段, VAR_INIT_UNSPECIFIED用来存放所有未通过SwAddrMethod指定的data段。
这里的未通过SwAddrMethod指定的段是指生成代码时无法通过SwAddrMethod分配的段, 比如Chart的内部状态记录/延迟相关变量, 不包括在Runbable里的SWC内部函数等。
为了举例我们在模型中新建一个Memory模块。
在这里插入图片描述
该模块关联的变量生成在default storage,无法做Memmap。
在这里插入图片描述
展开Code Generation, 点击Package右边的Refresh package list选项。
在这里插入图片描述
选择我们创建的MyAutosarPackage。
在这里插入图片描述
进行如设置,再次生成代码。
在这里插入图片描述
该变量已经分配好了内存分区, 可以通过ECAS_Sensor_SWC_MemMap.h进行实际编译时的段地址指定。
在这里插入图片描述
同样封装一个SWC内部使用的函数。
在这里插入图片描述
在未做上述设置前, 生成的CODE并未指定内存分区。
在这里插入图片描述
配置后再次生成该函数已经分配在了对应的CODE区, 可以通过ECAS_Sensor_SWC_MemMap.h进行实际编译时的段地址指定。
在这里插入图片描述
下面是其他一些对模型的设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
未做说明的设置可按照生成模型时的默认配置。

8.为Simulink模型指定SwAddrMethod

Runable Body等如果不指定SwAddrMethod,并不会生成在通过Code Generation->Memory Section指定的Default内存段。
在这里插入图片描述
打开AUTOSAR Dictionary, 新建一个如图所示的SwAddrMethods->CODE。
在这里插入图片描述
在底部Code Mapping处选中一个Runable, 并在右侧Property Inspector中的SwAddrMethod选项修改为CODE, 同理其他Runable都修改。
在这里插入图片描述
可以看到新生成的Runable已经分配到了对应的CODE段。
在这里插入图片描述
在AUTOSAR Dictionary, 新建一个如图所示的SwAddrMethods-> CALIB_UNSPECIFIED, 用来指定标定变量。
在这里插入图片描述
在Mode Workspace中新建一个Simulink.Parameter, Param_0,并在模型中使用它。
在这里插入图片描述
在底部Code Mapping处选中该Param, 修改为ConstantMemory,并在右侧Property
Inspector中的SwAddrMethod选项修改为CALIB_UNSPECIFIED, 勾选Const == TRUE, Volatile == TRUE, 同理其他标定变量都同样修改。生成的代码如下图所示。
在这里插入图片描述
在这里插入图片描述
在AUTOSAR Dictionary, 新建一个如图所示的SwAddrMethods-> MEASURABLE_CLEARED_UNSPECIFIED, 用来指定测量变量。
在这里插入图片描述
在Mode Workspace中新建一个Simulink.Signal, Moni_0,并在模型中使用它。
在这里插入图片描述
在这里插入图片描述
在底部Code Mapping处选中该Signals, 修改为StaticMemory,并在右侧Property Inspector中的SwAddrMethod选项修改为MEASURABLE_CLEARED_UNSPECIFIED, Volatile == TRUE, 其他测量变量都同样修改。生成的代码如下图所示。
在这里插入图片描述
在这里插入图片描述

9. 总结

导入arxml生成Simulink模型时需要导入必要的DataType,Interface, SWC信息。
对生成代码指定内存分区主要分为两类, 一类是需要通过SwAddrMethod指定的(Runable, 标定测量变量), 另一类保持默认的Default设置, 但是需要设计
MemoryPackage(Storage class)以更改default storage位置,最终要求生成的代码中所有变量, 代码都包含在宏:

#define %<AUTOSAR_COMPONENT>_START_SEC_%<MemorySectionName>
#include "%<AUTOSAR_COMPONENT>_MemMap.h"

#define %<AUTOSAR_COMPONENT>_STOP_SEC_%<MemorySectionName>
#include "%<AUTOSAR_COMPONENT>_MemMap.h"
  • 1
  • 2
  • 3
  • 4
  • 5

中间。
这样可以通过Cobara脚本生成的%<AUTOSAR_COMPONENT>_MemMap.h实现编译链接时对具体内存段在hex文件中和下载时地址的指定, 这样做的好处是便于进行分段更新(Bootloader)以及配置OS级别的内存保护。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/514093
推荐阅读
相关标签
  

闽ICP备14008679号