文档

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

构建过程需要一个受支持的编译器。金宝app编译器,指的是包含链接器、make实用程序和高级语言编译器的开发环境。支持的编译器版本请参见:金宝app

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

构建过程还需要选择工具链或模板生成文件。工具链或模板生成文件决定在构建的生成阶段运行哪个编译器。有关更多信息,请参见选择构建方法并配置构建过程

要确定哪些模板makefile可用于编译器和系统目标文件,请参阅比较不同产品的系统目标文件支持下载188bet金宝搏金宝app

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

语言标准的兼容性

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

语言 金宝app支持标准
C ISO®/IEC 9899:1990,也称为C89/C90
C++ ISO/IEC 14882:2003

代码生成器从这些源代码生成的代码是ANSI®C / c++兼容:

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

  • 生成的系统级代码(任务ID[TID]检查、管理、功能等)

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

  • 来自其他代码生成器(如MATLAB)的代码®功能

此外,代码生成器可以合并以下代码:

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

  • 自定义s函数或TLC文件

请注意

这两个源的编码标准超出了代码生成器的控制范围。这些标准可能是法规遵从性问题的根源,例如代码使用的C99功能在金宝appANSI C, C89 /人私下偷偷收藏盒式子集。

编程语言的注意事项

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

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

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

  • 您的项目是否要求您将遗留或自定义代码与生成的代码集成?有关集成选项的摘要,请参见什么是外部代码集成?(嵌入式编码器)。

  • 项目是否需要集成C和C++代码?如果是,请参见什么是外部代码集成?(嵌入式编码器)。

    请注意

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

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

用STATEFLUE实现C++代码生成示例®,请参阅sfcndemo_CPPCcount模型或sf_cpp模型。

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

要使用c++语言支持,您可能需要配置代码金宝app生成器以使用特定的编译器。例如,如果Microsoft上没有安金宝app装支持的编译器®Windows电脑,默认编译器是低成本航空MATLAB产品附带的C编译器。这个编译器不支持C++。如果在指定C++代码生成之前不配置代码生成器使用C++编译器,则该软件会产生错金宝app误消息。

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

  • 代码生成器不支持C++代码生成:金宝app

    Simscape™动力传动系统™
    Simscape多体™第一代(Simscape多体(支持第二代)金宝app
    Simscape电气公司™电力系统
    金宝appSimulink实时™
  • 对于ERT和基于ERT的系统目标文件代码接口包装着手那种一次性的功能,以下字段目前不支持金宝app. cpp扩展。

    • 数据定义文件名

    • 定义文件对于数据对象,它是金宝app仿真软件。信号金宝appSimulink.参数类或其子类。

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

代码生成器假定有符号整数溢出为换行

代码生成器假设有符号整数C操作在溢出时自动换行,从而减少内存使用并增强所生成代码的执行。当算术运算的结果超出输出数据类型所能表示的值范围时,就会发生有符号整数溢出。C编程语言没有定义这种操作的结果。一些C编译器以溢出条件为代价,积极地优化范围内值的带符号操作。其他编译器保留完整的溢位包装行为。例如,gcc和MinGW编译器提供了一个选项来可靠地包装有符号整数溢出。为模型生成的程序映像可能产生与模型模拟结果不同的结果,因为溢出的处理取决于编译器。

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

如果您的应用程序担心这个问题,请考虑以下一个或多个操作:

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

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

  • 选择在整数溢出上换行的编译器。

  • 如果您已经安装了Embedded Coder,请开发并应用自定义代码替换库来替换为有符号整数生成的代码。有关更多信息,请参见代码替换自定义(嵌入式编码器)。

选择和配置编译器

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

mex-设置

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

在UNIX上®平台,默认编译器是GNU®gcc / g + +用于GNU或用于的Xcode雨衣

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

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

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

  • 如果选择基于模板生成文件(TMF)的系统目标文件,例如rsim.tlc,构建过程子面板显示用于配置生成过程的模板makefile参数。这个模板makefile参数显示所选系统目标文件的默认TMF文件。如果系统目标文件支持编译器特定的模板生成文件(例如,金宝appRapid Simulation或S-Function系统目标文件),则可以设置模板makefile到特定于编译器的TMF,例如rsim_lcc.tmfrsim_unix.tmf.(见比较不同产品的系统目标文件支持下载188bet金宝搏金宝app获取有效的TMF名称。)

如果生成的代码超过了2 Gb静态内存限制,就会发生编译器错误。要解决这个问题:

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

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

包括S函数源代码

当代码生成器使用S函数构建模型时,S函数的源代码可以位于当前文件夹中,也可以与其MEX文件位于同一文件夹中。只要找到名为sfncname.h和s -功能的mex -文件放在同一个文件夹中。这个文件夹必须在MATLAB路径上。

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

相关的话题

外部网站