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

这篇具有很好参考价值的文章主要介绍了IsolarAB导出arxml到Matlab/Simulink生成模型并配置内存分区。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1. solarAB修改PlatformBase_Types.arxml文件

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

mbd的swaddrmethods,matlab,汽车,mcu
添加完成后浏览Isolar工程下的PlatformBase_Types.arxml文件可以看到数据类型定义下多出了NativeDeclaration属性, 该属性为导入Simulink必要属性。
mbd的swaddrmethods,matlab,汽车,mcu

2. 创建必要的ImplementationDataTypes

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

3.创建必要的Interfaces

创建Interface请使用前缀SRI/CSI, 同时新建一个Intefaces.arxml, 之后将所有Interface都放入该文件(至少是ASW所需的)。
mbd的swaddrmethods,matlab,汽车,mcu

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

mbd的swaddrmethods,matlab,汽车,mcu

5.对Component进行建模

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

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

首先新建一个工作文件夹, 并将工作区设置为该文件夹。
mbd的swaddrmethods,matlab,汽车,mcu
在该文件夹下新建一个子文件夹Arxml。
mbd的swaddrmethods,matlab,汽车,mcu
将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暂时没用到。
mbd的swaddrmethods,matlab,汽车,mcu
在工程根文件夹下创建一个.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

将各个arxml中头部的AUTOSAR_00047改为AUTOSAR_00042, 因为2019b最高识别的AUTOSAR版本为4.2。
mbd的swaddrmethods,matlab,汽车,mcu
使用时直接在对话框输入CreateModefromArxml(‘ECAS_Sensor_SWC’);
mbd的swaddrmethods,matlab,汽车,mcu
生成的模型.slx如图所示。其中各种Autosar定义和Mapping都已经自动生成。
mbd的swaddrmethods,matlab,汽车,mcu
mbd的swaddrmethods,matlab,汽车,mcu
mbd的swaddrmethods,matlab,汽车,mcu
如果有接口修改, 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

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

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

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

8.为Simulink模型指定SwAddrMethod

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

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"

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

到了这里,关于IsolarAB导出arxml到Matlab/Simulink生成模型并配置内存分区的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包