• MATLAB中codegen的使用


    目录

    语法

    说明

    示例

    从 MATLAB 函数生成 MEX 函数

    从具有多个签名的 MATLAB 函数生成 MEX 函数

    在自定义文件夹中生成 C 静态库文件

    生成可执行文件

    生成使用可变大小输入的代码

    使用全局数据生成代码

    生成接受枚举类型输入的代码

    生成接受定点输入的静态库

    生成接受半精度输入的静态 C++ 库

    将浮点 MATLAB 代码转换为定点 C 代码

    将 codegen 命令转换为等效的 MATLAB Coder 工程


            codegen从 MATLAB 代码生成 C/C++ 代码。

    语法

    1. codegen options function -args {func_inputs}
    2. codegen options files function -args {func_inputs}
    3. codegen options files function -args {func_inputs} -nargout number_args
    4. codegen options files function1 -args {func1_inputs} ... functionN -args {funcN_inputs}
    5. codegen options files function -args {func_inputs1} ... -args {func_inputsN}
    6. codegen project

    说明

    codegen options function -args {func_inputs} 

            使用 func_inputs 类型的输入从 MATLAB® 函数生成 C 或 C++ 代码,并编译生成的代码。使用 options 参数指定代码生成配置对象等设置。配置对象控制编译类型(MEX、lib、dll 或 exe)和代码生成参数。有关创建和使用配置对象的信息,可以参考配置编译设置、coder.config,以及配置对象参考页:coder.CodeConfig、coder.MexCodeConfig 和 coder.EmbeddedCodeConfig。

    如果函数没有输入,请省略函数特定的 -args {func_inputs} 选项。

    codegen options files function -args {func_inputs} 

            从 MATLAB 函数生成 C/C++ 代码,该函数使用在外部 files 中指定的自定义源代码。具体可以参考从 MATLAB 代码调用 C/C++ 代码和Configure Build for External C/C++ Code。

    ​codegen options files function -args {func_inputs} -nargout number_args 

            生成 C/C++ 代码,并控制从 MATLAB 函数生成的 C/C++ 函数代码的输出参数的数目。文件和选项参数是可选的。如果并不需要 MATLAB 函数的所有输出,则请使用 -nargout 选项。

    ​codegen options files function1 -args {func1_inputs} ... functionN -args {funcN_inputs} 

            从多个 MATLAB 函数生成 C/C++ 代码。请在每个函数名称的后面为函数编写输入参数。还可以为每个函数使用 -nargout 选项。从其中生成代码的函数称为入口函数。

    codegen options files function -args {func_inputs1} ... -args {func_inputsN} 

            从 MATLAB 函数生成多签名 MEX 函数。为同一个入口函数的输入参数提供多个 -args 设定。使用 options 参数指定代码生成配置对象和参数等设置。必须将编译类型指定为 MEX 函数。不支持其他编译类型(lib、dll 和 exe)。

    ​codegen project 从 MATLAB Coder™ 工程文件(例如 test.prj)生成代码。

    示例

    从 MATLAB 函数生成 MEX 函数

            编写一个 MATLAB 函数 mcadd,它返回两个值的总和。

    1. function y = mcadd(u,v) %#codegen
    2. % The directive %#codegen indicates that the function
    3. % is intended for code generation
    4. y = u + v;
    5. end

            在 MATLAB 命令行中,运行以下 codegen 命令。

    codegen mcadd -args {[0 0 0 0],0}

            代码生成器在当前工作文件夹中生成 MEX 文件 mcadd_mex。

    • 如果没有指定编译目标,代码生成默认为 MEX 代码生成。默认情况下,代码生成器将生成的 MEX 函数命名为 mcadd_mex。

    • 要允许生成具有特定类型的 MEX 或 C/C++ 代码,必须指定 MATLAB 入口函数的所有输入变量的属性(类、大小和复/实性)。在此示例中,使用 -args 选项为输入提供示例值。代码生成器使用这些示例值来确定第一个输入是由实数 double 值组成的 1×4 数组,第二个输入是 double 实数标量。

      ​这些示例输入的实际值与代码生成无关。任何其他具有相同属性(类、大小和复/实性)的值对组都会生成相同的代码。​

            在命令行中,调用生成的 MEX 函数 mcadd_mex。确保传递给 mcadd_mex 的值的类、大小和复/实性与在 codegen 命令中指定的输入属性相匹配。

    1. mcadd_mex([1 1 1 1],5)
    2. ans =
    3. 6 6 6 6

            使用这些输入值运行 MATLAB 函数 mcadd 会产生相同的输出。此测试用例验证 mcadd 和 mcadd_mex 具有相同的行为。

    从具有多个签名的 MATLAB 函数生成 MEX 函数

            编写一个 MATLAB 函数 myAdd,它返回两个值的总和。

    1. function y = myAdd(u,v) %#codegen
    2. y = u + v;
    3. end

            在 MATLAB 命令行中,运行以下 codegen 命令。

    codegen -config:mex myAdd.m -args {1,2} -args {int8(2),int8(3)} -args {1:10,1:10} -report

            ​代码生成器为 codegen 命令中指定的多个签名创建单一 MEX 函数 myAdd_mex。

    在自定义文件夹中生成 C 静态库文件

            编写一个 MATLAB 函数mcadd,它返回两个值的总和。

    1. function y = mcadd(u,v) %#codegen
    2. y = u + v;

            使用 -config:lib 选项在自定义文件夹 mcaddlib 中生成 C 库文件。将第一个输入类型指定为由无符号 16 位整数组成的 1×4 向量。将第二个输入指定为双精度标量。

    codegen -d mcaddlib -config:lib  mcadd -args {zeros(1,4,'uint16'),0}

    生成可执行文件

            编写一个 MATLAB 函数 coderRand,该函数在开区间 (0,1) 上基于标准均匀分布生成一个随机标量值。

    1. function r = coderRand() %#codegen
    2. r = rand();

            编写一个 C 主函数 c:\myfiles\main.c,它调用 coderRand。

    1. /*
    2. ** main.c
    3. */
    4. #include
    5. #include
    6. #include "coderRand.h"
    7. #include "coderRand_initialize.h"
    8. #include "coderRand_terminate.h"
    9. int main()
    10. {
    11. coderRand_initialize();
    12. printf("coderRand=%g\n", coderRand());
    13. coderRand_terminate();
    14. puts("Press enter to quit:");
    15. getchar();
    16. return 0;
    17. }

            将代码生成参数配置为包含 C 主函数,然后生成 C 可执行文件。

    1. cfg = coder.config('exe')
    2. cfg.CustomSource = 'main.c'
    3. cfg.CustomInclude = 'c:\myfiles'
    4. codegen -config cfg coderRand

            codegen 在当前文件夹中生成 C 可执行文件 coderRand.exe,在默认文件夹 codegen\exe\coderRand 中生成支持文件。此示例说明如何在配置对象 coder.CodeConfig 中将主函数指定为参数。也可以在命令行中单独指定包含 main() 的文件。可以使用源、对象或库文件。

    生成使用可变大小输入的代码

            编写一个接受单个输入的 MATLAB 函数。

    1. function y = halfValue(vector) %codegen
    2. y = 0.5 * vector;
    3. end

            ​使用 coder.typeof 将输入类型定义为由双精度值组成的行向量,其最大大小为 1×16,第二个维度具有可变大小。​

    vectorType = coder.typeof(1, [1 16], [false true]);

            生成 C 静态库。

    codegen -config:lib halfValue -args {vectorType}

    使用全局数据生成代码

            编写一个 MATLAB 函数 use_globals,该函数接受一个输入参数u并使用两个全局变量 AR 和 B。

    1. function y = use_globals(u)
    2. %#codegen
    3. % Turn off inlining to make
    4. % generated code easier to read
    5. coder.inline('never');
    6. global AR;
    7. global B;
    8. AR(1) = u(1) + B(1);
    9. y = AR * 2;

            生成一个 MEX 函数。默认情况下,codegen 在当前文件夹中生成名为 use_globals_mex 的 MEX 函数。使用 -globals 选项在命令行指定全局变量的属性。通过使用 -args 选项,指定输入u为双精度实数标量。

    codegen -globals {'AR', ones(4), 'B', [1 2 3 4]} use_globals -args {0}

            也可以在 MATLAB 工作区中初始化全局数据。在 MATLAB 提示符下,输入:

    1. global AR B;
    2. AR = ones(4);
    3. B = [1 2 3];

            生成 MEX 函数。

    codegen use_globals -args {0}

    生成接受枚举类型输入的代码

            编写一个函数 displayState,它使用枚举数据根据设备状态激活 LED 显示。绿色 LED 显示亮起指示 ON 状态。红色 LED 显示亮起指示 OFF 状态。

    1. function led = displayState(state)
    2. %#codegen
    3. if state == sysMode.ON
    4. led = LEDcolor.GREEN;
    5. else
    6. led = LEDcolor.RED;
    7. end

            定义一个枚举 LEDColor。在 MATLAB 路径上,创建一个名为 'LEDColor' 的文件,其中包含:

    1. classdef LEDcolor < int32
    2. enumeration
    3. GREEN(1),
    4. RED(2),
    5. end
    6. end

            使用现有 MATLAB 枚举中的值创建一个 coder.EnumType 对象。定义一个枚举 sysMode。在 MATLAB 路径上,创建一个名为 'sysMode' 的文件,其中包含:

    1. classdef sysMode < int32
    2. enumeration
    3. OFF(0)
    4. ON(1)
    5. end
    6. end

            从这个枚举创建一个 coder.EnumType 对象。

    t = coder.typeof(sysMode.OFF);

            为 displayState 生成一个 MEX 函数。

    codegen  displayState -args {t}

    生成接受定点输入的静态库

            编写一个 MATLAB 语言函数 mcsqrtfi,它计算定点输入的平方根。

    1. function y = mcsqrtfi(x) %#codegen
    2. y = sqrt(x);

            为定点输入 x 定义 numerictype 和 fimath 属性,并使用 -config:lib 选项为 mcsqrtfi 生成 C 库代码。

    1. T = numerictype('WordLength',32, ...
    2. 'FractionLength',23, ...
    3. 'Signed',true)
    4. F = fimath('SumMode','SpecifyPrecision', ...
    5. 'SumWordLength',32, ...
    6. 'SumFractionLength',23, ...
    7. 'ProductMode','SpecifyPrecision', ...
    8. 'ProductWordLength',32, ...
    9. 'ProductFractionLength',23)
    10. % Define a fixed-point variable with these
    11. % numerictype and fimath properties
    12. myfiprops = {fi(4.0,T,F)}
    13. codegen -config:lib mcsqrtfi -args myfiprops

            codegen 在默认文件夹 codegen/lib/mcsqrtfi 中生成 C 库和支持文件。

    生成接受半精度输入的静态 C++ 库

            ​可以为 MATLAB 代码生成接受半精度输入的代码。有关详细信息,可以参考 half。编写一个 MATLAB 函数 foo,它返回两个值的总和。​

    1. function y = foo(a,b)
    2. y = a + b;
    3. end

            在 MATLAB 命令行中,运行以下 codegen 命令。

    1. codegen -lang:c++ -config:lib foo -args {half(0),half(0)} -report
    2. Code generation successful: View report

            代码生成器在 work\codegen\lib\foo 中生成静态 C++ 库,其中 work 是当前工作文件夹。要查看代码生成报告,请点击 View report。在 Report Viewer 中,检查文件 foo.cpp 中生成的 C++ 源代码。

    1. real16_T foo(real16_T a, real16_T b)
    2. {
    3. return a + b;
    4. }

            生成的函数 foo 接受并返回半精度值。C++ 半精度类型 real16_T 在生成的头文件 rtwhalf.h 中定义。检查 real16_T 类的 + 运算符的定义。

            此示例中生成的代码将半精度输入转换为单精度,以单精度执行加法运算,并将结果转换回半精度。

    将浮点 MATLAB 代码转换为定点 C 代码

            此示例要求具有 Fixed-Point Designer™。编写一个 MATLAB 函数 myadd,它返回两个值的总和。

    1. function y = myadd(u,v) %#codegen
    2. y = u + v;
    3. end

            编写一个 MATLAB 函数 myadd_test 以测试 myadd。

    1. function y = myadd_test %#codegen
    2. y = myadd(10,20);
    3. end

            使用默认设置创建一个 coder.FixptConfig 对象 fixptcfg。

    fixptcfg = coder.config('fixpt');

            设置测试平台名称。

    fixptcfg.TestBenchName = 'myadd_test';

            创建一个代码生成配置对象来生成独立的 C 静态库。

    cfg = coder.config('lib');

            使用 -float2fixed 选项生成代码。

    codegen -float2fixed fixptcfg -config cfg myadd

    将 codegen 命令转换为等效的 MATLAB Coder 工程

            定义一个 MATLAB 函数 myadd,它返回两个值的总和。

    1. function y = myadd(u,v) %#codegen
    2. y = u + v;
    3. end

            创建用于生成静态库的 coder.CodeConfig 对象。将 TargetLang 设置为 'C++'。

    1. cfg = coder.config('lib');
    2. cfg.TargetLang = 'C++';

            在 MATLAB 命令行中,创建并运行 codegen 命令。将 myadd 指定为入口函数。将 myadd 的输入指定为维度无界的 double 类型可变大小矩阵。将 cfg 指定为代码配置对象。包括 -toproject 选项,以将 codegen 命令转换为名称为 myadd_project.prj 的等效 MATLAB Coder 工程文件。

    1. codegen -config cfg myadd -args {coder.typeof(1,[Inf,Inf]),coder.typeof(1,[Inf,Inf])} -toproject myadd_project.prj
    2. Project file 'myadd_project.prj' was successfully created.
    3. Open Project

            代码生成器在当前工作文件夹中创建工程文件 myadd_project.prj。使用 -toproject 选项运行 codegen 不会生成代码。它只创建工程文件。使用另一个 codegen 命令,从 myadd_project.prj 生成代码。

    codegen myadd_project.prj

            代码生成器在 work\codegen\lib\myadd 文件夹中生成 C++ 静态库函数 myadd,其中 work 是当前工作目录。

            在使用 codegen 命令时,单个命令行选项的优先级高于配置对象指定的选项。如果各命令行选项之间发生冲突,则最右边的选项优先。选项和其他语法元素的顺序是可互换的。

            指定为以下一个或多个值:

    -c

    生成 C/C++ 代码,但不调用 make 命令。

    -config:dll

    使用默认配置参数生成动态 C/C++ 库。

    -config:exe

    使用默认配置参数生成静态 C/C++ 可执行文件。

    -config:lib

    使用默认配置参数生成静态 C/C++ 库。

    -config:mex

    使用默认配置参数生成 MEX 函数。

    -config:single

    使用默认配置参数生成单精度 MATLAB 代码。

    需要 Fixed-Point Designer。

    -config config_object

    指定包含代码生成参数的配置对象。config_object 是以下配置对象之一:

    • coder.CodeConfig - 用于独立 C/C++ 库或生成可执行文件的参数(如果 Embedded Coder® 不可用)。

      1. % Configuration object for a dynamic linked library
      2. cfg = coder.config('dll')
      3. % Configuration object for an executable
      4. cfg = coder.config('exe')
      5. % Configuration object for a static standalone library
      6. cfg = coder.config('lib')
    • coder.EmbeddedCodeConfig - 用于独立 C/C++ 库或生成可执行文件的参数(如果 Embedded Coder 可用)。

      1. % Configuration object for a dynamic linked library
      2. ec_cfg = coder.config('dll')
      3. % Configuration object for an executable
      4. ec_cfg = coder.config('exe')
      5. % Configuration object for a static standalone library
      6. ec_cfg = coder.config('lib')
    • coder.MexCodeConfig - 用于生成 MEX 代码的参数。

      1. mex_cfg = coder.config
      2. % or
      3. mex_cfg = coder.config('mex')
    -d out_folder

    将生成的文件存储在 out_folder 指定的绝对或相对路径中。out_folder 不能包含:

    • 空格,因为在某些操作系统配置中空格可能导致代码生成失败。

    • 非 7 位 ASCII 字符,如日语字符。

            如果 out_folder 指定的文件夹不存在,codegen 会创建它。

    如果不指定文件夹位置,codegen 会在下面的默认文件夹中生成文件:

    codegen/target/fcn_name. 

    target 可以是:

    • mex(对于 MEX 函数)

    • exe(对于可嵌入的 C/C++ 可执行文件)

    • lib(对于可嵌入的 C/C++ 库)

    • dll(对于 C/C++ 动态库)

            fcn_name 是命令行中第一个 MATLAB 函数(按字母顺序排列)的名称。

    该函数不支持在文件夹名称中使用以下字符:星号 (*)、问号 (?)、美元符号 ($) 和镑符号 (#)。

    注意:每次 codegen 为相同的代码生成相同类型的输出时,都会删除上一次编译生成的文件。如果要保留以前的某次编译生成的文件,请在开始新的编译之前将这些文件复制到其他位置。

    -double2single double2single_cfg_name

            使用 coder.SingleConfig 对象 double2single_cfg_name 指定的设置生成单精度 MATLAB 代码。codegen 在文件夹 codegen/fcn_name/single 中生成文件。

            fcn_name 是入口函数的名称。

            当与 -config 选项结合使用时,也会生成单精度 C/C++ 代码。codegen 在文件夹 codegen/target/folder_name 中生成单精度文件。

    target 可以是:

    • mex(对于 MEX 函数)

    • exe(对于可嵌入的 C/C++ 可执行文件)

    • lib(对于可嵌入的 C/C++ 库)

    • dll(对于 C/C++ 动态库)

    folder_name 是 fcn_name 和 singlesuffix 的串联。

    singlesuffix 是 coder.SingleConfig 属性 OutputFileNameSuffix 指定的后缀。此文件夹中的单精度文件也有此后缀。

    -float2fixed float2fixed_cfg_name

    当与 -config 选项结合使用时,使用浮点到定点转换配置对象 float2fixed_cfg_name 指定的设置生成定点 C/C++ 代码。

    codegen 在文件夹 codegen/target/fcn_name_fixpt 中生成文件。target 可以是:

    • mex(对于 MEX 函数)

    • exe(对于可嵌入的 C/C++ 可执行文件)

    • lib(对于可嵌入的 C/C++ 库)

    • dll(对于 C/C++ 动态库)

    fcn_name 是入口函数的名称。

            如果不使用 -config 选项,则使用浮点到定点转换配置对象 float2fixed_cfg_name 指定的设置生成定点 MATLAB 代码。codegen 在文件夹 codegen/fcn_name/fixpt 中生成文件。

            必须设置 float2fixed_cfg_name 的 TestBenchName 属性。例如:

    fixptcfg.TestBenchName = 'myadd_test';
    此命令指定 myadd_test 是浮点到定点配置对象 fixptcfg 的测试文件。
    -g

    指定是否对 C 编译器使用调试选项。如果启用调试模式,C 编译器会禁用一些优化。编译速度会更快,但执行速度会更慢。

    -globals global_values

    在 MATLAB 文件中指定全局变量的名称和初始值。

    global_values 是全局变量名称和初始值组成的元胞数组。global_values 的格式是:

    {g1, init1, g2, init2, ..., gn, initn}

    gn 是指定为字符向量的全局变量的名称。initn 是初始值。例如:

    -globals {'g', 5}

    也可以使用以下格式:

    -globals {global_var, {type, initial_value}}

    type 是类型对象。要创建类型对象,请使用 coder.typeof。对于全局元胞数组变量,必须使用此格式。

    在使用 codegen 生成代码之前,需要初始化全局变量。如果您没有使用 -globals 选项为全局变量提供初始值,codegen 会检查 MATLAB 全局工作区中的变量。如果不提供初始值,codegen 会产生错误。

    MATLAB Coder 和 MATLAB 各有自己的全局数据副本。为了保持一致性,只要两者有交互,就请同步其全局数据。如果不同步数据,其全局变量可能会不同。

    要为全局变量指定常量值,请使用 coder.Constant。例如:

    -globals {'g', coder.Constant(v)}
    指定 g 为具有常量值 v 的全局变量。
    -I include_path

    将 include_path 添加到代码生成路径的开头。当 codegen 搜索 MATLAB 函数和自定义 C/C++ 文件时,它首先搜索代码生成路径。它不会搜索代码生成路径上的类。类必须位于 MATLAB 搜索路径上。

    如果路径包含非 7 位 ASCII 字符,如日语字符,则 codegen 可能在此路径上找不到文件。

    如果include_path 包含的路径包含空格,请用双引号将每个实例括起来,例如:

    'C:\Project "C:\Custom Files"'

    -jit

    使用即时 (JIT) 编译来生成 MEX 函数。JIT 编译可以加速 MEX 函数的生成。此选项仅适用于 MEX 函数生成。此选项与某些代码生成功能或选项不兼容,例如自定义代码或使用 OpenMP 库。

    -lang:c

    将生成代码的目标语言指定为 C 语言。

    如果没有指定任何目标语言,代码生成器将生成 C 代码。

    -lang:c++

    将生成代码的目标语言指定为 C++。

    -launchreport

    生成并打开一个代码生成报告。如果未指定此选项,则仅当出现错误或警告消息或者您指定了 -report 选项时,codegen 才会生成报告。

    -o output_file_name

    使用基本名称 output_file_name 和以下扩展名之一生成 MEX 函数、C/C++ 库或 C/C++ 可执行文件:

    • .a 或 .lib(适用于 C/C++ 静态库)

    • .exe 或无扩展名(适用于 C/C++ 可执行文件)

    • .dll(适用于 Microsoft® Windows® 系统上的 C/C++ 动态库)

    • .so(适用于 Linux® 系统上的 C/C++ 动态库)

    • .dylib(适用于 Mac 系统上的 C/C++ 动态库)

    • 生成的 MEX 函数的与平台相关的扩展名

    output_file_name 可以是文件名,也可以包含现有路径。output_file_name 不能包含空格,因为在某些操作系统配置中空格可能导致代码生成失败。

    对于 MEX 函数,output_file_name 必须为有效的 MATLAB 函数名称。

    如果没有为库和可执行文件指定输出文件名,则基本名称是 fcn_1。fcn_1 是命令行中指定的第一个 MATLAB 函数的名称。对于 MEX 函数,基本名称是 fcn_1_mex。可以运行原始 MATLAB 函数和 MEX 函数,并比较结果。

    -O optimization_option

    根据 optimization_option 的值优化生成的代码:

    • enable:inline - 启用函数内联。

    • disable:inline - 禁用函数内联。

    • enable:openmp - 使用 OpenMP 库(如果可用)。使用 codegen 为 parfor 循环生成的 OpenMP 库、MEX 函数或 C/C++ 代码可以在多个线程上运行。

    • disable:openmp - 禁用 OpenMP 库。禁用 OpenMP 后,codegen 将 parfor 循环视为 for 循环,并生成在单线程上运行的 MEX 函数或 C/C++ 代码。

    在命令行上为每次优化指定一次 -O。如果没有指定,则 codegen 使用内联和 OpenMP 进行优化。

    -package zip_file_name

    ​将生成的独立代码及其依存关系打包到名为 zip_file_name 的压缩 ZIP 文件中。然后,可以使用该 ZIP 文件以转移到另一个开发环境中进行解包并重新编译代码文件。

    packNGo 函数也提供此打包功能。

    -preservearraydims

    生成使用 N 维索引的代码。

    -profile

    使用 MATLAB 探查器启用对生成的 MEX 函数的探查。

    -report

    生成代码生成报告。如果未指定此选项,则仅当出现错误或警告消息或者您指定了 -launchreport 选项时,codegen 才会生成报告。

    如果有 Embedded Coder,则此选项还支持生成代码替换报告。

    -reportinfo info

    将有关代码生成的信息导出到 MATLAB 基础工作区的变量 info 中。

    -rowmajor

    生成使用行优先数组布局的代码。默认为列优先布局。

    -singleC

    生成单精度 C/C++ 代码。必须有 Fixed-Point Designer 才能使用此选项。

    -std:c89/90

    为生成代码使用 C89/90 (ANSI) 标准数学库。

    -std:c99

    为生成代码使用 C99 (ISO) 标准数学库。

    -std:c++03

    为生成代码使用 C++03 (ISO) 标准数学库。仅在生成 C++ 代码时才能使用此库。

    -std:c++11

    为生成代码使用 C++11 (ISO) 标准数学库。仅在生成 C++ 代码时才能使用此库。

    -test test_file

    运行 test_file,将调用原始 MATLAB 函数替换为调用 MEX 函数。使用此选项等效于运行 coder.runTest。

    仅当生成 MEX 函数或使用将 VerificationMode 设置为 'SIL' 或 'PIL' 的配置对象时,才支持此选项。创建具有 VerificationMode 参数的配置对象需要 Embedded Coder 产品。

    定点转换或单精度转换不支持此选项。

    -toproject project_file_name

    将 codegen 命令转换为名为 project_file_name 的等效 MATLAB Coder 工程文件。然后,可以使用另一个 codegen 命令或 MATLAB Coder App 从工程文件中生成代码。

    还可以使用 -toproject 选项将不完整的 codegen 命令转换为工程文件。例如,运行如下命令可创建工程文件 myProjectTemplate.prj,其中仅包含存储在配置对象 cfg 中的代码生成参数:

    codegen -config cfg -toproject myProjectTemplate.prj

    在本例中,myProjectTemplate.prj 不包含入口函数或输入类型的设定。因此,无法从这个工程文件生成代码。您可以在 MATLAB Coder App 中打开 myProjectTemplate.prj,并将其作为模板来创建可用于生成代码的完整工程文件。
    使用 -toproject project_file_name 选项运行 codegen 不会生成代码。它只创建工程文件。

    -v

    启用详尽模式以显示编译步骤。仅在生成库或可执行文件时使用。

    -?

    显示 codegen 命令的帮助。

            指定为当前工作文件夹中或路径上存在的函数。如果 MATLAB 文件位于包含非 7 位 ASCII 字符(如日语字符)的路径上,codegen 命令可能找不到该文件。

            如果正在使用 LCC 编译器,请不要将入口函数命名为 main。

            定义前面 MATLAB 函数输入的大小、类和复/实性的示例值。元胞数组中输入的位置必须对应于 MATLAB 函数定义中输入参数的位置。也可以提供 coder.Type 对象,而不是示例值。要创建 coder.Type 对象,请使用 coder.typeof。

            要生成一个函数且使其输入参数个数少于函数定义的参数个数,请省略不需要的参数示例值。

            要包含在生成的代码中的自定义文件的空格分隔列表。选项、外部文件和函数设定的顺序可以互换。可以包括以下类型的文件:

    • C 文件 (.c)

    • C++ 文件 (.cpp)

    • 头文件 (.h)

    • 目标文件(.o 或 .obj)

    • 库(.a、.so、.dylib 或 .lib)

    • 模板联编文件 (.tmf)

      注意:在以后的版本中将删除对模板联编文件 (TMF) 的支持。请改用工具链方法来编译生成的代码。

            如果这些文件位于包含非 7 位 ASCII 字符(如日语字符)的路径上,codegen 命令可能找不到这些文件。

            为前面 MATLAB 函数生成的 C/C++ 入口函数中的输出参数个数。代码生成器按照输出参数在 MATLAB 函数定义中出现的顺序生成指定数量的输出参数。​
            从 MATLAB Coder App 创建的工程文件。代码生成器使用该工程文件来设置入口函数、输入类型定义和其他选项。要打开 App 并创建或修改工程文件,请使用 coder 函数。

    限制

    • 不能为 MATLAB 脚本生成代码。请将脚本重写为函数来生成代码。

    • 不支持在当前文件夹是私有文件夹或 @ 文件夹时生成代码,因为这些文件夹在 MATLAB 中有特殊含义。可以生成代码来调用 @ 文件夹中的方法和私有文件夹中的函数。

    提示

    • 默认情况下,在文件夹 codegen/target/function 中生成代码。MEX 函数和可执行文件被复制到当前工作文件夹。

    • 为了简化代码生成过程,可以在单独的脚本中编写代码生成命令。在该脚本中定义您的函数输入类型和代码生成选项。要生成代码,请调用该脚本。

    • 每次 codegen 为相同的代码或工程生成相同类型的输出时,都会删除上一次编译生成的文件。如果要保留以前的某次编译生成的文件,请在开始新的编译之前将这些文件复制到其他位置。

    • ​使用 coder 函数打开 MATLAB Coder App,并创建一个 MATLAB Coder 工程。该 App 提供用户界面,便于添加 MATLAB 文件、定义输入参数和指定编译参数。​

    • 可以使用函数语法调用 codegen。将 codegen 参数指定为字符向量或字符串标量。例如:

    codegen('myfunction','-args',{2 3},'-report')
    • 要提供字符串标量作为输入或将 codegen 参数指定为字符串标量,请使用函数语法。例如:
    1. codegen('myfunction','-args',"mystring",'-report')
    2. codegen("myfunction","-args","mystring","-report")

            ​向 codegen 的命令形式提供字符串标量输入可能会产生意外的结果。可以参考命令与函数语法。​

    • 要以编程方式调用 codegen,请使用函数语法。例如:

      1. A = {'myfunction','-args',{2 3}};
      2. codegen(A{:})

  • 相关阅读:
    springboot之redis缓存探索
    Java8-JVM内存区域划分白话解读
    【云原生】Docker操作命令大全
    软实力-领导力
    DLang 与 C 语言交互(一)
    .Net Core 与数据库
    github action 基于个人项目实践
    谈谈Net-SNMP软件
    WPF如何构建MVVM+模块化的桌面应用
    选择结构——字符加密
  • 原文地址:https://blog.csdn.net/jk_101/article/details/114116200