Simulink代码生成: 自定义Storage Class配置

本文研究了自定义Storage Class配置的方法(cscdesigner),并通过生成代码验证了自定义的方法。

1 问题引入

在之前的一篇博客《Simulink代码生成: Storage Class配置》中,研究了很多Matlab中自带的Storage Class以及生成的代码。最近博主工作中遇到了一个新的需求,需要用#pragma section把全局变量定义到某个特定的段中。具体形式如下:

#pragma section ".bss.ram0.a1" awB
uint16_T Signal1;
#pragma section

这三行C代码表示,要把Signal1这个全局变量定义到ECU的".bss.ram0.a1"区段中。如果使用ExportToFile的的Storage Class来生成代码,是不会包含#pragma指令的。

想解决这个问题有两种思路:

  • 方案1:手动修改模型生成的代码,或者用脚本给C代码中批量加上#pragma指令;
  • 方案2:想办法通过配置Simulink,使之自动生成这个#pragma指令;

其中,方案1是下下策。一般来说,在MBD中不应该手动修改生成的代码,这样非常容易造成版本管理的混乱,难以追溯问题。所以,博主通过Matlab帮助文件研究了cscdesigner,实现了方案2。

2 配置过程

本章节会根据第1章的需求,来演示配置自定义Storage Class的过程。

2.1 新建数据类型包

1)进入Matlab安装路径的\toolbox\simulink\simdemos\dataclasses路径下,找到+SimulinkDemos文件夹
在这里插入图片描述
2)将+SimulinkDemo文件夹拷贝到Matlab当前路径,重命名为+myPackage
在这里插入图片描述
3)打开文件夹中的Signal.m,对下图中的method定义取消注释,并把packageName改成myPackage,保存m文件。
在这里插入图片描述
改完以后如下图:

  methods
    function setupCoderInfo(h)
      % Use custom storage classes from this package
      useLocalCustomStorageClasses(h, 'myPackage');
    end
  end % methods

4)对Parameter.m进行和第3步同样的操作,这里不再赘述

到了这一步,就已经建立好了我们自己的数据类型包myPackage

2.2 新建Storage Class

1)切回到+myPackage所在的路径,在Matlab命令行输入如下指令

>> cscdesigner('myPackage')

然后就会弹出Custom Storage Class的设计界面,并自动把Package切换成刚刚新建的myPackage
在这里插入图片描述
2)切换成Memory Section选项卡,选中Default,点击右侧的Copy。然后就会复制出一个Default的Memory Section定义。
在这里插入图片描述
3)把新的MemorySection改名为Default_RAM0,并且在Pre statement和Post statement中填写上#pragma指令。Apply以后,右侧的预览界面会显示出该配置下对应生成代码的模板。
在这里插入图片描述
4)窗口切换到Custom Storage Class,选中ExportToFile,点击右侧的Copy。这样就会拷贝一个新的ExportToFile。
在这里插入图片描述
5)把新的Custom Storage Class改名为ExportToFile_RAM0,把下面的Memory Section选为之前定义的Default_RAM0。Apply以后,右侧的预览界面会显示出该配置下对应生成代码的模板。
在这里插入图片描述
6)最后点击Save和OK,新建Storage Class就完成了。

3 生成代码验证

本章节通过建模和生成代码来验证上文配置的自定义StorageClass。

1)在Matlab命令行中输入命令,在工作空间中新建一个信号Signal1.

>> Signal1 = myPackage.Signal;

2)双击打开工作空间中的Signal1,配置Datatype为single,配置Storage Class为ExportToFile_RAM0。
在这里插入图片描述
3)新建一个Simulink模型,做一个简单的输入输出和Gain,把输出信号线命名为Signal1,并配置为Resolve,也就是左侧的小叉子。这样的话,模型的输入信号就配置为工作空间的Signal1了。
在这里插入图片描述
4)简单配置一下Embedded Coder,并生成代码,可以在Global.c文件中看到已经自动生成了#pragma指令。
在这里插入图片描述

4 总结

本文中的例子比较简单。在cscdesigner的帮助文件中可以看到,自定义Storage Class有很大的操作空间,等到有其他需求的时候再深入研究。

>>返回个人博客总目录

  • 29
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Simulink代码生成配置方法有多种。根据引用和引用,Simulink模型生成代码的配置Simulink仿真和实时仿真机(SpeedGoat\dsPACE)的配置方式不同。 一种配置方法是通过模型进行配置。具体配置步骤如下: 1. 选择合适的步长,以确保模型的仿真结果精确且稳定。步长选择可以根据模型的需求和要求来进行调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Simulink代码生成(二)——代码生成时模型的配置方法及操作流程](https://blog.csdn.net/Rlover_star/article/details/127261444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Simulink模型代码生成配置转C代码](https://download.csdn.net/download/ee21xsxj/10272093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Simulink模型生成代码配置配置教程)](https://blog.csdn.net/RNG_uzi_/article/details/129158902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值