重要的事情放到前头说,本文提出的方法可解决:
AUTOSAR Composition 级别的代码生成问题
多模型代码生成共享代码问题
单元模型单独生成代码时和共享数据的耦合问题
在实际的项目中,我们经常会遇到大规模模型代码生成的共享代码问题,而且常常还会涉及到自定制存储类,AUTOSAR Composition,多层数据管理方案等内容。该问题是一类经典问题,基本上每个月都会有不同的用户以各种不同的场景和方式前来询问解决方案或建议,为了帮助大家更好的处理此类问题,本文提供了一种以多层数据管理方案为核心的解耦方式,类似的场景大家也可以尝试借用此方法。
第一步:构建用例场景
我们首先快速构建一个典型场景,新建了一个数据包 mySDCPackage:
并使用 CSCDesigner 创建了如下所示的 Memory Section - MathWorks_CalPrm:
以及 Storage Class - MathWorks_CalPrm_SC,该存储类使用上述创建的 Memory Section - MathWorks_CalPrm。通过该存储类约束的 Simulink Parameter 会生成到指定的 HCU_Prm.h 和指定名称的 .c 文件中(注意:Definition file 选 Instance Specific 以便后续可以单独配置 Parameter 要生成到哪个头文件):
接着我们将名为ThrottlePositionControlComposition.arxml 的 AUTOSAR CP Composition arxml 导入到System Composer,重现架构,如下图所示:
第二步:适用多层数据管理方案
这里为了方便解释,我们只选 Monitor(模型全名实为 ThrottlePositionMonitor),Controller 两个子模型为例,其中 Monitor 模型的数据存放在 Monitor_Unique.sldd 和 Monitor_Shared.sldd 中,Monitor_Unique.sldd 直接关联 Monitor 模型,Monitor_Shared.sldd 不直接关联模型而是被 Monitor_Unique.sldd 通过数据字典引用的方式进行引用。
Monitor_Unique.sldd 中存放的是 Monitor 模型所独有的数据,Monitor_Sh