构建过程需要一个受支持的编译器。金宝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码生成器以使用特定编译器。例如,如果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函数的源代码可以在当前文件夹中或与其MEX文件相同的文件夹中。当它找到命名的文件时,代码生成器会将包含的makefiles添加到生成的makefiles中
和s -功能的mex -文件放在同一个文件夹中。这个文件夹必须在MATLAB路径上。sfncname.
.h
类似地,代码生成器在找到文件时为文件夹添加规则
(或者sfncname.
.c.cpp.
)在与S函数MEX文件中相同的文件夹中。