主要内容

选择和配置C或c++编译器

构建过程需要一个受支持的编译器。金宝app编译器在此上下文中,指的是包含链接器和实用程序的开发环境,以及高级语言编译器。有关支持的编译器版本的详细信息金宝app,请参阅:

创建可执行程序时,构建过程必须能够访问受支持的编译器。金宝app构建过程可以根据默认MEX找到用于使用的编译器编译器。

构建过程还需要选择工具箱或模板makefile。Toolchain或模板Makefile确定构建阶段期间运行的编译器运行。有关更多信息,请参阅配置Toolchain或模板Makefile构建过程

要确定编译器和系统目标文件可以使用哪些模板生成文件,请参见比较产品目标文件支持下载188bet金宝搏金宝app

对于两个生成的文件和用户提供的文件,文件扩展名,.c.cpp.,确定构建过程是否使用C或C ++编译器。如果文件扩展名是.c,构建过程使用C编译器编译文件,符号使用C链接约定。如果文件扩展名是.cpp.,构建过程使用C ++编译器来编译文件,符号使用C ++链接规范。

语言标准的兼容性

代码生成器生成符合以下标准的代码:

金宝app支持的标准 其他名称
C

ISO®/ IEC 9899:1990

C89 / C90.

ISO / IEC 9899:1999

C99

C ++

ISO / IEC 14882:2003

c++ 03

ISO / IEC 14882:2011

C ++ 11.

代码生成器从这些源代码生成的代码是ANSI®C / C ++符合标准:

  • 金宝app®内置块算法代码

  • 生成的系统级代码(任务ID [TID]检查,管理,函数等)

  • 来自其他块集的代码,包括固定点设计器™产品和通信工具箱™产品

  • 其他代码生成器的代码,如matlab®职能

此外,代码生成器可以包含代码:

  • 嵌入式系统目标文件(例如,启动代码,设备驱动程序块)

  • 自定义s函数或TLC文件

笔记

这两个源的编码标准超出了代码发生器的控制。这些标准可以是合规性问题的源,例如使用不支持C99功能的代码金宝appANSI C,C89 / C90子集。

编程语言考虑因素

代码生成器生成C和c++代码。在选择编程语言时,请考虑以下几点:

  • 您的项目是否要求您配置代码生成器以使用特定编译器?C / C ++代码在Windows上生成®需要这个选择。

  • 您的项目是否要求您更改模型的默认语言配置设置?看选择C或C ++编程语言

  • 您的项目是否要求您使用生成的代码集成旧版或自定义代码?有关集成选项的摘要,请参阅什么是外部代码集成?(嵌入式编码器)

  • 您的项目是否要求您集成C和C ++代码?如果是这样,请参阅什么是外部代码集成?(嵌入式编码器)

    笔记

    使用自定义代码集成生成的代码时,可以混合C和C ++代码。但是,您必须了解C和默认C ++链接约定之间的差异,并添加外来的“C”'连接说明符在必要时。有关不同联系公约的详细信息以及如何申请外来的“C”,请参阅C ++编程语言参考书。

  • 您的项目是否需要来自其他产品的代码生成支持?下载188bet金宝搏金宝app看C ++语言支持限制金宝app

对于带状态流的C ++代码生成示例®,看看sfcndemo_cppcount.模型或sf_cpp.模型。

C ++语言支持限制金宝app

要使用C ++语言支持,您可能需要配置代金宝app码生成器以使用特定编译器。例如,如果Microsoft上未安装金宝app支持的编译器®Windows计算机,默认编译器是低成本航空C编译器附带MATLAB产品。此编译器不支持C ++。金宝app如果在为代码生成指定C ++之前,请不要将代码生成器配置为使用C ++编译器,软件会产生错误消息。

C ++支持的代码生成器限制包括:金宝app

  • 代码生成器不支持以下内容的C ++代码生成:金宝app

    Simscape™Driveline™
    Simscape多体™第一代(Simscape multibody.第二代得到支持)金宝app
    Simscape Electrical™电力系统
    金宝appSimulink Real-Time™
  • 对于基于ert和基于erct的系统目标文件代码接口包装设置不可用的功能,目前不支持以下字段金宝app.cpp.扩展。

    • 数据定义文件名

    • 定义文件对于数据对象,这是一个对象金宝app仿真软件。信号金宝appSimulink.Parameter.Parameter.课程或他们的子类。

    如果您使用a指定文件名.c扩展或没有扩展并为代码生成语言指定C ++,代码生成器产生a.cpp.文件。

代码生成器假定符号整数溢出的包裹

代码生成器通过假设覆盖的整数C操作包裹删除,减少了内存使用率并增强了生成的代码执行。当算术运算的结果超出输出数据类型可以表示的值范围之外,发生符号整数溢出。C编程语言未定义此类操作的结果。一些C编译器以溢出条件为代价,积极优化用于范围内值的符号操作。其他编译器保留完整的完整包装溢出行为。例如,GCC和MINGW编译器提供了一个选项,可根据符号整数溢出可靠地包装溢出。模型的生成的程序图像可以产生与模型仿真结果不同的结果,因为溢出的处理因编译器而异。

在生成代码时,如果使用受支持的编译器,并使用代码生成器配置的默认选项,编译金宝app器将保留完整的溢位包装行为。如果您更改编译器选项或在另一个开发环境中编译代码,那么编译器可能不会保留完整的溢位包装行为。在这种情况下,可执行程序会产生不可预测的结果。

如果此问题是您的应用程序的关注,请考虑以下一个或多个操作:

  • 验证编译后的代码是否产生预期的结果。

  • 如果编译器可以强制包装行为,请打开它。例如,对于gcc编译器或基于gcc的编译器(如MinGW),配置构建过程以使用编译器选项-fwrapv.

  • 选择一个在整数溢出上缠绕的编译器。

  • 如果已安装嵌入式编码器,则开发和应用自定义代码替换库以替换为符号整数生成的代码。有关更多信息,请参阅代码替换定制(嵌入式编码器)

选择和配置编译器

要查看已安装的编译器并选择默认编译器,请在命令窗口中输入:

mex-setup.

在Windows计算机上,您可以安装金宝app支持的编译器并选择默认编译器。

在UNIX上®平台,默认编译器是GNU®gcc / g + +对于GNU或Xcode苹果电脑

除非构建方法配置选择特定的编译器,否则代码生成器将使用构建过程的默认编译器。

首先,指定的系统目标文件决定代码生成器需要的编译器:

  • 如果您选择基于工具链的系统目标文件,例如grt.tlc(通用实时目标),ert.tlc.(嵌入式编码器®), 或者autosar.tlc.(嵌入式编码器为AutoSAR),构建过程子pane显示构建过程的配置参数。使用工具链配置参数选择模型构建的编译器和关联工具。要验证所选工具链,请单击验证工具链

  • 如果选择基于模板makefile(TMF)的系统目标文件,例如rsim.tlc., 这构建过程子pane显示模板Makefile参数,用于配置构建过程。这模板makefile参数显示所选系统目标文件的默认TMF文件。如果系统目标文件支持编译器的模板makefiles(金宝app例如,快速仿真或s函数系统目标文件),则可以设置模板makefile到特定于编译器的TMF,例如rsim_lcc.tmf.rsim_unix.tmf.(见比较产品目标文件支持下载188bet金宝搏金宝app有效的TMF名称。)

如果生成的代码超过2 GB静态内存限制,则会发生编译器错误。要解决此问题:

  • 对于基于GRT的系统目标文件,设置模型配置参数代码接口包装可重复使用的功能

  • 对于基于ert的系统目标文件,设置模型配置参数代码接口包装可重复使用的功能并选择参数使用动态内存分配进行模型初始化

包括S函数源代码

当代码生成器构建具有S函数的模型时,S函数的源代码可以在当前文件夹中或与其MEX文件相同的文件夹中。当它找到命名的文件时,代码生成器会将包含的makefiles添加到生成的makefiles中sfncname..h和s -功能的mex -文件放在同一个文件夹中。这个文件夹必须在MATLAB路径上。

类似地,代码生成器在找到文件时为文件夹添加规则sfncname..c(或者.cpp.)在与S函数MEX文件中相同的文件夹中。

相关的话题

外部网站