从MATLAB算法生成面向对象的c++代码
了解如何使用MATLAB Coder™从MATLAB生成面向对象的c++代码®类。
- 从MATLAB类生成c++类:MATLAB Coder从MATLAB代码中的类生成c++类,包括值类、句柄类和系统对象。生成的代码可以编译成c++库或可执行文件,也可以集成到现有的c++源代码中。
- 使用命名空间生成c++代码:MATLAB Coder可以在命名空间中生成c++代码,使其易于与其他可能具有相同函数或数据类型名称的源代码集成。代码生成器将所有生成的函数和类型定义打包到名称空间中。
- 在生成的函数接口中使用动态分配的c++数组:为MATLAB函数生成c++代码,这些函数在编译时接受或返回数组大小未知或界限超过预定义阈值的数组。在生成的代码中,数组的内存被动态分配,并实现为名为coder::array的类模板。除了异常安全的内存释放之外,coder::array还提供了访问和管理动态数组的api。
介绍
在这个演示中,我将使用MATLAB Coder从MATLAB算法生成生产c++代码。我们已经对我们的c++代码生成做了一些改进,我想在这个视频中强调这些改进。
我要用的MATLAB例子代表了振荡系统。<显示实时编辑器的图片与系统的输出>
打开应用程序和设置
<打开App并选择后台>的入口点
我将使用MATLAB Coder应用程序从这些MATLAB类中生成一些c++类。今天我将展示的所有内容也可以从命令行中使用codegen命令获得。
入口点是effectOfDamping。我需要告诉MATLAB编码器输入的函数需要的类型。我们可以运行测试脚本runEffectOfDamping来自动检测我的类型。
检查问题
我还将使用相同的测试脚本在生成c++代码之前检查运行时问题。<检查后台的问题>
代码生成
我将生成一个DLL和c++与我的团队共享这段代码。选择c++显示了R2019b中添加的一个名为“接口样式”的选项,在该选项中,您可以选择具有自由函数的接口,也可以选择使用类和该类上的方法的接口。我将选择“methods”来获得更习惯的c++,我将类命名为OscillatorInterface,这样我们就可以在生成的代码中找到它。<现在生成代码>
查看生成的代码
为了探索生成的代码,让我们打开MATLAB编码器报告。在左边,我们可以看到输入的MATLAB代码和生成的c++代码。
封装类
让我们看一下由“interface style”选项生成的接口类。该类从DLL中导出,处理初始化和清理,并将我们的入口点函数作为一个公共方法。任何MATLAB持久变量和全局变量都被映射到类属性,以使生成的代码多实例。
MATLAB类到c++类
从R2020a开始,MATLAB类被映射到c++类。R2020b增加了将MATLAB包映射到c++名称空间的能力。生成的c++类尽可能多地模仿MATLAB类的属性。
编码器:数组
在R2020a中,生成的代码使用coder::array类来管理动态分配的数组。Coder::array有一个类似std::vector的接口,提供索引操作符重载,并确保异常安全的内存释放。
SIL和调试
让我们验证一下代码的行为。使用Embedded Coder, <选择测试脚本并启用调试>我可以使用SIL调试在调试器中打开生成的代码。<在后台运行>代码在一个单独的进程中启动,该进程在Visual Studio中打开进行调试。MATLAB Coder将脚本中的数据传递给生成的代码。
包
一旦我们对生成的代码的行为感到满意,我将为我的团队将代码打包到一个ZIP文件中。
之后,如果你想从App过渡到自动构建的命令行工作流,选择“转换为脚本”选项来获得项目的脚本版本。
性能/兼容性
我们一直在不断改进MATLAB Coder。自R20xx以来,我们增加了对众多MATLAB功能万博1manbetx的支持,包括Table、DateTime、时间表,以及对机器学习和深度学习的支持。我们努力生成接近甚至超过手工代码的快速代码。
完成
如果你对从MATLAB代码生成c++代码感兴趣,我建议看看MATLAB Coder中从R2020b开始的新c++功能。总的来说,它们允许使用MATLAB Coder生成惯用的和异常安全的c++代码。本视频中使用的示例代码可在产品文档中找到。感谢收看!
相关产品s manbetx 845
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。