文档

在仿真软件环境中构建集成的代码金宝app

工作流

构建可执行程序,将生成的代码和外部C或c++代码,遍历这个表的任务。

任务

行动

更多的信息

1

选择是否使用工具链的方法或模板makefile构建过程的方法。

选择构建方法和配置构建过程(嵌入式编码)

例如,看到的实时系统的构建过程工作流(嵌入式编码)。

2

Configuredbuild过程支持外部代码。金宝app

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

3

配置功能构建支持外部代码。金宝app

支持S-Fu金宝appnctions(嵌入式编码)

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

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

4

配置构建过程寻找外部代码源,图书馆,头文件。

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

在建立控制库位置和命名(嵌入式编码)

5

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

构建过程定制工作流,明白了定制Post-Code-Generation构建处理(嵌入式编码)。

自动化应用构建定制工具链的方法建立,明白了与sl_customization.m定制构建过程(嵌入式编码)。

自动化应用构建定制模板makefile方法构建,明白了自定义构建过程与STF_make_rtw_hook文件(嵌入式编码)。

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

表提供了一个指南配置参数,支持外部代码的构建过程集成。金宝app文件夹外部代码的信息,请参阅构建过程管理文件夹(嵌入式编码)。如果你选择你的外部代码的地方代码生成的文件夹(金宝app模型),看到的在建立文件夹保存外部代码文件(嵌入式编码)。

选择

添加包含文件夹,包含头文件,构建过程

配置参数>代码生成>自定义代码>额外的构建信息>包括目录,进入绝对或相对路径文件夹。

如果您指定相对路径,路径必须相对于包含您的模型文件的文件夹,而不是相对于建立文件夹。你指定文件夹的顺序是它们的顺序搜索标题,源和库文件。

添加源文件编译和链接

配置参数>代码生成>自定义代码>额外的构建信息>源文件,进入完整路径或文件名的文件。

输入的文件名,如果文件是在当前的MATLAB®或在一个包括文件夹的文件夹。为每个指定的其他来源,构建过程扩展的通用规则模板中的makefile源文件所在的文件夹。例如,如果一个源文件位于文件夹公司,构建过程增加了一个类似如下规则:

%。obj: buildir \公司\ %。加元(CC) - c fo (@F) (CFLAGS) <美元美元

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

有关添加库

配置参数>代码生成>自定义代码>额外的构建信息>,输入完整路径或文件名的库。

输入文件名如果图书馆位于当前MATLAB文件夹或在一个包括文件夹。

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

配置参数>代码生成>自定义代码>使用相同的自定义代码设置为模拟目标

请注意

这个参数是指模拟目标面板的配置参数对话框。

让图书馆模型使用定制代码设置独特的从父母模型库的链接

配置参数>代码生成>自定义代码>使用本地自定义代码设置(不继承主要模型)

请注意

这个参数只能包含的库模型MATLAB函数块,Stateflow图表或真值表块。

在建立文件夹保存外部代码文件

默认情况下,构建过程删除源文件。你可以保留外国源文件遵循这些指导方针。

如果你把一个. c . cpp /。h源文件中建立文件夹,你想阻止代码生成器删除它在TLC代码生成过程中,插入文本目标具体文件的第一行. c . cpp /。h文件。例如:

/ *公司名称目标特定文件* *创建这个文件*公司名称使用的目标。*用于……* /…

确保你拼写的文本“瞄准特定文件”如前面的示例所示,文本是在源文件的第一行。其他文本会出现本文之前或之后。

萎靡不振的用户文件以这种方式防止后处理缩进他们这些文件生成的源文件。Auto-indenting发生在以前的版本中建立文件夹的文件名称模式模型_ * . c / . cpp(*是文本)。缩进是无害的,但会导致差异探测到源代码控制软件,可能会引发不必要的更新。

支持S-Fu金宝appnctions

编写功能模块提供了一个强大的外部代码合并到模型的方法金宝app®开发环境。在大多数情况下,您使用S-functions集成现有的外部代码与生成的代码。有几种方法写作S-functions:

S-functions还提供最灵活和能力的方法包括建立信息遗留和定制代码文件的构建过程。

有不同的方式将S-functions添加到构建过程。

隐式支持金宝app

当与S-functions建立模型,构建过程添加规则,包括路径,生成makefile和源文件的名称。源文件(。h,。c,. cpp)的s函数必须在相同的文件夹功能MEX-file。是否使用工具链方法或模板makefile构建方法,构建过程传播这些信息通过工具链或模板makefile。

  • 如果文件sfcnname。h存在于同一文件夹功能MEX-file(例如,sfcnnamemexext),文件夹添加到包含路径。

  • 如果文件sfcnname。csfcnname. cpp存在于同一文件夹功能MEX-file,构建过程增加了一个makefile规则编译文件从文件夹中。

  • 当一个函数内联与TLC文件,构建过程必须编译源文件功能。确定源文件的名称添加到文件列表编译、构建过程搜索sfcnname. cpp在MATLAB的道路。如果找到源文件,构建过程将源文件的名称添加到makefile。如果sfcnname. cpp未找到路径,构建过程添加文件的名字吗sfcnname。cmakefile,是否在MATLAB的道路。

    请注意

    为模拟仿真软件引金宝app擎找到MEX-file和代码生成,它必须存在于MATLAB MATLAB在我们当前的工作目录路径或存在。

指定附加的源文件的功能

如果你的s函数有额外的源文件的依赖关系,必须额外的模块的名称添加到构建过程。指定文件名称:

  • 功能模块在功能块参数对话框

  • SFunctionModules在调用参数set_param函数

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

墨西哥人sfun_main。c sfun_module1。c sfun_module2.c

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

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

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

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

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

    模块= ' sfun_module1 sfun_module2 set_param (sfun_block、“SFunctionModules”模块)

功能模块场和SFunctionModules规格参数不支持完整的源文件路径。金宝app使用参数,代码生成器必须找到额外的源文件在执行makefile。代码生成器来定位附加文件,将它们放在同一文件夹功能MEX-file。然后你可以利用隐式描述的支持金宝app隐式支持金宝app

当你准备来生成代码,代码生成器力量重建模型的顶部,所述控制再生的模型代码

等更复杂的s函数文件的依赖关系,指定源文件在其他位置或指定库或对象文件,使用rtwmakecfg.mAPI,所述使用rtwmakecfg。m API来定制生成的makefile

用TLC库函数

如果你内联函数通过编写TLC文件,你可以将源文件的名字添加到构建过程通过使用薄层色谱库函数LibAddToModelSources。有关详细信息,请参见LibAddSourceFileCustomSection(文件、builtInSection newSection)

请注意

这个函数不支持规范完整的源文件路径。金宝app函数假定代码生成器可以找到额外的源文件在执行makefile。

另一个有用的TLC库函数LibAddToCommonIncludes。使用这个函数# include声明包含s函数生成的头文件模型。h头文件。有关详细信息,请参见LibAddToCommonIncludes (incFileName)

等更复杂的s函数文件的依赖关系,指定源文件在其他位置或指定库或对象文件,使用rtwmakecfg.mAPI,所述使用rtwmakecfg。m API来定制生成的makefile

预编译函数库

你可以预编译新的或更新的s函数库(mex files)模型,使用MATLAB语言功能rtw_precompile_libs。使用指定的模型和一个图书馆构建规范,这个函数构建和地方图书馆在预编译库文件夹。

通过预编译函数库,您可以优化系统构建。一旦你的预编译库存在,构建过程可以省略库编译从随后的构建。对于使用大量的库的模型,建立处理可以显著节省的时间。

使用rtw_precompile_libs:

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

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

    如果isunix后缀=“_std.a”;其他后缀=“_vcx64.lib”;结束set_param (my_model, TargetLibSuffix,后缀);

    有很多因素影响预编译库后缀和扩展。下表提供了典型案例选择的系统目标文件,编译器工具链和其他选项影响你选择后缀和扩展。有关更多信息,检查模板文件matlab / rtw grt / c /文件夹或matlab rtw / c /导文件夹中。

    TMF文件 编译器_TOOL_CHAIN价值 预编译程序库(PRECOMP_LIBRARIES)
    库后缀功能(扩大_LIBRARY _NAME值) 图书馆后缀整数——只有代码(扩大_LIBRARY _NAME值) 库后缀优化速度(扩大_LIBRARY _NAME值) 库扩展(扩大_LIBRARY _NAME值)
    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 /一个 n /一个 _lcc . lib
    grt_vcx64.tmf vcx64 n /一个 n /一个 _vcx64 . lib
    grt_unix.tmf unix n /一个 n /一个 _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时,国旗表明库进行优化,这样他们只从整数代码编译。这一领域仅适用于接受方的目标。

    makeOpts

    一个特征向量,包括在指定一个选项rtwMake命令行。

    addLibs

    单元阵列结构,指定要建库是未指定的rtwmakecfg函数。每个结构都必须定义字符数组的两个字段:

    • 库名——库没有后缀的名字

    • libLoc——预编译库的位置

    目标makefile (TMF)可以指定其他库和如何构建这些库。用这个字段来预编译库。

    以下命令设置构建规范build_spec,这表明编译文件的文件夹src在当前工作目录中。

    build_spec = [];build_spec。rtwmakecfgDirs = {fullfile(pwd,'src')};
  4. 问题的电话rtw_precompile_libs

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

    rtw_precompile_libs (my_model build_spec);

相关的话题

这个主题有帮助吗?