主要内容

在Simulink环境中构建集成代码金宝app

工作流

要构建集成生成代码和外部C或c++代码的可执行程序,请遍历此表中的任务。

任务

行动

更多的信息

1

选择构建方法。

从Simulink模型生成代码的方法金宝app(嵌入式编码)

例如,请参见建立实时系统的过程工作流(嵌入式编码)

2

配置外部代码的构建过程支持。金宝app

配置集成代码构建过程的参数(嵌入式编码)

3.

为外部代码配置S-Function构建支持。金宝app

建立对s功能金宝app的支持(嵌入式编码)

使用makecfg为S-Functions定制生成的makefile(嵌入式编码)

有关示例,请参见从模型和生成的代码调用外部C代码(嵌入式编码)调用可重用的外部算法代码进行仿真和代码生成(嵌入式编码)

4

配置构建过程以查找外部代码源代码、库和头文件。

管理构建过程文件依赖关系(嵌入式编码)

在生成过程中控制库位置和命名(嵌入式编码)

5

设置外部代码集成所需的自定义构建处理。

有关构建过程自定义工作流,请参见自定义后代码生成生成处理(嵌入式编码)

要自动将构建自定义应用到工具链方法构建,请参见使用sl_customization.m自定义构建过程(嵌入式编码)

要自动将构建自定义应用到模板生成文件方法构建,请参见使用STF_make_rtw_hook文件自定义构建过程(嵌入式编码)

配置集成代码构建过程的参数

该表提供了对配置参数进行建模的指南代码生成>自定义代码“模型配置参数”对话框中的窗格,该对话框支持外部代码集成的构建过程。金宝app有关外部代码的文件夹的信息,请参见管理构建过程文件夹(嵌入式编码).如果您选择将外部代码放在代码生成的文件夹,请参阅在构建文件夹中保存外部代码文件(嵌入式编码)

选择

将包含头文件的include文件夹添加到构建过程中

额外的构建信息>包括目录,并输入文件夹的绝对或相对路径。

如果指定相对路径,则路径必须相对于包含模型文件的文件夹,而不是相对于构建文件夹。指定文件夹的顺序是搜索头文件、源文件和库文件的顺序。

添加要编译和链接的源文件

额外的构建信息>源文件,并输入文件的完整路径或文件名。

如果文件在当前MATLAB中,只需输入文件名®文件夹或包含文件夹中的一个。对于您指定的每个附加源,构建过程将在模板生成文件中展开源文件所在文件夹的通用规则。例如,如果源文件位于文件夹中公司,则构建过程会添加一个类似如下的规则:

%.obj: buildir \企业\ % c (CC) - c fo (@F)美元(CFLAGS) <美元

构建过程按照列出源文件的顺序添加规则。

添加要链接的库

额外的构建信息>,并输入库的完整路径或文件名。

如果库位于当前MATLAB文件夹中或包含文件夹中,只需输入文件名。

使用与为模拟指定的相同的自定义代码设置MATLAB函数块,Stateflow®和真值表块

使用与模拟目标相同的自定义代码设置

该参数指的是模拟目标窗格中的。

允许库模型使用库链接到的父模型中唯一的自定义代码设置

使用本地自定义代码设置(不要从主模型继承)

此参数仅对包含MATLAB函数块、状态流图或真值表块。

在构建文件夹中保存外部代码文件

默认情况下,构建过程删除外部源文件。您可以通过遵循这些指导方针来保存外部源文件。

如果你放一个. c . cpp /.h如果您想要防止代码生成器在TLC代码生成过程中删除它,请插入文本目标具体文件在第一行. c . cpp /.h文件。例如:

/* COMPANY-NAME target specific file * *创建此文件是为了与* COMPANY-NAME目标一起使用。它被用于……* /…

请确保将文本拼写为“target specific file”(如上例所示),并且文本位于源文件的第一行。其他文本可以出现在文本之前或之后。

以这种方式标记用户文件可以防止对这些文件进行后处理,从而使用生成的源文件缩进它们。自动缩进出现在以前的版本中,以构建名称具有该模式的文件夹文件模型_ * . c / . cpp(是文本)。缩进是无害的,但会导致由源代码控制软件检测到的差异,从而可能触发不必要的更新。

建立对s功能金宝app的支持

用户编写的S-Function块提供了将外部代码合并到Simulink中的强大方法金宝app®开发环境。在大多数情况下,您使用s -函数将现有的外部代码与生成的代码集成在一起。有几种编写s -函数的方法:

S-functions还提供了在构建过程中包含遗留代码和自定义代码文件的构建信息的最灵活和最强大的方法。

在构建过程中添加s -函数有不同的方法。

隐式支持金宝app

当使用S-functions构建模型时,构建过程会向生成的makefile中添加规则、包括路径和源文件名。源文件(.h.c,. cpp),与s功能的mex文件放在同一文件夹中。无论是使用工具链方法还是模板生成文件方法进行构建,构建过程都将通过工具链或模板生成文件传播此信息。

  • 如果文件sfcnname.h存在于与s功能的mex -文件相同的文件夹中(例如,sfcnnamemexext),该文件夹将被添加到include路径。

  • 如果文件sfcnname.csfcnname. cpp存在于与S-function mex -文件相同的文件夹中,构建过程将添加一个makefile规则,用于从该文件夹中编译文件。

  • 当s -函数没有与TLC文件内联时,构建过程必须编译s -函数源文件。要确定要添加到要编译的文件列表中的源文件的名称,构建过程将进行搜索sfcnname. cpp在MATLAB路径上。如果找到源文件,则构建过程将源文件名添加到makefile中。如果sfcnname. cpp在路径上找不到,则构建过程将添加文件名sfcnname.c到makefile,无论它是否在MATLAB路径上。

    请注意

    为了让Simul金宝appink引擎找到用于仿真和代码生成的mex文件,它必须存在于MATLAB路径或存在于我们当前的MATLAB工作文件夹中。

为S-Function指定附加源文件

如果S-function具有附加的源文件依赖项,则必须将附加模块的名称添加到构建过程中。指定文件名:

  • 功能模块在s -功能块参数对话框中

  • SFunctionModules的参数set_param函数

例如,假设您使用多个模块构建s函数。

Mex sfun_main.c sfun_module1.c sfun_module2.c

然后,您可以通过以下操作之一将模块添加到构建过程中:

  • 在s功能块对话框中,指定sfun_mainsfun_module1,sfun_module2功能模块字段。

  • 在MATLAB命令提示符处,输入:

    set_param (sfun_block, ' SFunctionModules”、“sfun_module1 sfun_module2”)

    或者,您可以定义一个变量来表示参数值。

    set_param(sfun_block,'SFunctionModules', modules) = 'sfun_module1 sfun_module2'

功能模块场和SFunctionModules参数不支持完整的源文件路径规格。金宝app要使用该参数,代码生成器必须在执行makefile时找到附加的源文件。要让代码生成器定位附加文件,请将它们放在与s -函数mex -文件相同的文件夹中。然后,您可以利用中描述的隐式构建支持金宝app隐式支持金宝app

当您准备好生成代码时,强制代码生成器重新生成顶层模型,如控制再生的顶级模型代码

对于更复杂的s -函数文件依赖项,例如在其他位置指定源文件或指定库或目标文件,使用rtwmakecfg.mAPI,如使用rtwmakecfg。m API来定制生成的makefile

使用TLC库函数

如果您通过编写TLC文件来内联s -函数,则可以使用TLC库函数将源文件名添加到构建过程中LibAddToModelSources.有关详细信息,请参见LibAddSourceFileCustomSection(文件、builtInSection newSection)

请注意

此函数不支持完整的源文件路径规范。金宝app该函数假设代码生成器在执行makefile时可以找到其他源文件。

另一个有用的TLC库函数是LibAddToCommonIncludes.在a中使用这个函数# include语句中包含S-function头文件模型.h头文件。有关详细信息,请参见LibAddToCommonIncludes (incFileName)

对于更复杂的s -函数文件依赖项,例如在其他位置指定源文件或指定库或目标文件,使用rtwmakecfg.mAPI,如使用rtwmakecfg。m API来定制生成的makefile

预编译函数库

您可以使用MATLAB语言函数预编译新的或更新的模型s函数库(mex -文件)rtw_precompile_libs.使用指定的模型和库构建规范,该函数构建库并将库放置在预编译库文件夹中。

通过预编译s函数库,可以优化系统构建。一旦预先编译的库存在,构建过程可以在后续构建中省略库编译。对于使用大量库的模型,构建处理可以节省大量时间。

使用rtw_precompile_libs

  1. 根据您的系统平台设置库文件后缀,包括文件类型扩展名。

    考虑确定平台的类型,然后使用TargetLibSuffix参数设置相应的库后缀。例如,当为GRT目标应用后缀时,可以将后缀设置为_std.a对于UNIX®平台和_vcx64.lib对于一个窗户®平台。

    If isunix suffix = '_std.a';Else suffix = '_vcx64.lib';结束set_param (my_model, TargetLibSuffix,后缀);

    有许多因素会影响预编译库的后缀和扩展。下表提供了系统目标文件、编译器工具链和其他影响后缀和扩展名选择的选项的典型选择示例。的模板制作文件,以获得更多信息matlab / rtw grt / c /文件夹或matlab rtw / c /导文件夹中。

    TMF文件 编译器_TOOL_CHAIN价值 预编译程序库(PRECOMP_LIBRARIES)
    库后缀S-Function (EXPAND _LIBRARY _NAME Value) 库后缀整数-仅限代码(EXPAND _LIBRARY _NAME值) 库后缀优化速度(EXPAND _LIBRARY _NAME值) 库扩展(EXPAND _LIBRARY _NAME Value)
    ert_lcc64.tmf 低成本航空 _rtwsfcn_lcc _int_ert_lcc _ert_lcc . lib
    ert_vcx64.tmf vcx64 _rtwsfcn_vcx64 _int_ert_vcx64 _ert_vcx64 . lib
    ert_unix.tmf unix _rtwsfcn _int_ert _ert .a
    grt_lcc64.tmf 低成本航空 N/A N/A _lcc . lib
    grt_vcx64.tmf vcx64 N/A N/A _vcx64 . lib
    grt_unix.tmf unix N/A N/A _std .a
  2. 设置预编译库文件夹。

    可以通过以下方式设置预编译库文件夹:

    如果你设置TargetPreCompLibLocationmakeInfo.precompile,设置TargetPreCompLibLocation优先。

    下面的命令设置模型的预编译库文件夹my_model到文件夹自由在当前工作文件夹下。

    set_param (my_model TargetPreCompLibLocation, fullfile (pwd, '自由'));

    请注意

    如果为预编译库文件设置了目标文件夹和目标库文件后缀,构建过程将检测在处理构建时是否缺少任何预编译库文件。

  3. 定义构建规范。

    建立定义构建规范的结构。下表描述了可以在结构中定义的字段。这些字段是可选的,除了rtwmakecfgDirs

    描述

    rtwmakecfgDirs

    字符向量的单元格数组,用于命名包含的文件夹rtwmakecfg预编译库的文件。函数使用的名字位置的元素makeInfo.library,由rtwmakecfg,以指定预编译库的名称和位置。如果你设置TargetPreCompLibLocation参数来指定库文件夹,该设置将覆盖makeInfo.library.Location设置。

    注意:属性指定的模型必须包含使用预编译库的块rtwmakecfg文件,因为只有在构建过程使用库时,TMF-to-makefile转换才会生成库规则。

    libSuffix

    一个字符向量,指定要附加到每个库名称的后缀(包括文件类型扩展名)(例如,.a_vc.lib)。字符向量必须包含句号(.)。必须使用此字段或TargetLibSuffix参数。如果使用这两种机制指定后缀,则TargetLibSuffix设置将覆盖该字段的设置。

    intOnlyBuild

    一个布尔标志。当设置为true时,该标志表明要优化库,以便只从整数代码编译它们。此字段仅适用于ERT目标。

    makeOpts

    属性中指定要包含的选项的字符向量rtwMake命令行。

    addLibs

    控件未指定的要构建的库的结构的单元格数组rtwmakecfg函数。每个结构必须定义两个字符数组字段:

    • 库名-不带后缀的库名

    • libLoc-预编译库的位置

    目标生成文件(TMF)可以指定其他库以及如何构建这些库。使用此字段预编译这些库。

    下面的命令设置构建规范build_spec,表示待编译的文件在文件夹中src在当前工作文件夹下。

    build_spec = [];build_spec。rtwmakecfgDirs = {fullfile(pwd,'src')};
  4. 发出呼叫rtw_precompile_libs

    调用必须指定要为其构建预编译库的模型和构建规范。例如:

    rtw_precompile_libs (my_model build_spec);

相关的话题