部署是在运行于MATLAB之外的应用程序中使用生成代码的过程®环境。许多主题和注意事项与部署过程相关。
要创建应用程序,请创建或使用C / C ++ MAIN函数来调用从MATLAB函数生成的C / C ++入口点函数。主要函数指定MATLAB算法未指定的输入,输出和其他功能。代码生成器默认情况下会产生示例主函数。使用生成的示例主作为创建新主函数的起点。示例主要为如何从生成的代码传递输入和输出提供一个清晰的示例。有关更多信息和示例,请参阅:
您的C / C ++代码必须调用初始化函数和除了C / C ++入口点函数之外生成的终止功能。默认情况下,生成的C / C ++入口点函数调用初始化函数。生成的示例主函数调用终止功能。在创建和编辑自己的主函数时,请确保调用初始化和终止功能。有关更多信息,请参阅:
要编写一个主要功能,您必须熟悉生成的函数接口。
生成的C/ c++函数原型使用的数据类型与您在MATLAB代码中使用的类型对应。看将MATLAB类型映射到生成代码中的类型.嵌入式编码器®,您可以自定义生成数据类型的外观和样式。看代码外观(嵌入式编码器).
C / C ++入口点函数生成Matlab Coder™遵循这些约定:
通过引用传递输入阵列。
通过引用返回输出阵列。
按值传递输入标量。
按值返回标量以进行单输出功能。
通过引用返回标量:
对于具有多个输出的函数。
当您使用与输入和输出相同的变量时。
如果使用与MATLAB代码中的输入和输出相同的变量,则生成的代码通过引用传递标量。看避免生成代码中的功能输入的数据副本.
固定大小和可变大小的阵列由生成的C / C ++代码中的不同数据类型表示。有关更多信息,请参阅在生成的函数接口中使用C阵列.
生成代码并编写使用生成的代码的主文件,那么您必须使用或者使用它的可执行文件构建代码Matlab编码器或其他构建工具。您可能希望在您的MATLAB平台(主机平台)上运行可执行应用程序,或者在另一个平台(目标平台)上运行该应用程序。要将生成的代码所需的元素打包到一个可导出的zip文件中,您可以手动将其传输到目标平台,请使用Packngo.
功能。
代码生成文件夹不一定包含生成代码使用的所有文件。该文件夹还可以包含生成代码不使用的支持文件。万博1manbetx采用Packngo.
打包并移动生成的代码文件,而不是移动,包括整个代码生成文件夹内容。
您可以通过使用直接生成二进制文件Codegen.
命令或者Matlab编码器应用程序通过选择构建类型的静态库,动态库或可执行文件(lib,dll或exe)。默认情况下,生成的二进制文件是主机平台硬件和操作系统的功能。要构建可执行文件,必须指定或提供主文件。例如,看到从MATLAB代码生成独立的C / C ++可执行文件.如果你设置了generateexamplemain.
配置对象的属性'generatecodeandcompile'
,代码生成器通过使用生成的示例主文件构建可执行文件。
如果您想将代码部署到另一个平台上,那么您可以使用硬件支持包,为该平台生成和构建二进制代码提供支持。万博1manbetx这种支持包万博1manbetx括目标硬件所需的特定工具链和代码生成配置设置。的支持包列表万博1manbetxMatlab编码器, 看Matlab编码器支持硬件万博1manbetx.嵌入式编码器提供了许多额外的硬件支持包。万博1manbetx看嵌入式编码器支持硬件万博1manbetx(嵌入式编码器).如果要为硬件支持包提供的构建指定自定义工具链,则可以注册自己的工具链。万博1manbetx看自定义工具链注册.
在里面Matlab编码器应用程序,在此期间选择硬件支持包万博1manbetx生成代码迈出了硬件板下拉列表。从命令行中,使用该命令指定硬件支持包万博1manbetx编码器。硬件
功能。
在某些情况下,您可能会选择生成源代码,然后手动构建项目的源代码。手动构建源代码:
生成的源代码很容易构建。例如,您生成的代码不需要链接到其他库。
您希望为没有硬件支持包的自定义硬件创建可执行文件。万博1manbetx
您在构建C / C ++源代码或已配置目标平台的构建系统方面是知识渊博的。
代码生成器生成buildinfo.
允许您查看和修改构建信息的对象Matlab编码器用于创建二进制输出。您可以使用此信息来了解如何手动构建生成的代码。看构建流程定制和RTW.BuildInfo.
(嵌入式编码器).
代码生成器生成一个makefile,它显示构建信息,例如编译和链接标志。在代码生成文件夹中查找此Makefile。如果未指定硬件支持包,则生成的Makefile特定于您通过选择硬件支持包或主机平台指定的目标平台。万博1manbetx如果您手动构建源代码,则可以使用此Makefile来识别和排除构建要求,例如编译和链接标志。
要了解如何手动配置目标平台的代码生成和构建,请参见将生成的C代码部署到外部硬件:Raspberry PI示例.
当您希望在现有的C/ c++项目中使用生成的代码功能时,您可以生成静态库或动态库。库可以提供比生成的源代码更模块化的接口。当Matlab编码器生成静态库或动态库:
除非您通过硬件支持包指定备用平台,否则库适用于您正在处理的平台。万博1manbetx
C代码的生成的头文件显式声明导出的功能外来的“C”
简化库集成到C ++应用程序中。
生成的库文件扩展对应于MATLAB主机平台操作系统。
操作系统 | 静态库 | 动态库 |
---|---|---|
窗户® | .lib. |
. dll 和.lib. 对应的导入库 |
苹果系统 | .a |
。丁基 |
Linux.® | .a |
。所以 |
构建可执行文件时,您必须编译和链接库。当使用动态库运行的可执行文件时,库必须位于系统路径上或可执行文件夹中。有关使用生成的库的示例,请参阅:
通过使用使用的将生成的动态库加载到MATLAB中LoadLibrary.
不建议使用功能,可以导致不正确的行为或崩溃。
默认情况下,Matlab编码器为每个MATLAB代码文件生成一个C代码文件。您可以选择将生成的代码分区为单个文件并生成具有自定义输出文件夹和二进制名称的代码。看MATLAB编码器分区如何生成代码.
使用嵌入式编码器,您可以自定义生成的文件名。看自定义从MATLAB代码生成的C / C ++文件名(嵌入式编码器).
在部署生成的执行代码之前,可以在MATLAB环境之外执行,您可以在MATLAB环境中验证。用于验证的主要工作流程Matlab编码器是C / C ++ MEX功能的生成和执行。MEX函数在MATLAB环境中运行,并提供运行时错误检查和诊断。看代码验证.
嵌入式编码器提供了用于代码验证和测试的深度附加功能。您可以使用软件循环(SIL)和循环(PIL)执行,以测试MATLAB环境外部软件和硬件上生成的代码的行为。看确认(嵌入式编码器).
如果您的目标仅支持万博1manbetx单身的
数据类型而不是双倍的
数据类型,您可以使用使用的单精度代码Codegen.
-singlec.
选择。此选项需要定点设计器™。如果您的目标只支持整数数据类型万博1manbetx,则使用-float2混合
选择。看Codegen.
.
Matlab编码器为MATLAB语言的一个子集生成可读和可移植的C/ c++代码。如果您想为使用MATLAB Runtime库的主机平台生成独立的可执行应用程序,但不需要MATLAB许可证即可运行,那么请使用MATLAB编译器SDK™.有关产品比较,请参阅//www.tianjin-qmedu.com/matlabcentral/answers/223937-should-i-use-matlab-compiler-sdk-or-matlab-coder-to-integrate-my-matlab-applications-with-c.