MATLAB编码器发布说明
单元阵列支持:在MAT万博1manbetxLAB代码中使用额外的单元阵列特性来生成代码
在R2016a中,对单元格数组的代码生成支持包括:万博1manbetx
使用{end + 1}来增长单元数组
您可以编写如下代码X{end + 1}
培养细胞阵列X
。例如:
X = {1 2};X(end + 1} = 'a';
当你使用{end + 1}
若要生长单元阵列,请遵循中描述的限制使用{end + 1}生成单元格数组。
单元格数组中的值和句柄对象
单元格数组可以包含值和句柄对象。对于代码生成不支持矩阵或结构中的对象这一限制,可以使用对象的单元格数组作为解决方法。万博1manbetx
单元格数组中的函数句柄
单元格数组可以包含函数句柄。
更快的线性代数独立代码:生成利用您自己的目标特定的LAPACK库的代码
为了提高调用线性代数函数的算法生成的代码的执行速度,MATLAB®编码器™可以生成对LAPACK使用LAPACKEC接口到LAPACK。如果线性代数函数的输入数组满足一定的条件,MATLAB编码器生成对相关LAPACK函数的调用。在R2015b中,只生成称为LAPACK函数的MEX。在R2016a中,生成的独立代码可以调用LAPACK函数。
LAPACK是一个用于数值线性代数的软件库。MATLAB在一些线性代数函数中使用了这个库,如eig
和圣言会
。对于MEX函数,MATLAB编码器使用MATLAB附带的LAPACK库。对于独立代码,MATLAB编码器为您指定的LAPACK库使用LAPACKE接口。如果没有指定LAPACK库,MATLAB编码器生成线性代数函数的代码,而不是生成LAPACK调用。
计算机视觉系统工具箱和图像处理工具箱代码生成:生成附加功能的代码
看到C代码生成支持万博1manbetx在计算机视觉系统工具箱™发行说明。
看到c代码生成:使用MATLAB编码器从20个附加函数生成代码在图像处理工具箱™发行说明。
MATLAB编码器学生访问:获取MATLAB编码器作为学生使用,附加产品或与MATLAB中小学套件
从R2016a开始,MATLAB编码器可作为学生使用软件的附加产品购买:MATLAB学生™和MATLAB和Simu万博1manbetxlink®学生套件™。学生使用的软件提供了专业工程师和科学家使用的相同工具。学生们使用该软件来培养技能,帮助他们在课程中脱颖而出,为职业生涯做准备。
从R2016a开始,MATLAB编码器包含在MATLAB中小学套件中。
可变大小空数组的连接:当组件数组为空时生成用于连接的代码
在R2016a中MATLAB编码器在串联中处理空数组更接近于MATLAB处理。
对于数组的连接,MATLAB和MATLAB编码器要求跨组件数组的相应维度具有相同的大小,除了增长的维度。对于水平连接,第二个维度增长。对于垂直拼接,第一个维度增长。
在MATLAB中,当组件数组为空时,非生长维度的大小无关紧要,因为MATLAB忽略了连接中的空数组。在以前的版本中,MATLAB编码器要求可变大小的空数组的非生长维度的大小与其他组件数组中相应维度的大小相匹配。维度大小不匹配会导致MEX函数出错,并可能导致独立代码中的错误答案。
在R2016a中,对于连接中的大多数空数组,MATLAB编码器行为匹配MATLAB行为。在某些情况下,如果MATLAB编码器不识别空数组并将其视为可变大小的数组,维度大小不匹配将导致编译时错误。
考虑函数myconcat
它连接了两个数组。
函数C = [A, B];结束
定义类型三机一体
和IN2
。三机一体
在两个维度上都是可变大小,没有上界。IN2
是可变大小的,每个维度的上限为5。
IN1 =编码器。typeof(1, [Inf], [1 1]);IN2 =编码器。Typeof (1, [5 5], [11 1]);
生成MEXmyconcat
。使用arg游戏
选项来指示输入参数具有定义的类型三机一体
和IN2
。
codegenmyconcatarg游戏{IN1, IN2}报告
定义R1
和R2
。
R1 = 0 (0,5);R2 =魔法(3)
R1
是一个0 × 5的空矩阵。R2
是一个3 × 3矩阵。
在以前的版本中,myconcat_mex (R1, R2)
导致大小不匹配错误。空数组第1维的大小R1
尺寸1的尺寸不匹配R2
。在R2016a,myconcat_mex (R1, R2)
得到与MATLAB中相同的答案。
a = 8 1 6 3 5 7 4 9 2
兼容性的考虑
当将连接的结果赋值给必须为固定大小的变量时,在连接中支持可变大小的空数组会引入不兼容性。万博1manbetx
在以前的版本中,包含可变大小数组的连接可能会生成固定大小的数组,因为在MATLAB编码器比在MATLAB中。在R2016a中,包含可变大小数组的连接会生成一个可变大小的数组。如果将连接的结果赋值给必须为固定大小的变量,则代码生成软件会产生编译时错误。
考虑函数myconcat
。
函数Z = myconcat1(X, Y)% # codegenZ.f = [X Y];
假设为。生成一个MEX函数myconcat1
。假设你为输入参数指定了这些大小:
X
大小:? * 2。第一个维度的大小是可变的,没有上界,而第二个维度的大小是固定的2。Y
尺寸为2 × 4。
在生成的代码中,结果的大小(X, Y)
2 -: 6。第一个维度的大小是固定的2,而第二个维度的大小是可变的,上限是6。这个大小既可以容纳空的也可以容纳非空的X
。如果你传递一个空的X
来myconcat_mex
,结果的大小为2 × 4。如果传递一个非空X
来myconcat_mex
,结果的大小为2 × 6。
考虑函数myconcat2
。
函数Z = myconcat2(X, Y)% # codegenZ.f = ones(2,6);myfcn (Z);Z.f = [X Y];函数myfcn (~)
myconcat2
将2 × 6的值赋给Z.f
。的大小Z.f
固定在2 × 6,因为Z
传递给myfcn
。在作业中Z.f = [X Y]
,连接的结果(X, Y)
是适应。代码生成失败,因为赋值的左边是固定大小的,右边是可变大小的。
要解决此不兼容性问题,可以使用coder.varsize
来宣布Z.f
是适应。
函数Z = myconcat2(X, Y)% # codegencoder.varsize (“Z.f”);Z.f = ones(2,6);myfcn (Z);Z.f = [X Y];函数myfcn (~)
更多情况下的memset优化:优化为连续数组元素赋常量值的代码
为了优化为连续数组元素分配文字常量的生成代码,代码生成软件尝试用memset
调用。一个memset
调用可以比代码更有效,例如为
-循环或多个连续的元素赋值。
在R2016a,MATLAB编码器调用memset
与以前的版本相比,针对更多案例进行了优化。
具有多个赋值的循环。
以前的版本 | R2016a |
---|---|
For (i = 0;I < 100;i++) {Y1[i] = 0.0;Y2[i] = 0.0;Y3[i] = 0.0;} |
memset (y1 [0], 0100 u * sizeof(双));memset (y2 [0], 0100 u * sizeof(双));memset (y3 [0], 0100 u * sizeof(双)); |
定义连续写入的连续语句。
以前的版本 | R2016a |
---|---|
Y1[0] = 255;Y1[1] = 255;Y1[2] = 255;…Y1[99] = 255 |
memset(&Y1[0], 255,100u * sizeof(unsigned char)); |
包含数组的结构体。
以前的版本 | R2016a |
---|---|
For (i = 0;I < 100;i++) {S->f1[i] = 0.0; |
memset(&S>f1[0], 0, 100U * sizeof(double)); |
结构数组的所有字段都被赋以相同的常数值。
以前的版本 | R2016a |
---|---|
For (i = 0;I < 100;i++) {S[i]。F1 = 255;[我]。F2 = 255;[我]。F3 = 255;} |
memset(&S[0], 255,100u * sizeof(struct0_T)); |
有关影响的设置的信息memset
优化,看到memset优化。
条件和布尔表达式的优化:为更多的情况生成高效的代码
对于某些条件和布尔表达式,MATLAB编码器通过用更简单、更有效的表达式替换表达式来优化生成的代码。在R2016a,MATLAB编码器在更多情况下使用此优化。
下面是这种优化的示例。
以前的版本 | R2016a |
---|---|
If (cond) {y = true;} else {y = val;}返回y; |
返回第二个|| val; |
Y = x && ! |
Y = false; |
MATLAB编码器应用程序行执行计数:看看如何很好地测试练习MATLAB代码
当您执行检查运行时问题步入MATLAB编码器应用程序,您必须提供一个测试,调用具有代表性数据的入口点函数。的检查运行时问题步骤从您的MATLAB函数生成一个MEX函数,并运行测试,用对MEX函数的调用替换对MATLAB函数的调用。在R2016a中,为了帮助您了解您的测试练习MATLAB代码的程度,该应用程序收集并显示行执行计数。当应用程序运行MEX函数时,应用程序计算与一行MATLAB代码对应的MEX代码的执行次数。
若要查看行执行计数,请在检查运行时问题后单击查看MATLAB行执行计数。
该应用程序在应用程序编辑器中显示您的MATLAB代码。该应用程序在代码的左侧显示一个颜色编码的覆盖栏。该表描述了颜色编码。
颜色 | 表明 |
---|---|
绿色 | 下列情形之一:
不同深浅的绿色表示行执行计数的不同范围。最暗的绿色表示最高的范围。 |
橙色 | 入口点函数执行多次,但代码只执行一次。 |
红色的 | 代码不执行。 |
当您将光标放置在覆盖栏上时,颜色突出显示将扩展到代码上。对于每一段代码,应用程序都会显示该段执行的次数。
默认情况下启用行执行计数收集。要禁用收集,请清除收集MATLAB行执行计数复选框。如果行执行收集降低了运行时问题检查的速度,请考虑禁用它。
MATLAB编码器应用程序撤销和重做:轻松恢复更改类型定义
类中的类型定义的更改可以恢复和恢复定义输入类型第一步MATLAB编码器还原和恢复输入参数表或全局变量表中的更改。
若要还原或恢复对输入参数类型定义的更改,请单击输入参数表上方的或。
若要还原或恢复对全局变量类型定义的更改,请单击全局变量表上方的或。
或者,使用键盘快捷键来撤消和重做。键盘快捷键应用于所选的表。在MATLAB首选项中定义了快捷方式。在Windows上®平台,默认的键盘快捷键的撤销和重做是Ctrl + Z和Ctrl + Y。
每个撤消操作都将恢复最后的更改。每个重做操作恢复上一次的更改。
看到定义键盘快捷键。
MATLAB编码器App Error Table:查看完整的错误信息
在以前的版本中,MATLAB编码器应用程序截断了一条不适合在错误消息表中的一行的消息构建错误选项卡检查运行时问题或生成代码步骤。在R2016a中,应用程序显示整个消息。
在以前的版本中,如果消息中包含链接,应用会将该链接从错误信息表中排除构建错误选项卡。在R2016a中,应用程序包含链接。
xcorr代码生成:为长输入向量的xcorr生成更快的代码
对于长输入向量,代码生成为xcorr
现在用频域计算代替时域计算。生成的代码可能比以前的版本更快。
要使用xcorr
功能,您必须有信号处理工具箱™软件。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2016a Bug报告
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2015aSP1 Bug报告
Cell数组支持:从使万博1manbetx用Cell数组的MATLAB代码生成C代码
在R2015b中,您可以从使用单元格数组的MATLAB代码生成代码。
代码生成软件将单元格数组分类为均匀或异构。这种分类决定了在生成的C/ c++代码中如何表示单元格数组。它还决定了如何在MATLAB代码中使用单元数组,从中生成C/ c++代码。看到同质与异质细胞阵列。
只要不指定相互冲突的需求,就可以控制单元阵列是同质的还是异质的。看到Control Cell Array是同质还是异质。
当您在生成C/ c++代码的MATLAB代码中使用单元数组时,您必须遵循某些限制。看到单元阵列对代码生成的要求和限制。
线性代数更快的MEX函数:生成利用LAPACK的MEX函数
为了提高为调用线性代数函数的算法生成的MEX的速度,生成的MEX现在可以调用LAPACK函数。如果线性代数函数的输入数组满足一定的条件,MATLAB编码器生成对相关LAPACK函数的调用。
LAPACK是一个用于数值线性代数的软件库。MATLAB在一些线性代数函数中使用了这个库,如eig
和圣言会
。MATLAB编码器使用MATLAB附带的LAPACK库。
有关开放源代码参考版本的信息,请参见线性代数包。
双精度到单精度的转换:将双精度MATLAB代码转换为单精度C代码
在R2015b中,如果您拥有定点设计器许可证,则可以将双精度MATLAB代码转换为单精度MATLAB代码或单精度C代码。
您可以为需要单精度代码的嵌入式硬件开发代码,而无需更改原始MATLAB算法。您可以使用用于原始算法的相同测试文件来验证单精度代码。当不能删除双精度操作时,代码生成报告将突出显示导致该操作的MATLAB表达式。
您可以通过以下方式生成单精度代码:
生成单精度C代码MATLAB编码器应用程序。使用MATLAB编码器应用程序生成单精度C代码。
生成单精度C代码
codegen
与-singleC
选择。看到在命令行生成单精度C代码。使用MATLAB生成单精度代码
codegen
与一个编码器。年代在gleConfig
对象。您还可以选择从单精度MATLAB代码生成单精度C代码。看到生成单精度MATLAB代码。
独立C代码中的运行时检查:在测试生成的独立库和可执行文件时检测并报告运行时错误
在R2015b中,生成的独立库和可执行文件可以检测和报告运行时错误,例如越界数组索引。在以前的版本中,只有生成的MEX检测并报告运行时错误。
默认情况下,为MEX启用运行时错误检测。默认情况下,禁用独立库和可执行文件的运行时错误检测。
启用独立库和可执行文件的运行时错误检测:
在命令行中,使用代码配置属性
RuntimeChecks
。CFG = code .config('lib');%或'dll'或'exe' cfg。RuntimeChecks = true;代码根-config CFG myfunction
使用MATLAB编码器App,在项目构建设置中,在调试选项卡,选择生成运行时错误检查复选框。
生成的库和可执行文件使用流
将错误消息写入stderr
和中止
终止应用程序。如果流
和中止
是不可用的,你必须提供它们。错误信息是英文的。
多核功能:从二十多个MATLAB数学函数生成支持openmp的C代码
用于代码生成,现在使用一些MATLAB数学函数parfor
创建在共享内存多核平台上并行运行的循环。并行运行的循环可以比在单个线程上运行的循环更快。
一些函数使用parfor
当元素的数量保证并行时。这些功能包括interp1
,interp2
,interp3
,并在MATLAB专业数学。一些函数使用parfor
当它们对列进行操作时,以及当要处理的列的数量保证并行性时。这些功能包括过滤器
,中位数
,模式
,排序
,性病
,var
。
如果编译器不支持开放多处理(OpenMP)应用程序接万博1manbetx口,MATLAB编码器将parfor
循环,为
循环。在生成的代码中,循环迭代在单个线程上运行。看到万博1manbetx支持编译器。
图像处理工具箱和计算机视觉系统工具箱代码生成:为这些工具箱中的附加功能生成代码
简化硬件规格在MATLAB编码器应用程序
在R2015b中,重新设计的对话框简化了指定硬件设置的方式生成代码页和项目生成设置硬件选项卡。重新设计整合了硬件设置,支持使用已安装的硬件支持包来执行处理器在循环(PIL),并隐藏硬件万博1manbetx实现细节,直到您想要看到它们。使用硬件支持包和PIL执行配合万博1manbetxMATLAB编码器需要嵌入式编码器®许可证。
这是重新设计的生成代码页面。
这里是重新设计的项目构建设置硬件选项卡。
这些变化包括:
工具链设置生成代码页和项目生成设置硬件选项卡替换工具链选项卡。
的标准数学库和代码替换库,原属硬件Tab,现在在自定义代码选项卡。
您可以指定硬件板而不是设备供应商和设备类型。应用程序填充设备供应商和设备类型基于硬件板。要指定运行MATLAB的硬件,请选择
MATLAB主机
。要指定设备供应商和类型,请选择无-选择下面的设备
。如果您拥有嵌入式编码器许可证,则可以为已安装的硬件支持包选择电路板。万博1manbetx对于R2015b,硬件支持包如下:万博1manbetx
嵌入式编码器支持包Beagle万博1manbetxBone黑色硬件
ARM的嵌入式编码器支持包万博1manbetx®皮质®——一个处理器
有关使用硬件支持包的信息万博1manbetxMATLAB编码器,请参阅嵌入式编码器发行说明。
在硬件选项卡,应用程序隐藏硬件实现细节。单击,查看或修改硬件实现的详细信息定制硬件实现。默认情况下,测试和生产硬件实现设置是相同的。该应用程序只显示一组设置。要分别显示或修改测试和生产硬件实现设置,请在所有设置选项卡,在硬件,设置测试硬件与生产硬件相同来
没有
。
MATLAB编码器应用程序用户界面改进
对手动类型定义的改进
手动类型定义的改进包括:
上下文菜单选项指定数组大小。
更容易定义结构类型。
使用添加字段的图标。
请参阅输入变量表中的结构类型名称。
更容易定义
embedded.fi
类型。看到
numerictype
输入变量表中的属性。使用图标来更改
numerictype
属性。
用于指定文件的制表符完成
您可以使用选项卡补全来指定入口点函数和测试文件。
应用程序颜色和MATLAB首选项之间的兼容性
该应用程序使用与颜色兼容的颜色桌面工具颜色在MATLAB中的首选项。有关MATLAB首选项的信息,请参见首选项。
的进度指标检查运行时问题一步
当您执行检查运行时问题步骤中,可以看到进度指示器。
保存和恢复之间的工作流状态MATLAB编码器应用程序会话
在R2015b中,当您完成检查运行时问题或生成代码步骤和关闭项目MATLAB编码器应用程序保存步骤的结果。重新打开项目时,不必重复该步骤。你可以从你停下来的地方继续。
之间的项目重用MATLAB编码器和HDL编码器
在R2015b中,您可以打开aMATLAB编码器您可以在。中打开HDL编码器项目MATLAB编码器您必须拥有HDL编码器许可证才能使用HDL编码器应用程序。当您在应用程序之间移动时,两个应用程序的项目设置都会保存。例如,当您打开MATLAB编码器在HDL Coder应用程序中的项目中,该应用程序使用两个应用程序共同的设置。它保存不使用的设置,以便如果您在MATLAB编码器App,这些设置都是可用的。
打开一个MATLAB编码器项目作为HDL编码器项目:
在MATLAB编码器应用程序,点击并选择
作为HDL编码器重新打开项目
。在HDL Coder应用程序中,单击开放选项卡并指定项目。
打开HDL编码器项目MATLAB编码器项目:
在HDL Coder应用程序中,单击并选择
在MATLAB编码器中重新打开
。在MATLAB编码器应用程序,点击并选择
打开现有项目
。
代码生成使用免费提供的MinGW-w64编译器
在R2015b中,您可以使用TDM-GCC中的MinGW-w64编译器在64位Windows主机上生成C/ c++ MEX、库和可执行文件。有关安装说明,请参见安装MinGW-w64编译器。
当您为C/ c++库和可执行文件生成代码时,您可以指定一个MinGW编译器工具链。如果您使用命令行工作流,请设置工具链
属性在库或可执行文件的代码配置对象中:
CFG = code .config('lib') CFG。Toolchain = 'MinGW64 v4。x| gmake (64-bit Windows)'
如果你使用MATLAB编码器App,在项目构建设置中,在硬件选项卡,设置工具链来MinGW64 v4。x| gmake (64-bit Windows)
。
codegen
库和可执行文件的调试选项
在R2015b中,为自由
,dll
,exe
目标,你可以使用- g
选择权codegen
命令,打开编译器调试模式。在以前的版本中,- g
选项仅为MEX目标启用编译器调试模式。
如果启用调试模式,C编译器会禁用一些优化。编译更快,但执行更慢。
兼容性的考虑
在R2015b中,为自由
,dll
,exe
目标,- g
选项启用编译器调试模式。在以前的版本中,for自由
,dll
,exe
目标,codegen
忽略了- g
选择。编译器生成的代码与省略时相同- g
选择。
定点转换增强
在应用程序中保存和恢复定点转换工作流状态
如果你在完成定点转换过程之前关闭了一个项目,该应用程序会保存你的工作。当你重新打开项目时,应用程序恢复状态。您不必重复在前一个会话中完成的定点转换步骤。例如,假设您在数据类型建议之后关闭项目。当您重新打开项目时,应用程序将显示数据类型建议的结果并启用转换。你可以继续你停下来的地方。
在使用应用程序进行定点转换期间重用MEX文件
在定点转换期间,应用程序最大限度地减少了重新生成MEX文件的次数。应用程序仅在需要更改代码时才重新构建MEX文件。
附加规格fimath
应用编辑器中的属性
你可以控制一切fimath
在应用程序编辑器中设置代码中变量的属性。要修改fimath
变量设置,选中变量后单击FIMATH在对话框中。可以更改舍入方法、溢出操作、乘积模式和求和模式属性。有关这些属性的详细信息,请参见fimath
。
还可以从定点转换设置对话框修改这些属性。要打开设置对话框,请在转换为定点页,单击设置箭头。
改进比较图管理
在定点转换期间,应用程序将在定点代码的测试阶段生成的绘图连接到一个图形窗口的单独选项卡中。每个选项卡图表示一个输入或输出变量,并标有函数、变量、字长和时间戳。每个选项卡包含三个子图。这些图表使用基于时间序列的绘图函数来显示浮点和定点结果以及它们之间的差异。
随后的迭代也绘制在相同的图形窗口中。
变量专门化
在转换为定点页面,在变量表中,您可以查看变量专门化。
检测多字操作
当一个操作的输入或输出大于处理器的最大字长时,生成的代码包含多字操作。多词操作在硬件上可能效率很低。昂贵的定点操作检查现在突出显示MATLAB代码中的表达式,这些表达式可能导致生成代码中的多字操作。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2015b Bug报告
改进的MATLAB编码器集成编辑器和简化工作流程的应用程序
在R2015a中MATLAB编码器App为代码生成工作流提供了一个新的用户界面。
改进后的应用程序包括:
自动检查代码生成准备情况和运行时问题。代码生成准备检查包括不支持功能的标识。万博1manbetx
一个集成的编辑器,在不离开应用程序的情况下修复MATLAB代码中的问题。
项目摘要和对生成文件的访问。
以MATLAB脚本的形式导出项目设置。
每个步骤的帮助和更多信息的文档链接。
生成示例C/ c++主要用于将生成的代码集成到应用程序中
在R2015a中,您可以在生成源代码、静态库、动态库或可执行文件时生成示例C/ c++主函数。修改示例main函数以满足应用程序的需求。
示例main函数提供了一个模板,可帮助您将生成的代码合并到应用程序中。该模板展示了如何将函数输入参数初始化为零并调用入口点函数。当代码为数据使用动态内存分配时,生成示例main函数特别有用。看到在应用程序中使用示例C Main。
默认情况下,MATLAB编码器在生成源代码、静态库、动态库或可执行文件时生成示例主函数。
控件控制示例主函数的生成MATLAB编码器应用:
在生成代码页,打开生成对话框中,单击生成箭头。
在生成对话框,设置构建类型致下列其中一项:
源代码
静态库(.lib)
动态库(.dll)
可执行文件(. exe)
点击更多的设置。
在所有设置选项卡,在先进的,设置生成示例main致下列其中一项:
不生成示例main函数吗
生成,但不编译一个示例main函数
(默认)生成并编译一个示例main函数
要使用命令行界面控制示例main函数的生成:
的代码配置对象
“自由”
,“dll”
,或exe”
。例如:CFG = code .config('lib');%或DLL或exe
设置
GenerateExampleMain
属性设置为下列之一:“DoNotGenerate”
“GenerateCodeOnly”
(默认)“GenerateCodeAndCompile”
例如:
cfg。GenerateExampleMain = 'GenerateCodeOnly';
在生成的代码中更好地保存MATLAB变量名
为了减少内存使用,在可能的情况下,变量在生成的代码中共享名称和内存。在以前的版本中,这种变量重用优化为其他变量重用变量名,或者用其他变量名替换变量名。在R2015a中,默认情况下,此优化保留您的变量名称—它不会替换或重用它们。但是,其他优化可以从生成的代码中删除变量名。看到生成代码中的变量重用。
兼容性的考虑
如果您的MATLAB代码使用大型数组或结构,在某些情况下,用于保存变量名的额外内存可能会影响性能。为了减少内存使用,指定变量重用优化不必保留变量名:
使用项目,在“项目设置”对话框中所有设置选项卡,设置保留变量名来
没有一个
。使用命令行界面设置配置对象属性
PreserveVariableNames
来没有一个
。
看到重用大型数组和结构。
为逻辑索引生成更高效的代码
与以前的版本相比,为逻辑数组索引生成的代码更快,使用的内存更少。例如,为以下函数生成的代码比以前的版本更有效。
function x = foo(x,N) assert(all(size(x) == [1 100])) x(x>N) = N;
在R2015a中,您不必替换x(x>N) = N
与一个为
-循环来提高性能。
代码生成额外的图像处理工具箱和计算机视觉系统工具箱功能
计算机视觉系统工具箱
愿景。DeployableVideoPlayer
在Mac平台上。在以前的版本中,
愿景。DeployableVideoPlayer
万博1manbetx在Linux上支持的代码生成®和Windows平台。在R2015a,愿景。DeployableVideoPlayer
还支持Ma万博1manbetxc平台上的代码生成。
看到计算机视觉系统工具箱。
从项目到MATLAB脚本的转换使用MATLAB编码器应用程序
在以前的版本中,要将项目转换为MATLAB脚本,您可以使用-tocode
选择权编码器
命令。在R2015a中,您还可以使用MATLAB编码器应用程序将项目转换为脚本。在将项目转换为脚本之前,请完成定义输入类型的一步。
将项目转换为脚本MATLAB编码器App,在工作流栏上,点击,然后选择转换为脚本。
改进了对编译时常量的识别
在以前的版本中,只有当所有字段或元素都是常量时,代码生成软件才能识别结构字段或数组元素是常量。在R2015a中,在某些情况下,即使某些结构字段或数组元素不是恒定的,软件也可以识别恒定字段或恒定元素。
例如,考虑下面的代码。场s.a.
是常数和场mit获得
不是恒定的:
函数y = create_array(x) s.a = 10;S.b = x;Y = 0 (1, sa);
在以前的版本中,软件不识别该字段s.a.
是常数。在生成的代码中,如果启用了可变大小,y
是一个可变大小的数组。如果禁用可变大小,则代码生成软件会报告错误。在R2015a中,软件识别到这一点s.a.
是一个常数。y
是一个包含10个元素的静态行向量。
由于这种改进,您可以使用单独的赋值将常量值赋给结构字段。例如:
函数Y = mystruct(x) s.a = 3;S.b = 4;Y = 0 (a, b);
在以前的版本中,只有当您使用类定义完整的结构时,软件才能识别常量结构体
功能:例如:
函数Y = mystruct(x) s = mystruct(“一个”3,“b”4);Y = 0 (a, b);
在某些情况下,代码生成软件不能识别常量结构字段或数组元素。看到结构体和数组中常量的代码生成。
兼容性的考虑
对常量字段和常量元素识别的改进会导致R2015a中生成的代码与之前版本中生成的代码存在以下差异:
在R2015a中,函数输出可以比以前的版本更具体。在以前的版本中复杂的输出在R2015a中可能是真实的。在以前的版本中可变大小的数组输出可以在R2015a中固定大小。
使用以前版本生成的代码中存在的一些代码分支从R2015a中生成的代码中消除。
改进的emxArray
接口函数生成
当您生成使用可变大小数据的代码时,MATLAB编码器导出可用于创建和交互的函数emxArray
S在生成的代码中。R2015a包括以下改进emxArray
接口功能:
emxArray
用于外部C/ c++函数使用的可变大小数组的接口函数
当你使用coder.ceval
调用外部的C/ c++函数,MATLAB编码器为外部函数使用的可变大小数组生成emxArray接口函数。
初始化输出的函数emxArray
年代和emxArray
S结构输出
MATLAB编码器生成要初始化的函数emxArray
S是输出或emxArray
S在结构输出中。
创建空对象的函数emxArray
在堆上有一个形式的名称:
emxInitArray_ < baseType >
< baseType >
是emxArray元素的类型。这个函数的输入是一个指向an的指针emxArray
指针和维数。例如:
emxInitArray_real_T(emxArray_real_T **pEmxArray, int numDimensions);
创建空的函数emxArray
结构中的S有如下形式的名称:
空白emxInitArray_ < structType >
< structType >
是结构的类型。该函数的输入是指向包含emxArray
例如:
void emxInitArray_cstruct0_T(cstruct0_T *structure);
MATLAB编码器还生成释放动态内存的函数emxArray
分配。例如,释放动态内存的函数emxInitArray_real_T
分配是:
调用emxArray_real_T *emxArray
释放动态内存的函数emxInitArray_cstruct0_T
分配是:
void emxdestroyray_struct0_t (struct0_T *structure)
看到数组的C代码接口。
结构的外部定义,该结构包含emxArray
年代
在以前的版本中,MATLAB编码器不允许外部定义包含emxArray
如果你在C代码中定义结构并在外部头文件中声明它,MATLAB编码器报告错误。
在R2015a,MATLAB编码器允许外部定义包含的结构emxArray
但是,不要定义的类型emxArray
在外部的C代码。MATLAB编码器类的类型emxArray
一个结构所包含的S。
声明的变量类型之间进行类型转换的代码生成coder.opaque
对于代码生成,可以使用MATLAB投
函数将变量强制转换为使用coder.opaque
。使用投
与coder.opaque
仅适用于数字类型。
类型声明的变量强制转换coder.opaque
到一个MATLAB类型,可以使用B = cast(A,type)
语法。例如:
X = coder.opaque('size_t','0');X1 = cast(x, 'int32');
你也可以用B = cast(A,'like',p)
语法。例如:
X = coder.opaque('size_t','0');X1 = cast(x, 'like', int32(0));
将MATLAB变量强制转换为声明的变量类型coder.opaque
,你必须使用B = cast(A,'like',p)
语法。例如:
X = int32(12);X1 =编码器。不透明(' size_t ', ' 0 ');X2 = cast(x, 'like', x1));
使用投
与coder.opaque
为以下内容生成正确的数据类型:
C/ c++函数的输入
coder.ceval
。分配给调用的C/ c++函数输出的变量
coder.ceval
。
如果没有这种强制转换,在代码生成期间可能会收到编译器警告。
考虑下面的MATLAB代码:
Yt = coder.opaque(“size_t”,“42”);= coder.ceval(“foo”);Y = cast(yt;“int32”);
coder.opaque
宣称欧美
有C型size_t
。Y = cast(yt, 'int32')
转换欧美
来int32
并将结果赋值给y
。
因为y
是MATLAB的数值型,可以用吗y
就像您通常在MATLAB代码中使用变量一样。
生成的代码如下所示:
Size_t yt= 42;int32_T y;y = (int32_T)yt;
生成的代码中的显式强制转换可能会阻止编译器发出警告。
代码生成parfor
-循环与堆栈溢出
在以前的版本中,您无法为parfor
-包含不适合堆栈的变量的循环。在R2015a中,您可以为此生成代码parfor
循环。看到使用并行for循环(parfor)的算法加速。
的默认值更改PassStructByReference
代码配置对象属性
的PassStructByReference
代码配置对象属性控制codegen
命令为入口点输入和输出结构生成按引用传递或按值传递结构。
在以前的版本中,默认值为PassStructByReference
是假
。默认情况下,codegen
通过值结构生成。此默认行为不同于MATLAB编码器应用默认行为。应用程序通过引用结构生成。
在R2015a中,的值PassStructByReference
是真正的
。默认情况下,codegen
通过引用结构生成传递。的默认行为现在匹配默认行为MATLAB编码器应用程序。
看到按引用或按值传递结构参数。
兼容性的考虑
对于具有结构参数的入口点函数,如果PassStructByReference
属性具有默认值,codegen
在R2015a中生成与以前版本不同的函数签名。
函数签名在R2015a中生成的示例codegen
命令。PassStructByReference
属性设置为默认值,真正的
:
void my_struct_in(const struct0_T *s, double y[4])
my_struct_in
传递输入结构年代
通过引用传递。
在以前的版本中生成的相同函数的签名codegen
命令。PassStructByReference
属性设置为默认值,假
是:
void my_struct_in(const struct0_T s, double y[4])
my_struct_in
传递输入结构年代
的价值。
来控制是否codegen
生成按引用传递或按值传递结构,设置PassStructByReference
代码配置对象属性。例如,要生成pass by值结构:
CFG = code .config('lib');cfg。PassStructByReference = false;
的变化全局变量
从项目生成的脚本中的变量
生成的脚本MATLAB编码器使用全局变量的项目创建该变量全局变量
。在以前的版本中,全局变量
存储全局变量的类型。全局变量的初始值直接在codegen
命令。在R2015a,全局变量
存储全局变量的类型和初始值。的codegen
命令获取初始值全局变量
。
移除仪表化的MEX输出类型
您不能再指定输出类型仪器的墨西哥人
。
兼容性的考虑
对于手动定点转换,请使用命令行工作流。此工作流使用定点设计器函数buildInstrumentedMex
和showInstrumentationResults
。看到手动转换浮点MATLAB算法到定点在定点设计器文档中。
截断包含类名前缀的长枚举类型值名称
在以前的版本中,当代码生成软件确定生成的枚举类型值名称的长度或唯一性时,它会忽略类名前缀。如果指定生成的枚举类型值名称包含类名前缀,则生成的类型值名称可能会:
超出了指定的最大标识符长度。
与另一个标识符相同。
在R2015a中,如果指定生成的枚举类型值名称包含类名前缀,则生成的类型值名称:
不超过最大标识符长度。
是独一无二的。
兼容性的考虑
对于包含类名前缀的长类型值名称,以前版本中生成的名称可以与R2015a中生成的名称不同。例如,考虑枚举类型:
classdef Colors < int32 enumeration Red (1) Green678911234567892123456789312 (2) end methods (Static) function p = addClassNameToEnumNames() p = true;结束结束结束
假设标识符的最大长度为缺省值31。在以前的版本中,为枚举值生成的名称Green678911234567892123456789312
是Colors_Green678911234567892123456789312
。名称长度超过31个字符。在R2015a中,截断后的名称为31个字符。假设生成的名称与其他名称不冲突,则R2015a中的名称为Colors_Green6789112345678921234
。使用上一个版本中生成的长名称的外部代码不能与R2015a中生成的代码接口。
要解决这个问题,如果可能的话,增加标识符的最大长度:
在命令行中设置
MaxIdLength
。在MATLAB编码器App,在项目构建设置中,在代码的外观选项卡,设置最大标识符长度。
定点转换增强
万博1manbetx支持多个入口点函数
定点转换现在支持多个入口点函数。万博1manbetx您可以生成C/ c++库函数来与更大的应用程序集成。
万博1manbetx支持全局变量
现在,您可以将包含全局变量的MATLAB算法转换为定点代码,而无需修改MATLAB代码。
基于代码覆盖率的翻译
在定点转换时,MATLAB编码器现在检测死的和不变的折叠代码。如果在模拟测试文件期间代码的任何部分没有执行,它会警告您。此检测可以帮助您验证测试文件是否在预期的操作范围内测试算法。该软件在将代码从浮点MATLAB代码转换为定点MATLAB代码期间使用此代码覆盖信息。该软件在定点代码中插入内联注释,以标记死区域和未翻译区域。它包括生成的定点转换HTML报告中的代码覆盖率信息。
生成的定点代码增强
现在生成的定点代码:
为多输出赋值使用冒号语法,减少了
fi
在生成的定点代码中强制转换。保留原始算法的缩进和格式,提高生成的定点代码的可读性。
附加DSP系统工具箱对象的自动定点转换
如果您拥有DSP系统工具箱™许可证,您现在可以将以下DSP系统工具箱系统对象转换为定点:
dsp。FIRFilter
,直接式和直接式的转置
您可以根据模拟范围数据为这些System对象提出和应用数据类型。使用MATLAB编码器应用程序,在转换过程中,您可以查看这些系统对象的模拟最小值和最大值以及建议的数据类型。您还可以查看整数信息和直方图数据。不能基于静态范围数据为这些System对象建议数据类型。
新的插值方法生成查找表的MATLAB函数替换
的coder.approximation
函数现在提供了“平”
插值法生成查找表的MATLAB函数替换。这个完全指定的查找表通过丢弃预查找步骤和减少数据路径中乘数的使用来实现高速度。此插值方法可从命令行工作流中获得,并在函数替换选项卡的“定点转换”步骤。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2015a Bug报告
代码生成额外的图像处理工具箱和计算机视觉系统工具箱功能
图像处理工具箱
bwdist |
imadjust |
intlut |
ordfilt2 |
bwtraceboundary |
imclearborder |
iptcheckmap |
rgb2ycbcr |
fitgeotrans |
imlincomb |
medfilt2 |
stretchlim |
histeq |
imquantize |
multithresh |
ycbcr2rgb |
有关支持代码生成的图像处理工具箱函数列表,请参见万博1manbetx图像处理工具箱。
计算机视觉系统工具箱
有关支持代码生成的计算机视觉系统工具箱函数列表,请参见万博1manbetx计算机视觉系统工具箱。
代码生成额外的通信系统工具箱和DSP系统工具箱功能和系统对象
通信系统工具箱
有关支持代码生成的通信系统工具箱™函数列表,请参见万博1manbetx通信系统工具箱。
DSP系统工具箱
您不能直接从这个System对象™生成代码。你可以使用
generateFilteringCode
方法生成一个MATLAB函数。您可以从这个MATLAB函数生成C/ c++代码。dsp。FIRDecimator
对于转置结构
有关支持代码生成的DSP系统工具箱函数和系统对象的列表,请参见万博1manbetxDSP系统工具箱。
基于内置MATLAB整数类型的枚举类型代码生成
在以前的版本中,枚举类型基于int32
。在R2014b中,您可以基于以下内置MATLAB整数数据类型之一的枚举类型:
int8
uint8
int16
uint16
int32
您可以使用基类型来控制生成代码中枚举类型的大小。您可以选择基类型来:
将枚举类型表示为可移植到不同目标的固定大小的整数。
减少内存使用。
遗留代码的接口。
符合公司标准。
基类型决定了在生成的C和c++代码中枚举类型的表示。对于基本类型int32
,代码生成软件生成一个C枚举类型。例如:
enum LEDcolor {GREEN = 1, RED};typepedef enum LEDcolor;
类型定义
语句,用于枚举类型和#定义
枚举值的语句。例如:
typedef short LEDColor;#define GREEN ((LEDColor)1) #define RED((LEDColor)2)
更改生成代码中的枚举类型值名称
在以前的版本中,默认情况下,生成代码中的枚举类型值名称包含一个类名前缀,例如:LEDcolor_GREEN
。在R2014b中,默认情况下,生成的枚举类型值名称不包含类名前缀。若要在枚举类型定义中生成包含类名前缀的枚举类型值名称,请修改addClassNameToEnumNames
方法返回真正的
而不是假
:
classdef(枚举)LEDcolor < int32枚举绿(1),红(2)结束方法(静态)函数y = addClassNameToEnumNames() y = true;结束结束结束
兼容性的考虑
使用以前版本生成的代码中的枚举类型值的名称与使用R2014b生成的名称不同。如果您有使用这些名称之一的代码,请修改代码以使用R2014b名称或生成名称,以便它与以前版本中的名称匹配。如果希望在R2014b中生成的枚举类型值名称与以前版本中的名称匹配,请在枚举类型定义中修改addClassNameToEnumNames
方法返回真正的
而不是假
。
代码生成额外的MATLAB函数选项
“向量”
和“矩阵”
的特征值选项eig
的所有输出类选项
总和
和刺激
的所有输出类选项
的意思是
除了“本地”
对于整数类型多维数组支持万博1manbetx
flipud
,fliplr
,rot90
尺寸操作沿选项
circshift
更改导出标识符的长度
在以前的版本中,代码生成软件将导出的标识符(如入口点函数名或emxArray实用程序函数名)限制为由最大标识符长度设置定义的最大长度。如果标识符的截断导致不同函数具有相同的名称,则代码生成失败。在R2014b中,对于导出的标识符,即使其长度超过最大标识符长度设置,代码生成软件也会使用整个生成的标识符。但是,如果目标C编译器的最大标识符长度小于生成的标识符的长度,则目标C编译器将截断该标识符。
兼容性的考虑
除非目标C编译器的最大标识符长度等于从上一个版本中截断的导出标识符的长度,否则上一个版本中的标识符与R2014b生成的标识符不匹配。例如,假设最大标识符长度设置为默认值31,目标C编译器的最大标识符长度为255。假设在R2014b中,由代码生成软件生成函数emxCreateWrapperND_StructType_123
的无界可变大小结构数组StructType_123
。在以前的版本中,相同的函数具有被截断的名称emxCreateWrapperND_StructType_1
。在本例中,之前调用emxCreateWrapperND_StructType_1
现在必须呼唤emxCreateWrapperND_StructType_123
。
用于跨平台代码生成的Intel Performance Primitives (IPP)平台特定的代码替换库
在R2014b中,您可以选择英特尔®用于特定平台的性能原语(IPP)代码替换库。您可以为不同于用于代码生成的主机平台的平台生成代码。新的代码替换库是:
Intel IPP for x86-64 (Windows)
Intel IPP/SSE与GNU99扩展,适用于x86-64 (Windows)
Intel IPP for x86/Pentium (Windows)
Intel IPP/SSE与GNU99扩展为x86/Pentium (Windows)
Intel IPP for x86-64 (Linux)
Intel IPP/SSE与GNU99扩展,适用于x86-64 (Linux)
在一个MATLAB编码器你在R2014b中创建的项目,你不能再选择这些库:
英特尔IPP
Intel IPP/SSE与GNU99扩展
但是,如果您从以前的版本中打开一个项目,该项目指定使用GNU99扩展的Intel IPP或Intel IPP/SSE,则库选择将被保留,并且该库将出现在选择列表中。
看到选择一个代码替换库。
定点转换增强
从项目转换到MATLAB脚本命令行定点转换和代码生成
对于一个MATLAB编码器项目中包含自动定点转换,您可以使用-tocode
选择权编码器
命令创建一对用于定点转换和定点代码生成的脚本。您可以使用脚本在命令行工作流中重复项目工作流。在将项目转换为脚本之前,必须完成测试数字步骤的定点转换过程。
例如:
编码器-tocode my_fixpt_proj -script myscript.m
该命令生成两个脚本:
myscript.m
包含MATLAB命令,用于创建代码配置对象,并从定点MATLAB代码生成定点C代码。代码配置对象具有与项目相同的设置。myscript
包含MATLAB命令,用于创建浮点到定点配置对象,并从入口点函数生成定点MATLAB代码。浮点到定点配置对象具有与项目相同的定点转换设置。后缀
。m后缀
是项目文件指定的生成的定点文件名后缀。
如果没有指定- script
选项,编码器
将脚本写入命令窗口。
不支持的函数的查找表近似值万博1manbetx
定点转换工具现在提供了一个选项,可以在原始MATLAB代码中为连续和无状态函数生成查找表近似值。此功能对于处理定点不支持的函数非常有用。万博1manbetx要用生成的查找表替换函数,请指定要替换的函数函数替换选项卡。
在命令行工作流中,使用coder.approximation
和编码器。FixptConfig
配置对象addApproximation
方法。
看到使用查找表近似替换函数。
增强的绘图能力
定点转换工具现在提供了额外的绘图功能。您可以在测试阶段使用这些绘图功能,将生成的算法的定点版本与原始的浮点版本进行比较。
违约情节
除了标量数据外,默认的比较图现在还绘制矢量和矩阵数据。
自定义绘图功能
现在可以指定自己的自定义绘图函数。定点转换工具调用函数,并为每个变量传递变量名和使用该变量的函数,以及浮点和定点模拟的结果。你的函数应该接受三个输入:
保存变量名和使用它的函数名的结构体。
保存变量的记录浮点值的单元格数组。
保存定点转换后变量的日志值的单元格数组。
例如,函数customComparisonPlot(varInfo, floatVarVals, fixedPtVarVals)
。
若要使用自定义绘图函数,请在定点转换工具中选择先进的,然后设置自定义绘图功能到你的情节函数的名字。
在命令行工作流中,设置编码器。FixptConfig
配置对象PlotFunction
属性设置为绘图函数的名称。
看到自定义绘图功能。
集成模拟数据检查器
现在可以使用Simulation Data Inspector进行比较图。仿真数据检查器提供了检查和比较多次运行的日志模拟数据的功能。您可以导入和导出日志数据,自定义日志数据的组织,并创建报告。
在定点转换工具中,选择先进的然后设置用模拟数据检查器绘图来是的
。看到使用模拟数据检查器启用绘图。
在命令行工作流中生成定点代码时,设置编码器。FixptConfig
配置对象PlotWithSimulationDataInspector
财产真正的
。
自定义绘图函数优先于仿真数据检查器。看到使用模拟数据检查器启用绘图。
MATLAB中常用系统对象的自动定点转换,包括Biquad滤波器,FIR滤波器和速率转换器
现在可以使用定点转换工具将以下DSP系统工具箱系统对象转换为定点。
dsp。FIRFilter
,只适用于直接表格
您可以根据模拟范围数据为这些System对象提出和应用数据类型。在转换过程中,您可以查看这些System对象的模拟最小值和最大值以及建议的数据类型。您还可以查看整数信息和直方图数据。不能基于静态范围数据为这些System对象建议数据类型。
附加的定点转换命令行选项
你现在可以使用codegen
函数-float2fixed
根据派生范围和模拟范围将浮点转换为定点的选项。有关更多信息,请参见编码器。FixptConfig
。
型式建议报告
在运行Test Numerics步骤以验证数据类型建议之后,该工具提供一个指向类型建议报告的链接,该报告显示定点模拟的检测结果。这份报告包括:
在原始MATLAB算法中为每个函数生成的定点代码
这些函数中每个变量的定点检测结果:
模拟最小值
模拟最大值
建议的数据类型
生成的定点代码增强
现在生成的定点代码:
避免在无符号减法操作中损失范围或精度。当减法的结果为负时,转换过程将左操作数提升为有符号类型。
处理定点变量与非定点变量的乘法。在以前的版本中,不具有定点类型的变量必须是常量。
避免在加减非定点变量和定点变量时发生溢出。
使用连接定点数数组时避免范围损失
vertcat
和horzcat
。如果连接矩阵,转换工具将使用一行表达式中最大的数字类型,并将最左边的元素强制转换为该类型。然后将此类型用于连接矩阵,以避免范围损失。
如果要转换的函数具有标量输入,则
mpower
指数输入不恒定,转换工具集fimath
ProductMode
来SpecifyPrecision
在生成的代码中。通过此设置,可以在编译时确定输出数据类型。万博1manbetx支持以下功能:
真正的(m, n)
false (m, n)
sub2ind
模式
快速眼动
使用增强的除法替换。
有关更多信息,请参见生成的定点代码。
工具现在按顺序对函数专门化进行编号函数列表。在生成的定点代码中,每个定点专门化的编号与函数列表,这使得在代码的浮点和定点版本之间进行跟踪变得容易。例如,生成的定点函数用于函数的专门化喷火
命名1 .我不知道
被命名为foo_s1
。有关更多信息,请参见专门化。
突出显示生成的HTML报告中潜在的数据类型问题
现在可以选择在生成的HTML报告中突出显示潜在的数据类型问题。该报告强调了需要单精度、双精度或昂贵的定点操作的MATLAB代码。昂贵的定点操作检查确定了定点代码的优化机会。它强调了MATLAB代码中需要繁琐的乘法或除法,或昂贵的舍入的表达式。下面的示例报告强调了需要昂贵的定点操作的MATLAB代码。
默认情况下,禁用对数据类型问题的检查。
要启用项目中的检查:
在“定点转换工具”中,单击先进的查看高级设置。
集突出潜在的数据类型问题来
是的
。
在命令行界面启用检查:
创建一个浮点到定点转换配置对象:
FXPTCFG = coder.config(“fixpt”);
设置
HighlightPotentialDataTypeIssues
财产真正的
:fxptcfg。HighlightPotentialDataTypeIssues = true;
看到生成代码中的数据类型问题。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2014b Bug报告
从项目到MATLAB脚本的命令行代码生成转换
使用-tocode
选择权编码器
命令,可以将MATLAB编码器项目到等效的MATLAB代码中的MATLAB脚本。脚本在配置对象中重新生成项目,并运行codegen
命令。使用此功能,您可以:
从项目工作流移到命令行工作流。
将项目保存为可以共享的文本文件。
以下命令转换名为myproject
到名为myscript.m
:
编码器-tocodemyproject- scriptmyscript.m
如果你省略- script
选项时,编码器
命令将脚本写入命令窗口。
自动C/ c++编译器设置
之前,您使用了墨西哥人设置
设置用于生成C/ c++代码的编译器。在R2014a中,代码生成软件定位并使用支持的已安装编译器。万博1manbetx你可以用墨西哥人设置
更改默认编译器。看到更改默认编译器。
常量全局变量的编译时声明
可以将全局变量指定为编译时常数。使用一个常量全局变量来:
生成优化的代码。
定义常量的值而不更改源代码。
声明一个常量全局变量MATLAB编码器项目:
在概述选项卡上,单击增加全球。为全局变量输入一个名称。
单击全局变量名称右侧的字段。
选择
定义常数值
。在全局变量名称右侧的字段中输入值。
要在命令行界面声明一个常量全局变量,请使用全局变量
选项以及编码器。Constant
函数。
在下面的代码中,gConstant
是一个具有恒定值的全局变量42
。
CFG = code .config('mex');globals = {'gConstant', coder.Constant(42)};代码根配置CFG myfunction -globals全局变量
看到定义常量全局数据。
增强的代码生成支持万博1manbetx开关
语句
代码生成现在支持:万博1manbetx
切换非整数、非常量字符串、可变大小字符串或空矩阵的表达式和大小写表达式
混合类型和大小的大小写表达式
如果所有的case表达式都是标量整数值,代码生成软件将生成一个C开关
声明。如果在运行时,开关值不是整数,代码生成软件将生成一个错误。
当case表达式包含非整数或非标量值时,代码生成软件生成C如果
选项C为正确答案开关
声明。
属性的代码生成错误AbortSet
属性
以前,当当前属性值和新属性值相等时,生成的代码设置属性值并调用set property方法,而不管属性的值是多少AbortSet
属性。当AbortSet
属性为true时,生成的代码行为不同于MATLAB的行为。
在R2014a中,如果您的代码具有使用AbortSet
属性,则代码生成软件生成错误。
兼容性的考虑
的代码AbortSet
属性,代码生成成功,但生成的代码的行为不正确。现在,对于相同的代码,代码生成以错误结束。删除AbortSet
属性,并重写代码以显式比较当前属性值和新属性值。
标准数学和代码替换库的独立配置选择
在R2014a中,您可以独立选择和配置用于C和c++代码生成的标准数学和代码替换库。
语言选择(C或c++)决定可用的标准数学库。
在一个项目中语言设置所有设置选项卡确定新对象可用的选项标准数学库设置硬件选项卡。
在代码配置对象中,
TargetLang
参数确定新对象可用的选项TargetLangStandard
参数。
中可使用以下选项,具体取决于您选择的语言标准数学库在项目中设置
TargetLangStandard
配置对象中的参数。语言 标准数学库( TargetLangStandard
)C C89/C90 (ANSI) -默认值
C99 (ISO)
c++ C89/C90 (ANSI) -默认值
C99 (ISO)
c++ 03 (ISO)
语言选择和标准数学库选择决定可用的代码替换库。
在一个项目中代码替换库设置硬件选项卡列出可用的代码替换库。的MATLAB编码器软件会根据兼容性对列表进行过滤语言和标准数学库设置和产品许可。例如,Embedded Coder提供了更多的库以及创建和使用自定义代码替换库的能力。
类的有效值在配置对象中
CodeReplacementLibrary
参数的值取决于TargetLang
和TargetLangStandard
参数和产品许可。
兼容性的考虑
在R2014a中,MathWorks提供的代码替换库®不再包括标准数学库。
当你打开一个用早期版本保存的项目时:
的代码替换库设置保持不变,除非之前设置为
C89 /人私下偷偷收藏盒式(ANSI)
,C99 (ISO)
,c++ (ISO)
,Intel IPP (ANSI)
,或Intel IPP (ISO)
。在这些情况下,MATLAB编码器软件集代码替换库来没有一个
或英特尔IPP
。MATLAB编码器软件设置新的标准数学库设置为基于前面的值代码替换库设置。
如果代码替换库设置为: 标准数学库设置为: C89 /人私下偷偷收藏盒式(ANSI)
,C99 (ISO)
,或c++ (ISO)
C89 /人私下偷偷收藏盒式(ANSI)
,C99 (ISO)
,c++ 03 (ISO)
分别GNU99 (GNU)
,Intel IPP (ISO)
,Intel IPP (GNU)
,ADI TigerSHARC
(仅限嵌入式编码器),或多BF53x
(仅限嵌入式编码器)C99 (ISO)
一个自定义库(嵌入式编码器),以及相应的注册文件已加载到内存中 的值 BaseTfl
属性设置任何其他值 默认的标准数学库, C89 /人私下偷偷收藏盒式(ANSI)
当您从保存在较早版本中的MAT文件加载配置对象时:
的
CodeReplacementLibrary
设置保持不变,除非之前设置为Intel IPP (ANSI)
或Intel IPP (ISO)
。在这些情况下,MATLAB编码器软件集CodeReplacementLibrary
来英特尔IPP
。MATLAB编码器软件设置新的
TargetLangStandard
设置为基于前面的值CodeReplacementLibrary
设置。如果CodeReplacementLibrary被设置为: TargetLangStandard设置为: Intel IPP (ANSI)
C89 /人私下偷偷收藏盒式ANSI
Intel IPP (ISO)
C99 (ISO)
任何其他值 默认的标准数学库, C89 /人私下偷偷收藏盒式(ANSI)
如果使用默认的标准数学库,生成的代码可能与早期版本不同,
C89 /人私下偷偷收藏盒式(ANSI)
,使用以下代码替换库之一:GNU99 (GNU)
Intel IPP (GNU)
ADI TigerSHARC
(仅限嵌入式编码器)多BF53x
(仅限嵌入式编码器)要生成与早期版本相同的代码,请更改
TargetLangStandard
来C99 (ISO)
。
打开项目后,如果选择MathWorks提供的代码替换库,则代码生成软件可以生成与以前版本不同的代码,具体取决于标准数学库设置。验证生成的代码。
如果在以前版本中使用的脚本设置了配置对象
CodeReplacementLibrary
参数,修改脚本以同时使用CodeReplacementLibrary
和TargetLangStandard
参数。
整数类型的位长度限制编码器。HardwareImplementation
对象
在R2014a中,代码生成软件对a中整数类型的位长度施加了限制编码器。HardwareImplementation
对象。例如,的值ProdBitPerChar
一定是介于8
和32
小于等于ProdBitPerShort
。如果您将位长度设置为无效值,则代码生成软件会报告错误。
更改了代码生成报告中接口文件的位置
代码生成软件创建并使用前缀为。的接口文件_coder
。对于MEX代码生成,这些文件出现在代码生成报告中。在此之前,这些文件出现在目标源文件窗格C代码代码生成报告的选项卡。它们现在出现在接口源文件窗格C代码选项卡。报告现在与生成文件的文件夹结构一致。自R2013b以来,接口文件位于名为接口。
代码生成报告中的编译器警告
对于MEX代码生成,代码生成报告现在包括C和c++编译器警告消息。如果代码生成软件检测到编译器警告,它将在所有消息选项卡。中以红色突出显示编译器错误和警告消息目标构建日志选项卡。
看到查看报告中的错误和警告。
从生成的代码文件中删除日期和时间注释
以前,生成的代码文件包含一个带有字符串的注释上生成的C源代码
然后是日期和时间戳。此注释不再出现在生成的代码文件中。如果您拥有嵌入式编码器许可证,则可以通过使用代码生成模板(CGT)文件在自定义文件横幅中包含日期和时间戳。
去除二的补体保护从rtwtypes.h
rtwtypes.h
不再包含以下代码:
#if ((SCHAR_MIN + 1) != -SCHAR_MAX) #error "此代码必须使用2的补码表示来编译有符号整数值" #endif
删除真正的
和假
从rtwtypes.h
当目标语言是C语言时,rtwtypes.h
定义了真正的
和假
。它不再定义真正的
和假
。
兼容性的考虑
如果您将R2014a中生成的代码与引用的自定义代码集成在一起真正的
或假
,用以下方法之一修改自定义代码:
定义
真正的
或假
在您的自定义代码中。改变
真正的
和假
来真正的
和假
,分别。改变
真正的
和假
来1 u
和0你
,分别。
将从入口点函数输入和输出生成的结构类型更改为默认名称
在以前的版本中,代码生成软件对从局部变量和从入口点函数输入和输出生成的结构类型使用相同的默认命名约定。使用的软件struct_T
对于第一个生成的结构类型名,a_struct_T
对于下一个名字,b_struct_T
下一个名字,以此类推。
在R2014a中,代码生成软件对从入口点函数输入和输出生成的结构类型使用不同的默认命名约定。软件使用struct0_T
对于第一个生成的结构类型名,struct1_T
对于下一个名字,struct2_T
下一个名字,以此类推。有了这个新的命名约定,您可以更容易地预测生成代码中的结构类型名称。
兼容性的考虑
如果您的C或c++代码使用了以前版本中由入口点函数生成的默认结构类型名称,并且您在R2014a中生成了入口点函数,则必须重写代码以使用新的结构类型名称。但是,对MATLAB代码的后续更改,例如添加具有结构类型的变量,可以更改生成代码中的默认结构类型名称。为避免因更改生成代码中结构类型的默认名称而导致的兼容性问题,请使用coder.cstructname
。
定点转换增强
这些功能需要定点设计人员许可证。
中缩放双数据类型的溢出检测MATLAB编码器项目
的MATLAB编码器定点转换工具现在提供了检测溢出的功能。在转换过程中的数值测试阶段,该工具使用缩放双精度来模拟定点代码。然后报告生成的代码中哪些表达式产生的值会溢出定点数据类型。有关更多信息,请参见使用定点转换工具检测溢出和检测溢出。
方法时也可以检测溢出codegen
函数。有关更多信息,请参见编码器。FixptConfig
和在命令行检测溢出。
万博1manbetx支持MATLAB类
你现在可以使用MATLAB编码器定点转换工具,用于转换使用MATLAB类的MATLAB浮点代码。有关更多信息,请参见MATLAB类的定点代码。
生成的定点代码增强
现在生成的定点代码:
使用下标赋值(冒号(:)操作符)。这种增强产生了更易于阅读的简洁代码。
对常量表达式有更好的代码。在以前的版本中,表达式的多个部分被量化为定点。表达式的最终值不太准确,代码可读性较差。现在,常量表达式只在求值结束时量化一次。这种新的行为导致更准确的结果和更可读的代码。
有关更多信息,请参见生成的定点代码。
浮点到固定转换的定点报告
在R2014a中,当您将浮点MATLAB代码转换为定点C或c++代码时,代码生成软件会以HTML格式生成定点报告。对于MATLAB代码中的变量,报告提供了建议的定点类型以及用于建议这些类型的模拟或派生范围。对于一个函数my_fcn
和代码生成输出文件夹out_folder
,报告的地点是out_folder / my_fcn fixpt / my_fcn_fixpt_Report.html
。如果不指定out_folder
控件的选项中codegen
命令时,默认输出目录为codegen
。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2014a Bug报告
代码生成统计工具箱和相控阵系统工具箱
代码生成现在支持100多个Statist万博1manbetxics Toolbox™功能。有关实现细节,请参见统计工具箱功能。
代码生成现在支持大多数相控阵系统工具箱™万博1manbetx功能和系统对象。有关实现细节,请参见相控阵系统工具箱功能和相控阵系统工具箱系统对象。
parfor
用于独立代码生成的功能,支持在多核上执行
你可以用MATLAB编码器软件生成独立的C/ c++代码,从MATLAB代码中包含parfor
循环。代码生成软件使用Open Multi-Processing (OpenMP)应用程序接口生成C/ c++代码,这些代码在目标硬件的多核上并行运行。
有关更多信息,请参见parfor
和使用并行for循环(parfor)加速MATLAB算法。
外部代码集成使用编码器。ExternalDependency
您可以使用new定义外部代码的接口编码器。ExternalDependency
类。这个类的方法更新编译和构建信息需要集成外部代码与MATLAB代码。在MATLAB代码中,您可以调用外部代码,而无需更新构建信息。看到编码器。ExternalDependency
。
使用以下命令更新构建信息coder.updateBuildInfo
你可以使用这个新函数coder.updateBuildInfo
更新构建信息。例如:
coder.updateBuildInfo (' addLinkFlags ', ' /栈:1000000 ');
coder.updateBuildInfo
。
使用内置C类型生成简化的代码
默认情况下,MATLAB编码器现在在生成的代码中使用内置的C类型。可以选择使用来自的预定义类型rtwtypes.h
。要在生成的代码中控制数据类型:
在项目中,在“项目设置”对话框中代码的外观选项卡,使用数据类型替换设置。
在命令行中,使用配置对象参数
DataTypeReplacement
。
代码生成软件使用的内置C类型取决于目标硬件。
有关更多信息,请参见指定生成代码中使用的数据类型。
兼容性的考虑
如果使用默认配置或项目设置,生成的代码具有内置的C类型,例如双
或字符
。在R2013b之前生成的代码具有来自的预定义类型rtwtypes.h
,例如real_T
或int32_T
。
在编译报告中突出显示常量函数参数
编译报告现在突出显示常量函数参数,并以不同的颜色显示它们。通过将光标放在突出显示的参数上,可以显示常量参数的数据类型和值。您可以将常量参数值导出到基本工作区,在那里您可以显示关于参数的详细信息。
有关更多信息,请参见在MATLAB代码中查看变量。
C99长整型数据类型,用于代码生成
如果您的目标硬件和编译器支持C99 long long整数数据类型,则可以万博1manbetx使用该数据类型生成代码。使用long long可以生成更高效的代码,其中包含更少的繁琐操作和多词辅助函数。为代码生成指定long long数据类型:
在项目中,在“项目设置”对话框中硬件选项卡,使用以下生产和测试硬件设置:
启用长长指定你的C编译器支持long long数据类型。万博1manbetx设置为
是的
要启用尺寸:长型。尺寸:长型:描述硬件支持的C long long数据类型的比特长度。万博1manbetx
在命令行中,使用以下硬件实现配置对象参数:
ProdLongLongMode
指定你的C编译器支持long long数据类型。万博1manbetx设置为真正的
要启用ProdBitPerLongLong
。ProdBitPerLongLong
:描述生产硬件支持的C long long数据类型的位数长度。万博1manbetxTargetLongLongMode
指定C编译器是否支持long long数据类型。万博1manbetx设置为真正的
要启用TargetBitPerLongLong
。TargetBitPerLongLong
:描述测试硬件支持的C long long数据类型的比特长度。万博1manbetx
有关更多信息,请参见类参考信息
编码器。HardwareImplementation
。
改为通过引用传递结构
在R2013b中,通过引用生成代码中的入口点函数来传递结构的选项适用于函数输出和函数输入。在R2013a中,此选项仅适用于入口点函数的输入。
兼容性的考虑
如果通过引用选项选择通道结构,并且MATLAB入口点函数只有一个结构输出,则R2013b中生成的C函数签名与R2013a中的签名不同。在R2013a中,生成的C函数返回输出结构。在R2013b中,输出结构是一个传递引用函数参数。
如果您的代码调用R2013a中生成的这些函数之一,然后在R2013b中生成该函数,则必须更改对该函数的调用。例如,假设年代
是下面MATLAB函数中的一个结构吗喷火
。
函数S = foo()
S = foo();
如果你在R2013b中生成这个函数,你可以这样调用这个函数:
foo(谨此告知);
coder.runTest
新语法
使用语法coder.runTest (test_fcn MEX_name_ext)
运行test_fcn
将对入口点函数的调用替换为对MEX文件中对应的MEX函数的调用MEX_name_ext
。MEX_name_ext
包括平台特定的文件扩展名。看到coder.runTest
。
coder.target
语法变化
的新语法coder.target
是:
Tf = coder.target('target')
coder.target (MATLAB)
当代码在MATLAB中运行时返回true。看到coder.target
。
您可以使用旧语法,但要考虑改用新语法。旧的语法将在将来的版本中删除。
虚部为零的复数值的变化
兼容性的考虑
在R2013b中生成的MEX函数在复数结果的虚部等于零时返回实值。在R2013b之前生成的MEX函数在复数结果的虚部等于零时返回一个复数值。
在R2013b中,虚部为零的复数值在传递给外部函数时变为实数。在以前的版本中,它们仍然很复杂。
万博1manbetx在Windows 64位机器上支持LCC编译器
lc -win64编译器随MATLAB编码器为微软®Windows 64位机器。对于没有安装第三方编译器的Windows 64位机器,MEX代码生成在默认情况下使用LCC。
不能将LCC用于C/ c++静态库、C/ c++动态库或C/ c++可执行文件的代码生成。对于这些输出类型,必须安装编译器。看到万博1manbetx支持编译器。
定点转换增强
这些功能需要定点设计人员许可证。
您现在可以将浮点MATLAB代码转换为定点代码,然后使用该选项在命令行生成C/ c++代码-float2fixed
与codegen
命令。看到codegen
和将浮点MATLAB代码转换为定点C代码。
您现在可以使用中的定点转换工具将浮点MATLAB代码转换为定点C代码MATLAB编码器Mac平台上的项目。
有关更多信息,请参见自动定点转换和提出基于派生范围的定点数据类型。
使用中的定点转换工具MATLAB编码器项目中,您可以派生复杂变量的范围。有关更多信息,请参见提出基于派生范围的定点数据类型
使用中的定点转换工具MATLAB编码器项目中,您可以使用派生范围和模拟范围为枚举数据类型提出数据类型。
有关更多信息,请参见提出基于派生范围的定点数据类型和提出基于仿真范围的定点数据类型。
使用中的定点转换工具MATLAB编码器项目中,您可以使用模拟范围为可变大小的数据提出数据类型。
有关更多信息,请参见提出基于仿真范围的定点数据类型。
定点转换工具现在提供了测试文件覆盖率结果。在使用测试文件模拟您的设计之后,该工具提供了代码执行频率的指示。如果您一次运行多个测试文件,该工具将提供累积覆盖率。这些信息帮助您确定测试文件的完整性,并验证它们是否执行了您的算法的全部操作范围。测试文件的完整性直接影响所建议的定点类型的质量。
有关更多信息,请参见代码覆盖率。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2013b Bug报告
代码生成过程中的自动定点转换(使用定点设计器)
您现在可以使用中的定点转换功能将浮点MATLAB代码转换为定点C代码MATLAB编码器项目。您可以选择基于模拟范围数据、静态范围数据或两者提出数据类型。
注意:您必须拥有定点设计师许可证。 |
在定点转换期间,您可以:
建议基于默认字长的分数长度。
建议基于默认分数长度的单词长度。
优化整数。
指定模拟最小/最大数据的安全裕度。
验证您是否可以使用建议的数据类型构建项目。
通过运行应用定点类型的测试文件来测试数字。
查看每个变量使用的位的直方图。
有关更多信息,请参见提出基于仿真范围的定点数据类型和提出基于派生范围的定点数据类型。
通过引用传递给入口点函数的结构
现在可以通过引用生成的代码中的入口点函数来指定传递结构。此优化仅适用于独立代码生成;它不适用于MEX函数。通过引用传递结构可以减少生成代码中入口点函数边界处的副本数量。它不会影响结构传递给入口点函数以外的函数的方式。
通过引用传递结构:
在项目中,在“项目设置”对话框中所有设置选项卡,在先进的,设置通过对入口点函数的引用传递结构来
是的
。在命令行中,创建代码生成配置对象并设置
PassStructByReference
参数真正的
。例如:CFG = code .config('lib');cfg.PassStructByReference = true;
包括自定义的C头文件从MATLAB代码
的coder.cinclude
函数允许您在MATLAB代码中指定要在生成的C代码中包含哪些自定义C头文件。指定的每个头文件coder.cinclude
包含在从MATLAB代码生成的每个C/ c++文件中。可以指定是否# include
语句在生成的代码中对应用程序头文件使用双引号,对系统头文件使用尖括号。
例如,下面的代码为函数喷火
指定包含应用程序头文件mystruct.h
在生成的代码中使用双引号。
函数y = foo(x1, x2) %#codegen coder.cinclude('mystruct.h');…
有关更多信息,请参见coder.cinclude
。
从mat文件加载
MATLAB编码器现在支持万博1manbetx的子集负载
函数,用于在运行MEX函数时从mat文件加载运行时值。它还提供了一个新功能,coder.load
,用于在生成MEX或独立代码时加载编译时常量。此支持有助万博1manbetx于从MATLAB代码生成使用负载
将常量装入函数。您不再需要手动键入存储在mat文件中的常量。
控件的实现详细信息负载
功能,请参阅支持代码生成的函数-万博1manbetx按字母顺序列表。
有关更多信息,请参见coder.load
。
coder.opaque
功能增强
当你使用coder.opaque
要在生成的C代码中声明变量,现在还可以指定定义变量类型的头文件。指定头文件的位置有助于避免编译错误,因为MATLAB编码器软件可以更容易地找到类型定义。
现在你可以比较coder.opaque
相同类型的变量。这个功能可以帮助您验证,例如,是否打开外部文件
命令成功。
null = coder.opaque(“文件*’,‘零’,‘HeaderFile’,stdio . h);FTMP = null;FTMP = coder.ceval('fopen',fname,permission);如果ftmp == null %错误-文件打开失败结束
有关更多信息,请参见coder.opaque
。
在项目中自动再生MEX功能
运行测试文件时MATLAB编码器项目来验证生成的MEX函数的行为,该项目现在检测何时重新构建MEX函数。MATLAB编码器只有在上次构建之后修改了原始MATLAB算法时才重新构建MEX函数,从而节省了验证阶段的时间。
MEX函数签名包括常量输入
当您为接受常量输入的MATLAB函数生成一个MEX函数时,默认情况下,MEX函数签名现在包含常量输入。如果您在一个项目中验证您的MEX函数,这种行为允许您使用相同的测试文件来运行原始的MATLAB算法和MEX函数。
兼容性的考虑
在以前的版本中,MATLAB编码器从MEX函数签名中删除了常量。要将这些现有脚本与使用R2013a软件生成的MEX函数一起使用,请执行以下操作之一:
更新脚本,使它们不再删除常量。
配置MATLAB编码器从MEX函数签名中删除常量值。
配置MATLAB编码器删除常数值:
在项目中,在“项目设置”对话框中所有设置选项卡,在先进的,设置常数输入来
从MEX签名中删除
。在命令行中,创建代码生成配置对象,并设置
ConstantInputs
参数“删除”
。例如:CFG = code .config;cfg.ConstantInputs =“删除”;
自定义工具链注册
MATLAB编码器软件使您能够注册用于创建可执行文件和库的第三方软件构建工具。
该软件自动检测系统上支持的工具链。万博1manbetx
您可以管理和自定义多个工具链定义。
在生成代码之前,您可以使用下拉列表选择任何一个定义。
该软件生成简化的makefile以提高可读性。
兼容性的考虑
如果你打开MATLAB编码器项目或使用R2012b中的代码生成配置对象,R2012b是MATLAB编码器软件会自动尝试使用工具链方法。如果现有项目或配置对象未使用默认目标生成文件设置,则MATLAB编码器可能无法升级到使用工具链方法,并且会发出警告。有关更多信息,请参见项目或配置正在使用模板制作文件。
parfor
函数减少改进和C语言支持万博1manbetx
生成MEX函数时parfor
-循环,你现在可以使用相交
和联盟
作为减少功能,现在支持以下减少:万博1manbetx
串连
数组
函数处理
默认情况下,当MATLAB编码器为MATLAB代码生成一个MEX函数,其中包含parfor
循环,MATLAB编码器不再需要c++,现在尊重目标语言设置。
增强了对类属性初始万博1manbetx值的支持
如果你初始化了一个类属性,你现在可以在使用这个类的时候给这个属性指定一个不同的类型。例如,class喷火
有一个属性prop1
类型的双
。
codegen属性prop1 = 0;结束方法…结束结束
酒吧
将不同的类型分配给prop1
。函数栏%#codegen f=foo;f.prop1 =单(0);…
兼容性的考虑
在以前的版本中,如果重新分配的属性具有与初始值相同的类型,但大小不同,则该属性在生成的代码中变为可变大小。在R2013a,MATLAB编码器使用重新分配的属性的大小,大小是固定的。如果您有依赖于可变大小属性的现有MATLAB代码,则无法在R2013a中生成此代码的代码。要解决此问题,请不要在属性定义块中初始化该属性。
例如,您不能再为以下函数生成代码酒吧
。
类喷火
有一个属性prop1
这是一个标量双
。
codegen属性prop1 = 0;结束方法…结束结束
酒吧
的大小。prop1
。函数栏%#codegen f=foo;F.prop1 =[1 2 3];%使用f disp(f.prop1);F.prop1 =[1 2 3 4 5 6];
优化生成的代码x = x [c]
当x
是一个向量
MATLAB编码器现在为表达式生成更优化的代码x = x [c]
,如果:
x
是一个行向量或列向量。x
不在c
。x
没有别名。里面没有函数调用
c
。
在以前的版本中,生成的代码包含x
。在R2013a中,它不包含多个副本x
。
这种增强减少了代码大小和执行时间。它还提高了代码的可读性。
基本线性代数子程序(BLAS)库的默认使用
MATLAB编码器现在只要有BLAS库,就使用它们。不再有关闭这些库使用的选项。
兼容性的考虑
如果现有的配置设置禁用BLAS,MATLAB编码器现在忽略这些设置。
对编译器支持的更改万博1manbetx
MATLAB编码器万博1manbetx支持这些新的编译器。
在Microsoft Windows平台上,Visual c++®11.
在Mac OS X平台上,Apple Xcode 4.2 with Clang。
MATLAB编码器不再支持万博1manbetx海湾合作委员会
编译器在Mac OS X平台。
MATLAB编码器不再支持Watcom万博1manbetx的独立代码生成。Watcom仍然支持构建MEX函万博1manbetx数。
兼容性的考虑
因为Clang是Mac OS X平台上唯一支持的编译器,而Clang不万博1manbetx支持Open MP,
parfor
在Mac OS X平台上不万博1manbetx再支持。MATLAB编码器不再支持Watcom万博1manbetx的独立代码生成。仅将Watcom用于构建MEX函数。使用替代编译器进行独立代码生成。有关支持的编译器列表,请参见万博1manbetx万博1manbetx支持编译器。
正在删除的功能
这些函数已从MATLAB编码器软件
函数名 | 当你使用这个函数时会发生什么? |
---|---|
emlc |
错误在R2013a。 |
emlmex |
错误在R2013a。 |
兼容性的考虑
emlc
和emlmex
已被移除。使用codegen
代替。如果已有代码调用emlc
或emlmex
,使用coder.upgrade
来帮助将代码转换为新语法。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2013a Bug报告
parfor
功能支持MEX代码万博1manbetx生成,支持在多核上执行
你可以用MATLAB编码器软件从MATLAB代码中生成MEX函数,包含parfor
循环。生成的MEX函数可以在桌面上的多个内核上运行。有关更多信息,请参见parfor
和利用并行for循环加速MATLAB算法。
代码生成准备工具
代码生成准备工具筛选MATLAB代码中不支持代码生成的特性和函数。万博1manbetx该工具提供了一个报告,其中列出了包含不受支持的特性和功能的源文件,并指出需要做多少工作才能使MATLAB代码适合于代码生成。万博1manbetx
有关更多信息,请参见coder.screener
和代码生成准备工具。
生成的MEX函数中的可视化函数
的MATLAB编码器软件现在可以检测到对许多常见可视化函数的调用,例如情节
,disp
,数字
。对于MEX代码生成,MATLAB编码器自动调用MATLAB为这些函数。对于独立代码生成,MATLAB编码器不为这些可视化函数生成代码。此功能减少了使代码适合代码生成所花费的时间。它还消除了在外部声明这些函数的要求coder.extrinsic
函数。
项目进出口能力
您现在可以将项目设置导出到一个配置对象,该配置对象存储为基本工作区中的一个变量。然后,您可以使用配置对象将设置导入到不同的项目中,或者在命令行中使用codegen
函数。此功能允许您:
在项目和命令行工作流之间共享设置
在多个项目之间共享设置
标准化代码生成项目的设置
有关更多信息,请参见共享生成配置设置。
包生成的代码在zip文件中重新定位
的packNGo
函数包将代码文件生成为压缩的zip文件,以便您可以在另一个开发环境中重新定位、解压缩和重新构建它们。如果您想重新定位文件,以便您可以为特定的目标环境重新编译它们,或者在未安装MATLAB的开发环境中重新构建它们,则此功能非常有用。
有关更多信息,请参见在另一个开发环境中使用的包代码。
定点检测和数据类型建议
MATLAB编码器项目提供以下定点转换支持:万博1manbetx
选项来生成仪表化的MEX函数
使用仪表化的MEX函数提供模拟最小和最大结果
基于仿真最小值和最大值的定点数据类型建议
建议分数长度或单词长度的选项
您可以使用这些建议的定点数据类型来创建原始MATLAB入口点函数的定点版本。
注意:需要一个定点工具箱™许可证。 |
有关更多信息,请参见定点转换。
支持代码生成的新系统对象万博1manbetx
代码生成现在支持以下System对象。万博1manbetx要查看代码生成所支持的System对象列表,请参见万博1manbetx支持代码生成的系统对象万博1manbetx。
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2012b Bug报告
MATLAB类代码生成
在R2012a中,初步支持MATLAB类的代码生成,旨在支持用户万博1manbetx定义的系统对象。有关为MATLAB类生成代码的更多信息,请参见MATLAB类代码生成。有关为System对象生成代码的详细信息,请参阅DSP系统工具箱、计算机视觉系统工具箱或通信系统工具箱文档。
基于大小的动态内存分配
默认情况下,对于大小超过可配置阈值的可变大小数组,现在启用动态内存分配。这种行为允许更好地控制堆栈内存的使用。此外,您还可以自动生成更多MATLAB算法的代码,而无需修改原始MATLAB代码。
兼容性的考虑
如果您使用脚本生成代码,并且不希望使用动态内存分配,则必须禁用它。有关更多信息,请参见控制动态内存分配。
C/ c++动态库生成
你现在可以使用MATLAB编码器从生成的C代码构建动态链接库(DLL)。这些库对于集成到期望动态链接库的现有软件解决方案中非常有用。万博 尤文图斯
有关更多信息,请参见从MATLAB代码生成C/ c++动态链接库。
自动定义输入参数类型
MATLAB编码器软件现在可以通过从您提供的测试文件中推断这些类型来自动定义输入参数类型。此功能简化了输入类型定义,并减少了手动定义类型时引入错误的风险。
要了解有关自动定义类型的更多信息:
在MATLAB编码器项目,看到自定义输入类型。
在命令行中,请参见
coder.getArgTypes
。
验证MEX功能
MATLAB编码器现在提供了对测试文件的支持万博1manbetx,以验证生成的MEX函数的操作。此功能使您能够验证MEX函数在功能上与原始MATLAB代码等效,并检查运行时错误。
要了解有关验证MEX函数行为的更多信息:
在MATLAB编码器项目,看到如何验证项目中的MEX功能。
在命令行中,请参见
coder.runTest
。
增强的项目设置对话框
的项目设置对话框现在对配置参数进行分组,以便您可以轻松地识别与代码生成目标(如速度、内存和代码外观)相关的参数。用于代码生成配置对象的对话框编码器。MexCodeConfig
,编码器。CodeConfig
,编码器。EmbeddedCodeConfig
,也使用相同的新分组。
要查看已更新的项目设置对话框:
在项目中,单击构建选项卡。
在构建选项卡,单击“更多设置”链接以打开项目设置对话框。
有关各选项卡的参数信息,请单击帮助按钮。
要查看代码生成配置对象的更新对话框:
在MATLAB命令行中创建一个配置对象。例如,为MEX代码生成创建一个配置对象。
Mex_cfg = code .config;
打开此对象的对话框。
打开mex_cfg
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2012a Bug报告
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2011b Bug报告
管理项目的新用户界面
新MATLAB编码器用户界面简化了MATLAB到C/ c++代码的生成过程。使用这个用户界面,您可以:
指定要从中生成代码的MATLAB文件
为这些MATLAB文件的输入指定数据类型
选择输出类型:
墨西哥人的功能
C/ c++静态库
C / c++可执行文件
配置生成设置以自定义代码生成的环境
打开代码生成报告,查看MATLAB代码中变量和表达式的构建状态、生成的代码和编译时信息
开始吧
你发射一个MATLAB编码器通过做以下其中一项来完成项目:
从MATLAB主菜单中选择文件>新>代码生成项目
输入
编码器
在MATLAB命令行
了解更多关于与…合作的知识MATLAB编码器,请参阅使用MATLAB编码器项目接口从MATLAB代码生成C代码。
从实时车间迁移emlc功能
在MATLAB编码器,codegen
函数替换emlc
区别如下:
新编码选项
旧emlc选项 | 新编码选项 | |
---|---|---|
如 |
|
|
emlcoder.egc |
||
emlcoder.egs |
创建 |
|
- f |
没有 |
|
全球 |
|
|
- n |
不再支持此选项。万博1manbetx相反,设置 |
|
- s |
与新的配置对象一起使用,参见新的代码生成配置对象。 |
|
- t环球套票:exe |
使用此选项可以使用默认构建选项生成C/ c++可执行文件。否则,使用 |
|
- t墨西哥人 |
使用此选项可以使用默认构建选项生成一个MEX函数。否则,使用 |
|
- t环球套票 - t环球套票:自由 |
使用这些选项中的任何一个都可以使用默认构建选项生成C/ c++库。否则,使用 |
新的代码生成配置对象
的codegen
函数使用新的配置对象替换旧的配置对象emlc
具有以下区别的对象:
旧的emlc配置对象 | 新的代码根配置对象 | |
---|---|---|
emlcoder。MEXConfig |
||
emlcoder。RTWConfig emlcoder.RTWConfig (grt) |
的 以下属性名称已更改:
|
|
emlcoder.RTWConfig(“接受方”) |
以下属性名称已更改:
|
|
emlcoder。 |
编码函数没有默认的主函数输入类型
在以前的版本中,如果使用emlc
函数为带有输入参数的MATLAB函数生成代码,并且您没有指定这些输入的类型,默认情况下,emlc
假设这些输入是实数,标量,双精度。在R2011a中codegen
函数不假设默认类型。您必须至少指定每个主函数输入的类。有关更多信息,请参见指定项目中主要功能输入的属性。
兼容性的考虑
如果您现有的脚本调用emlc
为一个有输入但没有指定输入类型的MATLAB函数生成代码,并且您迁移这个脚本来使用codegen
,必须修改脚本以指定输入。
编码函数以不同的顺序处理编译选项
在以前的版本中,emlc
函数从左到右解析编译选项,以便最右边的选项占上风。在R2011a中codegen
函数优先于使用配置对象指定的单个命令行选项。如果命令行选项冲突,则以最右边的选项为准。
兼容性的考虑
如果您现有的脚本调用emlc
指定一个配置对象以及其他命令行选项,然后将此脚本迁移到使用codegen
,codegen
可能不会使用相同的配置参数值emlc
。
新的编码器包函数
下面的新包函数允许你使用C/ c++代码生成的对象和类型:
函数 | 目的 |
---|---|
coder.config |
创建MATLAB编码器代码生成配置对象 |
coder.newtype |
新建一个编码器。类型 对象 |
coder.resize |
调整一个编码器。类型 对象 |
coder.typeof |
将MATLAB值转换为其规范类型 |
脚本升级MATLAB代码使用MATLAB编码器语法
的coder.upgrade
脚本帮助您升级到MATLAB编码器通过在MATLAB代码中搜索旧的命令和选项,并用新的等效项替换它们。有关更多信息,请在MATLAB命令提示符下输入帮助coder.upgrade
。
嵌入式MATLAB现在称为MATLAB代码生成
MathWorks不再使用这个术语嵌入式MATLAB以参考支持从MATLAB算法生成代码的语言子集。万博1manbetx这种命名法错误地暗示生成的代码仅用于嵌入式系统。新术语是MATLAB代码生成。这个术语更好地反映了将MATLAB算法转换为可读、高效和紧凑的MEX和C/ c++代码以部署到桌面和嵌入式系统的能力的全部范围。
MATLAB编码器使用rtwTargetInfo。注册目标函数库
在以前的版本中,emlc
功能还可以识别定制文件,sl_customization.m
。在R2011a中MATLAB编码器软件不识别此自定义文件,必须使用rtwTargetInfo.m
注册目标函数库(TFL)。要注册TFL,您必须拥有嵌入式编码器软件。有关更多信息,请参见使用rtwTargetInfo API注册MATLAB编码器软件的CRL在嵌入式编码器文档中。
新的演示
添加了以下演示:
演示…… | 展示了你如何…… | |
---|---|---|
你好世界 | 从一个简单的MATLAB程序生成并运行一个MEX函数 | |
使用持久变量 | 通过使用持久变量计算一组值的平均值 | |
使用结构数组 | 演示如何在将标量模板成长为结构数组之前构建标量模板,这是从MATLAB生成代码的要求。 | |
球模拟 | 模拟弹跳球,并说明在将应用程序编译为MEX函数时应该只指定入口函数。 | |
广义相对论与MATLAB编码器 | 使用爱因斯坦的广义相对论来计算弯曲时空中的测地线。 | |
平均滤波器 | 生成一个独立的C库从MATLAB代码使用codegen |
|
图像边缘检测 | 从MATLAB代码生成一个实现Sobel滤波器的独立C库 | |
读取文本文件 | 的MATLAB代码生成一个独立的C库coder.ceval ,coder.extrinsic 和coder.opaque 功能。 |
|
“原子”模拟 | 使用代码生成配置对象从MATLAB代码生成一个独立的C库和可执行文件,以启用动态内存分配 | |
替换数学函数和运算符 | 使用目标函数库(tfl)替换生成代码中的运算符和函数
|
|
卡尔曼滤波器 |
|
功能元素将在未来版本中删除
函数或元素名称 | 当你使用函数或元素时会发生什么? | 使用此元素代替 |
---|---|---|
% # eml |
仍在运行 | % # codegen |
eml.allowpcode |
仍在运行 | coder.allowpcode |
eml.ceval |
仍在运行 | coder.ceval |
eml.cstructname |
仍在运行 | coder.cstructname |
eml.extrinsic |
仍在运行 | coder.extrinsic |
eml.inline |
仍在运行 | coder.inline |
eml.nullcopy |
仍在运行 | coder.nullcopy |
eml.opaque |
仍在运行 | coder.opaque |
eml.ref |
仍在运行 | coder.ref |
eml.rref |
仍在运行 | coder.rref |
eml.target |
仍在运行 | coder.target |
eml.unroll |
仍在运行 | coder.unroll |
eml.varsize |
仍在运行 | coder.varsize |
eml.wref |
仍在运行 | coder.wref |
检查bug报告中的问题和修复
软件本质上是复杂的,并不是没有错误的。代码生成器的输出可能包含错误,其中一些错误是编译器无法检测到的。MathWorks在其Bug报告系统中报告引起其注意的重要已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/。使用带有搜索短语“错误代码生成”的Saved Searches and Watched Bugs工具来获取生成可能编译和执行但仍然产生错误答案的代码的已知bug的报告。
bug报告是每个发行版文档中不可分割的一部分。定期检查一个发行版的所有bug报告,因为这样的报告可能会识别出您正在使用的发行版的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和确认策略,以识别设计、代码和工具中的潜在错误。
搜索R2011a Bug报告
兼容性总结
释放 | 具有兼容性考虑的功能或更改 |
---|---|
R2016a | 可变大小空数组的连接:当组件数组为空时生成用于连接的代码 |
R2015aSP1 | 没有一个 |
R2015b | codegen 库和可执行文件的调试选项 |
R2015a | |
R2014b | |
R2014a | |
R2013b | |
R2013a | |
R2012b | 没有一个 |
R2012a | 基于大小的动态内存分配 |
R2011b | 没有一个 |
R2011a |
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。