文档

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

工作流程

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

任务

行动

更多的信息

1

选择是使用工具链方法还是模板生成文件方法构建过程。

选择生成方法和配置生成过程

例如,看到构建实时系统的过程工作流程

2

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

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

3.

配置S函数构建支持对外部代码。金宝app

构建对S函数金宝app的支持

使用makecfg为S-Functions定制生成的makefile

对于例子,见从模型和生成的代码调用外部C代码调用可重用的外部算法代码进行仿真和代码生成

4

配置构建过程以查找外部代码源,库和标题文件。

管理构建过程文件依赖关系

在生成过程中控制库位置和命名

5

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

对于构建过程自定义工作流程,请参阅自定义后代码生成生成处理

要自动将构建自定义应用到工具链方法构建,请参见使用sl_customization.m自定义构建过程

要自动将构建自定义应用到模板生成文件方法构建,请参见使用STF_make_rtw_hook文件自定义构建过程

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

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

选择

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

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

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

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

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

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

%.obj:buildir \ inc \%。c $(cc)-c -f -fo $(@ f)$(cflags)$ <

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

添加要链接的库

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

只要库位于当前MATLAB文件夹中或其中一个包含文件夹中,只需输入文件名。

使用与指定模拟的自定义代码设置相同的自定义代码设置Matlab功能块,Stateflow®图表和真理表块

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

此参数是指的模拟目标窗格在“配置参数”对话框中。

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

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

此参数仅对包含Matlab功能块、状态流图或真值表块。

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

默认情况下,构建过程会删除外部源文件。您可以按照以下指南保留外部源文件。

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

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

确保拼写文本“目标特定文件”,如前面的示例所示,文本位于源文件的第一行中。其他文本可以出现在此文本之前或之后。

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

构建对S函数金宝app的支持

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

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

有不同的方式将S函数添加到构建过程中。

隐式支持金宝app

当使用S-functions构建模型时,构建过程会向生成的makefile中添加规则、包括路径和源文件名。源文件(.h.c, 和. cpp)对于S函数必须与S函数mex文件相同的文件夹。无论是使用Toolchain方法还是模板makefile方法,构建过程通过工具链或模板makefile传播此信息。

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

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

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

    请注意

    对于Simuli金宝appnk引擎找到用于模拟和代码生成的MEX文件,它必须存在于MATLAB路径上或存在于我们当前的MATLAB工作文件夹中。

为S-Function指定附加源文件

如果您的S函数有其他源文件依赖项,则必须将其他模块的名称添加到构建过程。指定文件名:

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

  • 与之SFunctionModules的参数set_param.功能

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

Mex sfun_main.c sfun_module1.c sfun_module2.c

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

  • 在S函数块对话框中,指定sfun_main.sfun_module1, 和sfun_module2功能模块字段。

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

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

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

    Modules ='sfun_module1 sfun_module2'set_param(sfun_block,'sfunctionmodules',模块)

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

当您准备好生成代码时,强制代码生成器重新生成顶层模型,如控制再生的顶级模型代码(金宝appSimulink编码器)。

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

使用TLC库函数

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

请注意

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

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

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

预编译函数库

您可以使用MATLAB语言功能对模型进行新的或更新的S函数库(MEX-FILES)来预先编译rtw_precompile_libs.使用指定的模型和库构建规范,该函数构建库并将库放置在预编译库文件夹中。

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

使用rtw_precompile_libs

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

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

    如果iSunix后缀='_std.a';else后缀='_vcx64.lib';结束set_param(my_model,'targetlibsuffix',后缀);

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

    TMF文件 编译器_TOOL_CHAIN价值 预编译库(Precomp_libraries)
    库后缀S-Function (EXPAND _LIBRARY _NAME Value) 库后缀整数-仅限代码(EXPAND _LIBRARY _NAME值) 库后缀优化速度(EXPAND _LIBRARY _NAME值) 库扩展(EXPAND _LIBRARY _NAME Value)
    ert_lcc64.tmf LCC. _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 LCC. 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目标。

    make

    属性中指定要包含的选项的字符向量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);

相关话题