Simulink代码生成:生成C++类
博主最近在工作中用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++类相关推荐
- simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成
前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...
- Simulink代码生成:生成ASAP2文件
本文研究通过Simulink生成A2L文件的方法,以及其中的一些注意点. 文章目录 1 ASAP2文件 2 生成标定量.观测量的A2L文件 2.1 建模过程 2.2 配置界面 2.3 生成A2L文件 ...
- Simulink代码生成(三)——rtw文件(代码生成的中间产物)
Simulink代码生成(三)--rtw文件(代码生成的中间产物) 文章目录 Simulink代码生成(三)--rtw文件(代码生成的中间产物) 一.代码生成过程 二.model.rtw文件解读 一. ...
- 【Android 组件化】路由组件 ( 生成 Root 类记录模块中的路由表 )
文章目录 一.Root 表作用 二.生成 Root 表 三.完整注解处理器代码 及 生成的 Java 代码 ( 仅供参考 ) 1.注解处理器代码 2.app 模块中的注解类生成的 Java 源码 3. ...
- 【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )
文章目录 一.要生成的路由表类 二.生成 路由表 过程 1.获取其它类节点 2.生成参数 3.路由表结构 4.函数创建 5.Java 类创建 6.写出 Java 源码到文件中 三.完整注解处理器及运行 ...
- mysql反向生成uml类图_UML类图自动生成,太爽了
最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑).draw.io(可视化编辑).PlantUML(代码生成), ...
- 强大的uml java_IDEA 还是强大啊,一键把项目生成 UML 类图…
最近在开发的过程当中,对于已有的代码,想将相关类绘制成UML类图,虽然现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑).draw.io(可视化编辑).PlantUML(代码生成), ...
- 自动生成三层结构代码(2)--生成实体类
版权所有:基础软件.作者邮箱:sun.j.l.studio@gmail.com.本文首发于 http://www.cnblogs.com/FoundationSoft.文章转载请保持此版权信息并注明出 ...
- mybatis-plus使用 generator 代码生成器生成实体类支持Swagger2
作者:传说中的黑桃A blog.csdn.net/sj13074480550/article/details/102976146 mybatis-plus使用generator代码生成器生成实体类支 ...
最新文章
- mac os x 查看网络端口情况
- 一个小型的网页抓取系统的架构设计
- mybatis教程--原始方式和mapper方式开发dao详解
- 博客园T恤PP泄漏版(附图)
- 域名的MX设置及校验方法
- 网站开启https后很慢_网站优化中哪些设置会影响蜘蛛的抓取?对网站SEO产生什么影响...
- java返回fail_Java集合中的fail-fast(快速失败)机制详解
- ZZULIOJ 1132: 数字字符统计
- python 新建一列_python – 如何在迭代pandas数据框时创建新列并插入行值
- sql server 安装时提示要重启
- java 偏向锁的作用_java--偏向锁
- Matlab生成zipf随机数
- 图片放大后模糊怎么变清晰?
- WordPress插件 引流吸粉到微信公众号 提高用户关注量
- 编码消耗率CCR,“上帝代码”,反射,简洁代码
- mysql空洞_Mysql 表空间和 数据页空洞
- Python爬虫+简易词云的制作
- 鸿蒙系统升级到第几批了,鸿蒙系统第四批升级名单有哪些 鸿蒙系统第四批升级机型介绍...
- 浅析硬件“好声音”: 声学器件
- 闭环系统的零极点图判定稳定性_自动控制原理课件第3章.ppt
热门文章
- 图像处理 OpenCV简介
- 关于hi3516DV300的VDEC一些测试
- c语言中一维数组和二维数组,详解C++中的一维数组和二维数组
- Linux vi精确匹配
- 计算机曝光模式有哪些,解读相机的5种常用曝光模式
- 2021.7.5-7.12 人工智能行业每周技术动态
- Java实现Ip代理池
- 服务器上mysql授权命令_MySQL授权命令grant的使用方法
- 学会计软件测试,会计专业毕业生1个月转行软件测试,她是怎么做到的?
- 计算机各外设的作用,外设在计算机中的作用及传输方式.doc