首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 01:02
  • 2016
  • 5924
blog.csdn.net

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

文章目录

  • 1 问题引入
  • 2 配置过程
    • 2.1 新建数据类型包
    • 2.2 新建Storage Class
  • 3 生成代码验证
  • 4 总结

1 问题引入

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

#pragma section ".bss.ram0.a1" awB
uint16_T Signal1;
#pragma section
  • 1
  • 2
  • 3

这三行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安装路径的 oolboxsimulinksimdemosdataclasses路径下,找到+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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

2.2 新建Storage Class

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

>> cscdesigner('myPackage')
  • 1

然后就会弹出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;
  • 1

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

4 总结

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

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/109265251"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top