Simulink代码生成:生成C++类

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

文章目录

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

1 创建模型

首先打开Simulink,随意创建一个简单的模型,如下图。
Simulink代码生成:生成C++类_第1张图片
这里建立的控制逻辑比较简单,只是把输入信号放大两倍再输出,在C代码中对应的就是简单的乘以2。

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

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

1)首先,相对于原来配置生成C代码,生成C++类需要在Code Generation中将Language配置为C++;
Simulink代码生成:生成C++类_第2张图片
2)Ctrl+B生成代码,此时生成的就不再是c文件而是cpp文件,其中头文件如下图;
Simulink代码生成:生成C++类_第3张图片
在不进行任何其他配置的时候,类中的成员变量和成员函数都会声明在public下,即都是公有的,其中包括:

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

3)然后切换到cpp文件,如下图:
Simulink代码生成:生成C++类_第4张图片
函数的定义采用了类外定义的方式,即使用 **类名::函数()**这种作用域符的方式。图中的step函数和initialize函数都对应模型中的模块。
Simulink代码生成:生成C++类_第5张图片
构造函数和析构函数定义为空函数。

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

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

1)在Interface配置界面中点击 Configure C++ Class Interface 按钮;
Simulink代码生成:生成C++类_第6张图片
2)在弹出的界面中将Function specification切换成 I/O arguments step method,表示将输入输出端口设置成step函数的参数;
Simulink代码生成:生成C++类_第7张图片
下面的界面会变成可以配置输入输出的参数形式,并且可以修改类名和函数名;

3)将step函数名改成step_gain2,类名改成demo_class,输入和输出参数名改成demo_In1和demo_Out1,传参类型都改成引用的方式(reference),以及inport改成常量引用,如下图;
Simulink代码生成:生成C++类_第8张图片
接着要把优化选项中的 Remove root level I/O zero initialization 勾选上,这样,initialize函数就不会对IO进行零初始化;
Simulink代码生成:生成C++类_第9张图片
4)生成代码如下;

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

4 总结

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

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

>>返回个人博客总目录

你可能感兴趣的:(Simulink代码生成,matlab,simulink)