当你使用Simulink时万博1manbetx®软件创建和执行一个模型,并使用代码生成器产生C或c++代码,考虑您的配置,最多为三个运行时环境:
在MATLAB®开发运行MathWorks的计算机运行时环境®应用程序的开发过程中的软件。
生产硬件运行时环境,当应用程序投入生产时,在其中部署应用程序。
测试硬件运行时环境,在部署之前在其中测试正在开发的应用程序。
一个运行时环境可以提供多种功能,但是运行时环境在概念上仍然是不同的。通常,MATLAB开发的计算机是测试硬件。通常,生产硬件与MATLAB开发或测试硬件不同,功能也不如它们。许多类型的生产硬件只能运行下载的可执行文件。
提供关于生产硬件板和编译器的信息,你使用它时:
您可以使用Sim万博1manbetxulink的软件来模拟模型,你以后生成的代码
使用代码生成器生成用于部署的代码生产硬件
该软件使用的电路板和编译器的信息以获取整数的模拟和生产硬件生成的代码执行的结果和定点运算位真正的协议。代码生成器使用该信息来创建代码,以最高的效率执行。
当您生成的代码上进行测试测试硬件,提供了有关检测硬件板卡和您所使用的编译器的信息。代码生成器使用这些信息来创建代码,提供从结果之间的位真协议:
模拟中执行的整数和定点操作
对生产硬件生成的代码运行
在测试硬件生成的代码运行
你可以达到效果位真协议,即使生产和测试硬件是不同的。当C标准不能完全定义的行为,这两种类型的硬件的编译器可以使用不同的默认值。
您可以为特定的硬件板及其设备类型指定模型模拟或代码生成。例如,您可以设置数据大小、字节顺序和编译器行为(如整数舍入)。您可以配置:
生产硬件和你用它使用的编译器。这些信息会影响仿真和代码生成。看到例如生产硬件设置,影响正常的模式模拟。
您使用的测试硬件和编译器。此信息只影响代码生成。
配置生产硬件的选择配置参数>硬件实现。默认情况下,硬件实现窗格列出硬板,设备供应商和设备类型只有参数字段。除非您已经安装了硬件支持包,万博1manbetx硬板列表值没有
要么由代码生成确定系统目标文件
和获取硬件支持包万博1manbetx
。安装硬件支持包后,列表还包括相应的硬件板名称。万博1manbetx如果选择一个硬件板名称,则会显示该板的参数。若要设置设备详细信息,如数据大小和字节顺序,请单击设备详细信息。
在配置测试硬件配置参数>硬件实现>高级参数窗格。要启用配置测试硬件的详细参数,禁用配置参数>硬件实现>高级参数>测试硬件是一样的生产硬件参数。为测试硬件生成的代码在测试硬件参数指定的环境中执行。代码的行为就像在为生产硬件指定的环境中执行一样。有关更多信息,请参见测试硬件注意事项。
缺省值和属性显示为初始值硬件实现当窗格:
你指定一个系统目标文件在里面代码生成窗格。
系统目标文件指定默认微处理器及其硬件属性。
你不能改变的只有一个可能值参数。有多于一个可能值参数提供有效值的列表。如果您手动指定硬件属性硬件实现窗格中,验证这些值是否与系统目标文件一致。否则,生成的代码可能无法编译或执行,或者执行后会产生不正确的结果。
硬件实现参数向MATLAB软件描述硬件和编译器属性。代码生成器使用这些信息为尽可能高效地运行的运行时环境生成代码。生成的代码给出了整数操作和定点操作在仿真、生产代码和测试代码中的结果的位真一致性。
有关特定参数的详细信息,请参见硬件实现窗格(万博1manbetxSIMULINK)。要查看示例硬件实现窗格功能,请参见
例如模型。对于与配置硬件实现细节,请参见:rtwdemo_targetsettings
指定运行从模型生成的代码的硬件板卡。选择一个值配置参数>硬件实现>硬板。
“硬件实现”窗格标识选中的系统目标文件配置参数>代码生成。
要配置测试硬件,请使用配置参数>硬件实现>高级参数窗格。
要启用参数配置测试硬件的详细信息,集ProdEqTarget
来离
。
指定硬件板的方法
如果 | 选择 |
---|---|
菜单包括要使用的硬件板的名称。 |
那个硬件板的名字。 如果选择一个硬件板名称,则会显示该板的参数。 |
菜单不包括要使用的硬件板的名称。 |
该值将打开支持包安装程序。万博1manbetx安装所需的支持包。万博1manbetx安装支持包后,菜单中包括相关的硬件板名称。万博1manbetx |
该车型配置使用系统目标文件 |
没有为硬件实现指定硬件板。 |
该车型配置不使用系统目标文件 |
代码生成器使用指定的系统目标文件来确定硬件实现。 |
规定所述硬件设备的微处理器的供应商,使用设备供应商参数。中可用的微处理器由您的选择决定设备类型菜单。如果供应商的名字没有出现,选择定制处理器
。然后,使用设备类型参数来指定微处理器。
从支持的设备中指定微处理器名称万博1manbetx设备供应商选择,使用设备类型参数。如果微处理器没有出现在菜单中,请更改设备供应商来定制处理器
。然后,指定您的自定义设备设备的详细信息。
如果选择的设备类型的量,系统目标文件指定默认硬件属性,所述属性显示为初始值。你不能只有一种可能选择改变参数的值。有多于一个可能值参数提供了菜单。为您的硬件选择的值。
的比特数参数描述本地字长微处理器和的比特长度的烧焦,短,INT和长数据。代码生成成功:
位长度必须使得烧焦<=短<=INT<=长。
位长度必须是8的倍数,最大值为32。
钻头长度长数据必须不小于32。
的rtwtypes.h
文件定义整数类型的名称。该值,你必须提供与字的大小相一致,如编译器定义limits.h中
头文件。代码生成其整数类型名称映射到相应的Simulink整数类型名称。万博1manbetx
如果不ANSI®C具有匹配字大小是可用的类型,但较大的ANSI C类型是可用的,所述代码生成器使用对于较大型中int8_t
,uint8_T
,int16_T
,uint16_T
,int32_T
和uint32_T
。当代码生成器使用较大型,得到的记录的值(例如,MAT-文件记录)可以具有不同的数据类型比模拟记录的值。
应用程序可以使用长度从1位(无符号)到2位(有符号)到32位的整数数据。如果整数长度与可用类型的长度匹配,代码生成器将使用该类型。如果匹配的类型不可用,代码生成器使用可以保存数据的最小可用类型,生成不使用不必要的高阶位的代码。例如,在支持8位、16位和32位整数的硬件上,对于指定为24万博1manbetx位的信号,代码生成器将数据实现为anint32_T
要么uint32_T
。
代码,使用模拟整数数据不是最高效的。该代码可以是应用程序开发用于模拟整数长度是仅适用于生产硬件过程中非常有用。仿真,不影响执行的结果。
在代码生成期间,软件将检查模型数据类型与为生产硬件指定的数据类型的兼容性。
如果您为生产硬件整数指定的长度没有一个是32位,那么软件将产生错误。
如果模型使用的数据类型长度小于可用的生产硬件整数长度,软件将生成警告。
整数类型映射从代码生成的Simulink万博1manbetx
代码生成器整数类型 | 万博1manbetxSimulink的整型 |
---|---|
boolean_T |
布尔 |
中int8_t |
int8 |
uint8_T |
UINT8 |
int16_T |
INT16 |
uint16_T |
UINT16 |
int32_T |
INT32 |
uint32_T |
uint32 |
的字节次序参数指定的硬件使用大端
(最显著字节在前)或小端
(至少显著字节第一)字节顺序。如果不作为不明
中,代码生成器产生的代码,确定所述硬件的字节序。此设置是最有效的。
ANSI C不完全限定的商将一个带符号的整数通过另一个时舍入技术来编译器的使用。因此,该行为是实现相关的。如果两个整数是积极的,或者两者都是负的,必须商本轮下跌。如果任一整数为正,另一个是负的,商可以上下围捕。
的符号整数除法回合参数指示代码生成器关于编译器如何轮询带符号整数除法的结果。提供此信息不会改变编译器的操作。它只向代码生成器描述了这种行为,代码生成器使用这些信息来优化为有符号整数除法生成的代码。参数值为:
零
- 如果商两个整数之间,所述编译器选择的整数,它是接近零值作为结果。
地板
- 如果商是两个整数之间,编译器选择的整数,它是更接近负无穷大。
未定义的
——如果零
要么地板
不说明编译器的行为,或者如果该行为是未知的,选择这个值。
避免选择未定义的
。当代码生成器不知道编译器的符号整数除法舍入行为,模型构建产生额外的代码。
编译器商舍入行为根据这些值而变化。
您可以获取符号整数除法从编译器文档四舍五入的编译器实现。如果文件不可用,你可以决定通过实验这种行为。
例如商舍入为零,楼层,和未定义
N | D | 理想的N / d | 零 | 地板 | 未定义的 |
---|---|---|---|---|---|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ANSI C没有定义对编译器的负整数右移的行为。因此,该行为是实现相关的。的对有符号整数进行右移,即算术移位选项指示有关如何在编译器实现上负整数右移代码生成器。提供此信息不会改变编译器的操作。它仅描述了行为的代码生成器,其使用该信息来优化算术右移生成的代码。
如果C编译器实现有符号整数右移算术右移,选择该选项。否则,清除选项。通过用最显著位的值,其指示号码的二进制补码表示法符号右移腾空一个算术右移填充比特。该选项默认为选中。如果你的编译器处理右移为算术移位,该设置是首选。
当您选择该选项,代码生成器产生高效的代码,只要Simulink模型上进行符号整数算术移位。万博1manbetx
当选项被清除,代码生成器产生完全便携的,但效率较低的代码来实现正确的算术移位。
您可以获取从编译器文档算术右移的编译器实现。如果文件不可用,你可以决定通过实验这种行为。
如果您的模型版本14之前创建的,你有没有更新的模式,配置当前执行的硬件设备参数(TargetUnknown
)的值是“上”
默认情况下。
要更新模型,请清除配置参数>硬件实现>高级参数>测试硬件>配置测试硬件。或者在命令窗口中,键入:
CS = getActiveConfigSet(”your_model_name“);set_param(CS, 'TargetUnknown', '断');
此更新到您的模型:
使测试硬件是一样的生产硬件参数(ProdEqTarget
),将参数设置为“上”
。
复制生产设备供应商及型号参数(ProdHWDeviceType
)值到测试设备供应商和类型参数(TargetHWDeviceType
)。
要完成更新:
清除箱配置参数>硬件实现>高级参数>测试硬件>测试硬件是一样的生产硬件。应用这一步骤只有在您的生产和测试硬件是不同的。
设置参数配置参数>硬件实现>高级参数以配合您的生产和测试系统。
保存模型。
当您配置生产硬件,考虑以下几点:
生产硬件可以有字的大小等硬件特性从MATLAB开发计算机不同。您可以在原型硬件代码,从生产硬件或MATLAB开发计算机不同。当生产代码,代码生成考虑到这些差异。
Simu万博1manbetxlink产品使用了生产硬件配置中的一些信息。该信息使不生成代码的模拟能够提供与执行生成的代码相同的结果。例如,结果可以检测生产硬件上出现的错误条件,如硬件溢出。
代码生成器生成的代码为整数和定点操作提供与Simulink结果的位真一致性。万博1manbetx生成的模拟不可用数据长度的代码运行效率低于未进行模拟的代码。对于整数和定点结果,仿真结果不影响与Simulink的位真一致性。万博1manbetx
如果你的应用程序开发过程中改变运行时环境,生成或再生的代码,重新配置新的运行时环境中的硬件实现参数之前。当硬件代码执行不生成它,位真协议不是总是在仿真,产品代码和测试代码整数的结果和定点运算来实现。
要编译从模型生成的代码,使用整数舍入模式参数,以模拟您想要的C编译器的舍入行为。上显示此设置信号属性可以执行有符号整数运算的块的参数对话框中的窗格,例如产品和一天的查找表块。
对于大多数块的价值整数舍入模式完全定义四舍五入行为。对于支持定点数据和最简单舍入模式万博1manbetx的块,的值符号整数除法回合也会影响舍入。有关详细信息,请参见精确(定点设计师)。
当模型包含模型块,它们引用使用相同的硬件设置配置模型。
默认情况下,测试的硬件配置是一样的用于生产硬件的配置。您可以使用生成的代码在相同的生产环境的环境中进行测试。
如果测试和生产环境不同,您可以生成运行在测试硬件上的代码,就像它运行在生产硬件上一样:
为了使测试硬件参数,清除框配置参数>硬件实现>高级参数>测试硬件>测试硬件是一样的生产硬件。或者,在命令窗口类型:
CS = getActiveConfigSet(”your_model_name“);set_param(CS, 'ProdEqTarget', '断');
指定通过测试硬件设备类型细节(目标*
)参数。
如果选择指定默认微处理器及其硬件属性的系统目标文件,则这些默认值和属性将显示为初始值。
不能更改只有一个可能值的参数。如果修改硬件属性,请检查它们的值是否与系统目标文件一致。否则,生成的代码可能无法编译或执行,或者执行后会产生不正确的结果。
改变一些生产硬件设置,例如,ProdLongLongMode
和ProdIntDivRoundTo
,可影响正常模式下的模拟结果。下面的示例模拟具有四个输入的加法器。在第一个模拟,ProdLongLongMode
是禁用的。在第二次模拟中,ProdLongLongMode
已启用。在模拟输出的曲线图,则在观察的时间步长范围125-175的输出值之间的小差异。
模型=“hwSettingEffect”;new_system(模型)open_system(模型)%创建加法器[140 140 200 340];add_block (的万博1manbetxSimulink /数学运算/添加“,…[模型' / sum_int32 ']…“输入”,'++++',…'SaturateOnIntegerOverflow',…“上”,…'位置',…POS)POS = [75 155 105 175]。add_block (“内置/运行轨迹”,[模型' / in ']'位置',POS)set_param([模型' / in ']'OutDataTypeStr',…'INT32','PortDimensions',' 1 ','采样时间',' 1 ');add_line(模型,'IN1 / 1','sum_int32 / 1') pos = [75 205 105 225];add_block (“内置/运行轨迹”,[模型“/ In2”]'位置',POS)set_param([模型“/ In2”]'OutDataTypeStr',…'INT32','PortDimensions',' 1 ','采样时间',' 1 ');add_line(模型,'In2的/ 1','sum_int32 / 2')POS = [75 255 105 275]。add_block (“内置/运行轨迹”,[模型' / In3 ']'位置',POS)set_param([模型' / In3 ']'OutDataTypeStr',…'INT32','PortDimensions',' 1 ','采样时间',' 1 ');add_line(模型,'IN3 / 1','sum_int32 / 3')POS = [75 305 105 325]。add_block (“内置/运行轨迹”,[模型' / In4 ']'位置',POS)set_param([模型' / In4 ']'OutDataTypeStr',…'INT32','PortDimensions',' 1 ','采样时间',' 1 ');add_line(模型,“In4/1”,'sum_int32 / 4')POS = [275 230 305 250]。add_block (“内置/外港”,[模型/着干活的]'位置'、pos) add_line(模型,'sum_int32 / 1',“Out1/1”)指定输入数据t = 0时:200;peakValue = 1.5e9;IN1 = peakValue * SIN(T * 2 * PI / 100);IN2 = peakValue * COS(T * 2 * PI / 70);立方英寸= -peakValue * SIN(T * 2 * PI / 40);IN4 = -peakValue * COS(T * 2 * PI / 30);设定= Si万博1manbetxmulink.SimulationData.Dataset;设定= set.addElement(1,时间序列(INT32(IN1),T,“名字”,'SIG1'));设定= set.addElement(2,时间序列(INT32(平方英寸),T,“名字”,'SIG2'));int32(in3),t,“名字”,“sig3”));int = set. addelement (4, timeseries(int32(in4))“名字”,“sig4”));set_param(模型,'LoadExternalInput',“上”);set_param(模型,'ExternalInput','组');set_param(模型,“StopTime”,'50');%禁用生产硬件设置,并运行第一次模拟set_param(模型,'ProdLongLongMode',“关”);[〜,〜,Y1] = SIM(模型,200);%启用生产硬件设置和运行第二模拟set_param(模型,'ProdLongLongMode',“上”);[〜,〜,Y2] = SIM(模型,200);情节([Y1 Y2]);图(GCF);
属性中的累加器数据类型导致了行为上的差异总和块。的蓄电池数据类型块参数被设置为继承:通过内部规则继承
。对于本例,如果使用C,则生成的累加器数据类型是64位宽很长很长
数据类型已启用。否则,它是32位宽。根据sum块的输入值,当64位累加器没有饱和时,32位累加器可能会饱和。因此,正常模式的行为可以依赖于ProdLongLongMode
设置。在这两种情况下,正常模式下的行为和生产行为的硬件匹配位运算。