主要内容

为多个入口点函数生成代码

入口点函数是一个顶级的MATLAB®函数,从中生成代码。对于许多应用程序,您可能只需要为单个入口点函数生成代码。您还可以同时从多个入口点函数生成C/ c++代码。通过使用多个入口点函数,您可以:

  • 生成包含比为每个入口点函数生成独立库更高功能级别的多功能C/C++库。

  • 当多个入口点函数依赖于相同的子函数时,生成更有效地共享代码的代码。

  • 生成可以使用共享内存进行通信的库函数,例如,当它们使用相同的全局变量时。

作为最佳实践,在生成C/C++库之前,在MATLAB中生成一个MEX函数来验证入口点交互。

为多个入口点函数生成代码

要为多个入口点函数生成代码,请使用codegen参考页面。默认情况下,对于MEX代码生成,codegen

  • 在当前文件夹中生成MEX函数。当指定多个入口点函数时,只生成一个MEX函数。要从生成的MEX函数调用单个入口点函数,请参阅从MEX函数调用单个入口点函数

  • 命名MEX函数的名字_墨西哥的名字是来自的第一个入口点函数的名称按字母顺序排列的顺序

  • 将生成的文件存储在子文件夹中codegen/mex/子文件夹子文件夹a的第一个入口点函数的名称从左到右顺序(因为它们是在codegen命令)。

属性指定输出文件名和子文件夹名称-o选项:

codegen-omyOutputFileNamefun1fun2

在这种情况下,codegen生成一个名为myOutputFileName在当前文件夹中,并将生成的文件存储在子文件夹中codegen/mex/myOutputFileName

示例:为两个入口点函数生成代码

为两个入口点函数生成一个MEX函数,ep1ep2.函数ep1接受一个输入,然后ep2需要两个输入。使用-o选项,命名生成的MEX函数sharedmex

codegen-omySharedMexep1arg游戏{单个(0)}ep2arg游戏{0, 0 (1024)}

codegen生成一个名为mySharedMex.mex在当前文件夹中,并将生成的文件存储在子文件夹中codegen/mex/mySharedMex

要生成和编译独立的库代码,请使用-配置:lib选项

codegen-配置:lib-omySharedLibep1arg游戏单(0)ep2arg游戏{0, 0 (1024)}

codegen命令在中生成C/C++库代码codegen / lib / mySharedLib文件夹中。

要将一个入口点函数的输出类型用作另一个入口点函数的输入类型,请参见将入口点函数输出作为输入传递。有关在代码生成报告中查看入口点函数的信息,请参阅代码生成报告

从MEX函数调用单个入口点函数

假设您有一个MEX函数myMex由多个入口点函数生成,fun1fun2, …,funN.你可以调用一个入口点函数,fun_i,通过使用以下语法:

myMex (“我很开心”,参数1,…,参数m)

这里的MATLAB函数签名为fun_ifun_i(参数1,…,参数m)

例如,考虑MEX函数,mySharedMex,它有入口点函数ep1ep2.打电话ep1使用输入参数u,输入:

mySharedMex (‘ep1’,u)

打电话给ep2与输入参数vx,输入:

mySharedMex (“ep2”,v,x)

为多个入口点函数生成代码MATLAB编码员应用程序

方法生成多个入口点函数代码MATLAB编码器™应用程序。

创建入口点函数

  1. 在本地可写文件夹中,创建一个MATLAB文件,ep1.m,其中包括:

    作用y=ep1(u)% # codegeny = u;

  2. 在同一个本地可写文件夹中,创建一个MATLAB文件,ep2.m,其中包括:

    作用y=ep2(u,v)% # codegenY = u + v;

创建测试文件

在包含ep1.mep2.m,创建一个MATLAB文件,ep_test.m,这叫ep1ep2使用示例输入。

作用[y, y1] = ep_test y = ep1(single(2));Y1 = ep2(double(3), double(4)));

打开MATLAB编码员应用程序

基于MATLAB的工具条应用程序选项卡,在代码生成,单击MATLAB编码器应用程序图标。

指定源文件

  1. 选择源文件页面、键入或选择入口点函数的名称ep1

    应用程序创建一个默认名称的项目ep1.prj在当前文件夹中。为避免代码生成错误,必须将项目文件和所有入口点MATLAB函数文件存储在同一文件夹中。

  2. 添加ep2到入口点函数列表,单击添加入口点函数.键入或选择入口点函数的名称ep2

  3. 定义输入类型步骤,单击下一个.该应用程序分析功能的编码问题和代码生成准备。如果应用程序发现问题,它会打开检查代码生成准备情况您可以在其中查看和修复问题的页面。在本例中,由于应用程序未检测到问题,因此会打开定义输入类型

定义输入类型

因为C在编译时使用静态类型,MATLAB编码器必须确定MATLAB文件中所有变量的属性。必须指定所有入口点函数输入的属性。从入口点函数输入的属性,MATLAB编码器可以推断MATLAB文件中所有变量的属性。

指定一个测试文件MATLAB编码器可用于自动定义类型:

  1. 输入或选择测试文件ep_test.m

  2. 点击自动定义输入类型

    测试文件,ep_test.m,调用入口点函数ep1ep2使用示例输入类型。MATLAB编码器推断,ep1输入u单(1 x1). 对于ep2uv双(1x1)

  3. 检查运行时问题步骤,单击下一个

检查运行时问题

检查运行时问题步骤从入口点函数生成MEX文件,运行MEX函数,并报告问题。此步骤为可选步骤。但是,执行此步骤是最佳实践。您可以检测和修复生成的C代码中较难诊断的运行时错误。

  1. 打开检查运行时问题对话框中,单击检查问题

    应用程序填充测试文件字段ep_test,用于定义输入类型的测试文件。

  2. 点击检查问题

    该应用程序生成一个名为ep1_mexep1ep2.它运行测试文件ep_test替换对的呼叫ep1ep2调用MEX函数。如果应用程序在MEX函数生成或执行期间检测到问题,它会提供警告和错误消息。要导航到有问题的代码并修复问题,请单击这些消息。在这个例子中,应用程序不会检测到问题。

  3. 生成代码步骤,单击下一个

生成MEX函数

  1. 打开生成对话框中,单击生成

  2. 构建类型墨西哥

  3. 验证输出文件的名字ep1_mex. 默认情况下,应用程序使用按字母顺序排列的第一个入口点函数的名称。

  4. 点击生成

    MATLAB编码器构建项目。它生成一个MEX函数,ep1_mex,在当前文件夹中。MATLAB编码器还将在名为的子文件夹中生成其他支持文件金宝appcodegen /墨西哥人/ ep1_mexMATLAB编码器使用MATLAB函数的名称作为生成文件的根名称。它为MEX文件创建特定于平台的扩展名,如中所述命名约定

    现在可以在MATLAB中测试MEX函数。看到从MEX函数调用单个入口点函数

    如果您为ep1ep2MATLAB编码器构建项目并生成一个C库,ep1,以及默认文金宝app件夹中的支持文件,codegen/lib/ep1

另请参阅

|

相关话题