博主最近在工作中用Simulink生成C++类的代码,因此将一些感悟记录下来。本文通过一个简单的例子研究Simulink生成C++类的代码以及一些相关配置。

文章目录

  • 1 创建模型
  • 2 C++类生成配置及代码生成
  • 3 配置类名、函数名、IO传参
  • 4 总结

1 创建模型

首先打开Simulink,随意创建一个简单的模型,如下图。

这里建立的控制逻辑比较简单,只是把输入信号放大两倍再输出,在C代码中对应的就是简单的乘以2。

2 C++类生成配置及代码生成

关于Embedded Coder相关配置本文不再赘述,可以参考《Simulink代码生成: Embedded Coder配置》,本文只研究生成C++类的特殊配置。

1)首先,相对于原来配置生成C代码,生成C++类需要在Code Generation中将Language配置为C++;

2)Ctrl+B生成代码,此时生成的就不再是c文件而是cpp文件,其中头文件如下图;

在不进行任何其他配置的时候,类中的成员变量和成员函数都会声明在public下,即都是公有的,其中包括:

  • 输入输出port对应的成员变量,表现为结构体形式;
  • 模型对应的成员函数(step函数、initialize函数和terminate函数);
  • 构造函数和析构函数;

3)然后切换到cpp文件,如下图:

函数的定义采用了类外定义的方式,即使用 **类名::函数()**这种作用域符的方式。图中的step函数和initialize函数都对应模型中的模块。

构造函数和析构函数定义为空函数。

以上是Simulink生成C++类代码的基本框架,是不进行任何多余配置时代码生成的模样。后文中博主会研究一些简单的配置方法,定制一下自己想要的代码类型。

3 配置类名、函数名、IO传参

1)在Interface配置界面中点击 Configure C++ Class Interface 按钮;

2)在弹出的界面中将Function specification切换成 I/O arguments step method,表示将输入输出端口设置成step函数的参数;

下面的界面会变成可以配置输入输出的参数形式,并且可以修改类名和函数名;

3)将step函数名改成step_gain2,类名改成demo_class,输入和输出参数名改成demo_In1和demo_Out1,传参类型都改成引用的方式(reference),以及inport改成常量引用,如下图;

接着要把优化选项中的 Remove root level I/O zero initialization 勾选上,这样,initialize函数就不会对IO进行零初始化;

4)生成代码如下;


从生成的代码中可以看到,类名和函数名以及IO传参都已经对应改变。这种方式可以减少创建对象的时候所占资源。

4 总结

本文研究了生成C++类代码的配置,并且研究了生成的代码。

在汽车行业中,自动驾驶相关的开发会使用C++语言,通常是直接手写C++代码。用Simulink生成C++代码反而是没有充分发挥出它的灵活的特性。

>>返回个人博客总目录

Simulink代码生成:生成C++类相关推荐

  1. simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  2. Simulink代码生成:生成ASAP2文件

    本文研究通过Simulink生成A2L文件的方法,以及其中的一些注意点. 文章目录 1 ASAP2文件 2 生成标定量.观测量的A2L文件 2.1 建模过程 2.2 配置界面 2.3 生成A2L文件 ...

  3. Simulink代码生成(三)——rtw文件(代码生成的中间产物)

    Simulink代码生成(三)--rtw文件(代码生成的中间产物) 文章目录 Simulink代码生成(三)--rtw文件(代码生成的中间产物) 一.代码生成过程 二.model.rtw文件解读 一. ...

  4. 【Android 组件化】路由组件 ( 生成 Root 类记录模块中的路由表 )

    文章目录 一.Root 表作用 二.生成 Root 表 三.完整注解处理器代码 及 生成的 Java 代码 ( 仅供参考 ) 1.注解处理器代码 2.app 模块中的注解类生成的 Java 源码 3. ...

  5. 【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )

    文章目录 一.要生成的路由表类 二.生成 路由表 过程 1.获取其它类节点 2.生成参数 3.路由表结构 4.函数创建 5.Java 类创建 6.写出 Java 源码到文件中 三.完整注解处理器及运行 ...

  6. mysql反向生成uml类图_UML类图自动生成,太爽了

    最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑).draw.io(可视化编辑).PlantUML(代码生成), ...

  7. 强大的uml java_IDEA 还是强大啊,一键把项目生成 UML 类图…

    最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑).draw.io(可视化编辑).PlantUML(代码生成), ...

  8. 自动生成三层结构代码(2)--生成实体类

    版权所有:基础软件.作者邮箱:sun.j.l.studio@gmail.com.本文首发于 http://www.cnblogs.com/FoundationSoft.文章转载请保持此版权信息并注明出 ...

  9. mybatis-plus使用 generator 代码生成器生成实体类支持Swagger2

     作者:传说中的黑桃A blog.csdn.net/sj13074480550/article/details/102976146 mybatis-plus使用generator代码生成器生成实体类支 ...

最新文章

  1. mac os x 查看网络端口情况
  2. 一个小型的网页抓取系统的架构设计
  3. mybatis教程--原始方式和mapper方式开发dao详解
  4. 博客园T恤PP泄漏版(附图)
  5. 域名的MX设置及校验方法
  6. 网站开启https后很慢_网站优化中哪些设置会影响蜘蛛的抓取?对网站SEO产生什么影响...
  7. java返回fail_Java集合中的fail-fast(快速失败)机制详解
  8. ZZULIOJ 1132: 数字字符统计
  9. python 新建一列_python – 如何在迭代pandas数据框时创建新列并插入行值
  10. sql server 安装时提示要重启
  11. java 偏向锁的作用_java--偏向锁
  12. Matlab生成zipf随机数
  13. 图片放大后模糊怎么变清晰?
  14. WordPress插件 引流吸粉到微信公众号 提高用户关注量
  15. 编码消耗率CCR,“上帝代码”,反射,简洁代码
  16. mysql空洞_Mysql 表空间和 数据页空洞
  17. Python爬虫+简易词云的制作
  18. 鸿蒙系统升级到第几批了,鸿蒙系统第四批升级名单有哪些 鸿蒙系统第四批升级机型介绍...
  19. 浅析硬件“好声音”: 声学器件
  20. 闭环系统的零极点图判定稳定性_自动控制原理课件第3章.ppt

热门文章

  1. 图像处理 OpenCV简介
  2. 关于hi3516DV300的VDEC一些测试
  3. c语言中一维数组和二维数组,详解C++中的一维数组和二维数组
  4. Linux vi精确匹配
  5. 计算机曝光模式有哪些,解读相机的5种常用曝光模式
  6. 2021.7.5-7.12 人工智能行业每周技术动态
  7. Java实现Ip代理池
  8. 服务器上mysql授权命令_MySQL授权命令grant的使用方法
  9. 学会计软件测试,会计专业毕业生1个月转行软件测试,她是怎么做到的?
  10. 计算机各外设的作用,外设在计算机中的作用及传输方式.doc