MATLAB编码器发布说明
单元格阵列支持:在MA万博1manbetxTLAB代码中使用额外的单元格阵列特性进行代码生成
在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 Coder从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 = myconcat(A, B) C = [A, B];结束
定义类型三机一体
而且IN2
.三机一体
在两个维度上都是可变大小的,没有上界。IN2
是可变大小的,每个维度的上限为5。
IN1 =编码器。typeof(1, [Inf Inf], [1 1]);IN2 =编码器。Typeof (1, [5 5], [1 1]);
为myconcat
.使用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中的答案相同的答案。
Ans = 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
大小:?-by-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; |
返回cond || val; |
Y = x && ! |
Y = false; |
MATLAB编码器应用程序行执行计数:看看测试练习MATLAB代码有多好
当你执行检查运行时问题踏进MATLAB编码器应用程序中,您必须提供一个调用具有代表性数据的入口点函数的测试。的检查运行时问题步骤从MATLAB函数生成一个MEX函数,并运行测试,将对MATLAB函数的调用替换为对MEX函数的调用。在R2016a中,为了帮助您了解您的测试对MATLAB代码的练习情况,应用程序收集并显示行执行计数。当应用程序运行MEX函数时,应用程序会计算与MATLAB代码行对应的MEX代码的执行次数。
要查看行执行计数,请在检查运行时问题后单击查看MATLAB行执行计数.
该应用程序在应用程序编辑器中显示MATLAB代码。应用程序在代码的左侧显示一个颜色编码的覆盖栏。该表描述了颜色编码。
颜色 | 表明 |
---|---|
绿色 | 下列情形之一:
不同深浅的绿色表示行执行计数的不同范围。最深的绿色表示最高的范围。 |
橙色 | 入口点函数执行多次,但代码只执行一次。 |
红色的 | 代码不执行。 |
当您将光标定位在覆盖栏上时,颜色高亮显示将扩展到代码上。对于每段代码,应用程序都会显示该代码段执行的次数。
系统默认开启行执行计数收集功能。要禁用收集,请清除收集MATLAB行执行计数复选框。如果行执行收集减慢了运行时问题检查,请考虑禁用它。
MATLAB编码器应用程序撤销和重做:轻松恢复类型定义的更改
类中的类型定义的更改可以还原和恢复定义输入类型步骤MATLAB编码器恢复并恢复输入参数表或全局变量表中的更改。
若要恢复或恢复对输入参数类型定义的更改,请单击输入参数表上方的或.
若要恢复或恢复对全局变量类型定义的更改,请单击全局变量表上方的或.
或者,使用键盘快捷键“撤消”和“重做”。键盘快捷键应用于所选的表。快捷方式在MATLAB首选项中定义。Windows操作系统®平台,默认的键盘快捷方式为撤消和重做Ctrl + Z而且Ctrl + Y.
每个撤销操作都将还原上一次更改。每个重做操作恢复最后的更改。
看到定义键盘快捷键.
MATLAB编码器App错误表:查看完整的错误信息
在以前的版本中,MATLAB编码器控件上的错误消息表中没有一行合适的消息构建错误页中的检查运行时问题或生成代码步骤。在R2016a中,应用程序显示整个消息。
在以前的版本中,如果消息包含链接,应用程序将从错误消息表中的错误中排除该链接构建错误选项卡。在R2016a中,应用程序包含链接。
xcorr代码生成:为长输入向量的xcorr生成更快的代码
对于长输入向量,代码生成为xcorr
现在用频域计算代替时域计算。生成的代码可以比以前的版本更快。
使用xcorr
功能,您必须有信号处理工具箱™软件。
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2016a错误报告
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2015aSP1 Bug报告
单元格数组支持:从使用万博1manbetx单元格数组的MATLAB代码生成C代码
在R2015b中,您可以从使用单元格数组的MATLAB代码生成代码。
代码生成软件将单元格数组分类为均匀或异构.这个分类决定了在生成的C/ c++代码中如何表示单元格数组。它还决定如何在MATLAB代码中使用单元格数组,从中生成C/ c++代码。看到同构与异构单元阵列.
只要您没有指定冲突的需求,您就可以控制单元格数组是同构的还是异构的。看到控制单元格数组是同构还是异构.
在生成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 Coder应用程序生成单精度C代码.
使用生成单精度C代码
codegen
与-singleC
选择。看到在命令行生成单精度C代码.使用生成单精度MATLAB代码
codegen
与一个编码器。年代在gleConfig
对象。此外,您还可以从单精度的MATLAB代码生成单精度的C代码。看到生成单精度MATLAB代码.
独立C代码中的运行时检查:在测试生成的独立库和可执行文件时,检测并报告运行时错误
在R2015b中,生成的独立库和可执行文件可以检测和报告运行时错误,例如超出范围的数组索引。在以前的版本中,只有生成的MEX检测和报告运行时错误。
缺省情况下,MEX启用运行时错误检测功能。默认情况下,对独立库和可执行文件禁用运行时错误检测。
为独立库和可执行文件启用运行时错误检测:
在命令行中,使用代码配置属性
RuntimeChecks
.CFG = code .config('lib');cfg. %或'dll'或'exe'。RuntimeChecks = true;CFG myfunction
使用MATLAB编码器应用程序,在项目构建设置,在调试选项卡,选择生成运行时错误检查复选框。
生成的库和可执行文件使用流
将错误消息写入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替换工具链选项卡。
的标准数学库而且代码替换库,以前在硬件Tab,现在都在自定义代码选项卡。
您可以指定硬件板而不是设备供应商而且设备类型.这个应用程序设备供应商而且设备类型基于硬件板。要指定运行MATLAB的硬件,请选择
MATLAB主机
.如需指定设备厂商和类型,请选择无-选择下方的设备
.如果您拥有嵌入式编码器许可证,则可以为已安装的硬件支持包选择单板。万博1manbetx对于R2015b,硬件支持包如下:万博1manbetx
BeagleBone黑硬件的嵌万博1manbetx入式编码器支持包
ARM的嵌入式编码器支持包万博1manbetx®皮质®——一个处理器
获取有关使用硬件支持包的信息万博1manbetxMATLAB编码器,请参阅Embedded Coder发布说明。
在硬件选项卡,应用程序隐藏硬件实现细节。单击,查看或修改硬件实现的详细信息定制硬件实现.默认情况下,测试和生产硬件实现设置相同。该应用程序只显示一组设置。上分别显示或修改测试和生产硬件实现设置所有设置选项卡,在硬件,设置测试硬件与生产硬件相同来
没有
.
MATLAB编码器应用程序用户界面改进
手动类型定义的改进
手动类型定义的改进包括:
上下文菜单选项来指定数组大小。
更容易定义结构类型。
使用图标添加字段。
请参阅输入变量表中的结构类型名称。
更容易定义
embedded.fi
类型。看到
numerictype
输入变量表中的属性。使用图标,更改
numerictype
属性。
用于指定文件的选项卡补全
您可以使用制表符补全来指定入口点函数和测试文件。
应用程序颜色和MATLAB首选项之间的兼容性
该应用程序使用的颜色是兼容的桌面工具颜色MATLAB中的首选项。有关MATLAB首选项的信息,请参见首选项.
项目的进度指标检查运行时问题一步
当你执行检查运行时问题步骤中,可以看到进度指示器。
之间工作流状态的保存和恢复MATLAB编码器应用程序会话
在R2015b中,当您完成检查运行时问题或生成代码步骤和关闭项目MATLAB编码器App保存步骤结果。重新打开项目时,不必重复该步骤。你可以从你停止的地方继续。
之间的项目重用MATLAB编码器和HDL编码器
在R2015b中,您可以打开一个MATLAB编码器您可以在应用程序中打开HDL Coder项目MATLAB编码器你必须有HDL Coder许可证才能使用HDL Coder应用程序。当你在应用程序之间移动时,两个应用程序的项目设置都会被保存。例如,当你打开一个MATLAB编码器在HDL Coder应用程序中的项目,该应用程序使用两个应用程序通用的设置。它会保存它不使用的设置,以便如果您在MATLAB编码器App,这些设置都是可用的。
要打开MATLAB编码器项目作为HDL Coder项目:
在MATLAB编码器应用程序,点击并选择
重新打开项目作为HDL编码器
.在HDL Coder应用程序中,单击开放选项卡并指定项目。
打开一个HDL Coder项目作为MATLAB编码器项目:
在HDL Coder应用程序中,单击并选择
在MATLAB Coder中重新打开
.在MATLAB编码器应用程序,点击并选择
开放现有项目
.
代码生成使用免费的MinGW-w64编译器
在R2015b中,您可以使用TDM-GCC中的MinGW-w64编译器在64位Windows主机上生成C/ c++ MEX、库和可执行文件。有关安装说明,请参见安装MinGW-w64编译器.
当您为C/ c++库和可执行文件生成代码时,您可以指定一个MinGW编译器工具链。如果使用命令行工作流,请设置工具链
属性在库或可执行文件的代码配置对象中:
CFG = code .config('lib') CFG . CFG。Toolchain = 'MinGW64 v4. 'x| gmake (64-bit Windows)'
如果你使用MATLAB编码器应用程序,在项目构建设置,在硬件选项卡,设置工具链来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代码中的表达式,这些表达式可能导致生成的代码中出现多字操作。
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2015b错误报告
改进的MATLAB编码器应用程序集成编辑器和简化的工作流程
在R2015a中,MATLAB编码器应用程序为代码生成工作流提供了一个新的用户界面。
改进后的应用程序包括:
自动检查代码生成准备情况和运行时问题。代码生成就绪性检查包括标识不支持的函数。万博1manbetx
一个集成的编辑器,在您的MATLAB代码中修复问题,而无需离开应用程序。
项目摘要和对生成文件的访问。
以MATLAB脚本的形式导出项目设置。
为每个步骤提供帮助,并链接到文档以获取更多信息。
生成示例C/ c++,主要用于将生成的代码集成到应用程序中
在R2015a中,当生成源代码、静态库、动态库或可执行文件时,可以生成示例C/ c++ main函数。修改示例main函数以满足应用程序的需求。
main函数示例提供了一个模板,帮助您将生成的代码合并到应用程序中。该模板展示了如何将函数输入参数初始化为零并调用入口点函数。当代码对数据使用动态内存分配时,生成一个示例main函数尤其有用。看到在应用程序中使用一个C Main的例子.
默认情况下,MATLAB编码器在生成源代码、静态库、动态库或可执行文件时,生成一个示例main函数。
控件控制示例main函数的生成MATLAB编码器应用:
在生成代码页,打开生成对话框中,单击生成箭头.
在生成对话框,设置构建类型致下列其中一项:
源代码
静态库(.lib)
动态库(.dll)
可执行文件(. exe)
点击更多的设置.
在所有设置选项卡,在先进的,设置生成示例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
与一个为
-loop来提高性能。
代码生成额外的图像处理工具箱和计算机视觉系统工具箱功能
计算机视觉系统工具箱
愿景。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, s.a);
在以前的版本中,软件不识别该字段s.a.
是常数。在生成的代码中,如果启用了可变大小,y
是一个可变大小的数组。如果禁用可变大小,代码生成软件将报告错误。在R2015a中,软件识别了这一点s.a.
是常数。y
是具有10个元素的静态行向量。
由于这一改进,您可以使用单独的赋值将常量值赋给结构字段。例如:
函数Y = mystruct(x) s.a = 3;S.b = 4;Y = 0 (s.a,s.b);
类定义了完整的结构,软件才会识别这些常量结构体
函数:例如:
函数Y = mystruct(x)“一个”3,“b”4);Y = 0 (s.a,s.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元素的类型。该函数的输入是指向对象的指针emxArray
指针和维数。例如:
(emxArray_real_T **pEmxArray, int numDimensions);
创建空的函数emxArray
结构中的S具有如下形式的名称:
空白emxInitArray_ < structType >
< structType >
结构的类型。函数的输入是指向包含emxArray
例如:
void emxInitArray_cstruct0_T(cstruct0_T *结构);
MATLAB编码器还生成释放动态内存的函数emxArray
分配。例如,释放动态内存的函数emxInitArray_real_T
分配是:
emxdestroyray_real_t (emxArray_real_T *emxArray)
释放动态内存的函数emxInitArray_cstruct0_T
分配是:
(struct0_T * struct0_T)
看到数组的C代码接口.
包含的结构的外部定义emxArray
年代
在以前的版本中,MATLAB编码器不允许外部定义包含的结构emxArray
s.如果你在C代码中定义结构,并在外部头文件中声明它,MATLAB编码器报告错误。
在R2015a,MATLAB编码器包含的结构的外部定义emxArray
的类型,但是不定义类型emxArray
在外部C代码中。MATLAB编码器类的类型emxArray
一个结构所包含的S。
使用声明的变量类型的转换的代码生成coder.opaque
对于代码生成,可以使用MATLAB投
函数将变量强制转换为使用coder.opaque
.使用投
与coder.opaque
仅适用于数字类型。
强制转换由声明的变量coder.opaque
到MATLAB类型,您可以使用B =铸造(A,类型)
语法。例如:
X = code .opaque('size_t','0');X1 = cast(x, 'int32');
你也可以使用B = cast(A,'like',p)
语法。例如:
X = code .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 = code .opaque(“size_t”,“42”);Yt = code .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;
生成代码中的显式强制转换可能会防止编译器警告。
的默认值的更改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
代码配置对象属性。例如,要生成按值传递的结构:
CFG = code .config('lib');cfg。PassStructByReference = false;
的变化全局变量
从项目生成的脚本中的变量
生成的脚本MATLAB编码器使用全局变量的项目创建该变量全局变量
.在以前的版本中,全局变量
存储全局变量的类型。类中直接指定全局变量的初始值codegen
命令。在R2015a,全局变量
存储全局变量的类型和初始值。的codegen
的初始值全局变量
.
取消仪表MEX输出类型
您不能再指定输出类型仪器的墨西哥人
.
兼容性的考虑
对于手动定点转换,使用命令行工作流。这个工作流使用定点设计器函数buildInstrumentedMex
而且showInstrumentationResults
.看到手动转换浮点MATLAB算法到定点在定点设计器文档中。
截断包含类名前缀的长枚举类型值名
在以前的版本中,当代码生成软件确定生成的枚举类型值名称的长度或唯一性时,它会忽略类名前缀。如果指定生成的枚举类型值名包含类名前缀,则可能生成的类型值名:
超过您指定的最大标识符长度。
与另一个标识符相同。
在R2015a中,如果指定生成的枚举类型值名包含类名前缀,则生成的类型值名:
不超过标识符的最大长度。
是独一无二的。
兼容性的考虑
对于包含类名前缀的长类型值名称,以前版本中生成的名称可以与R2015a中生成的名称不同。例如,考虑枚举类型:
classdef颜色< int32枚举红色(1)绿色678911234567892123456789312(2)结束方法(静态)函数p = addClassNameToEnumNames() p = true;结束结束
假设最大标识符长度为默认值31。在以前的版本中,为枚举值生成的名称Green678911234567892123456789312
是Colors_Green678911234567892123456789312
.名称长度超过31个字符。处理步骤R2015a中,截断后的名称为31个字符。假设生成的名称与其他名称不冲突,则R2015a中的名称为Colors_Green6789112345678921234
.使用上一个版本中生成的长名称的外部代码不能与R2015a中生成的代码接口。
为了解决这个问题,如果可能的话,增加标识符的最大长度:
在命令行中,设置
MaxIdLength
.在MATLAB编码器应用程序,在项目构建设置,在代码的外观选项卡,设置最大标识符长度.
定点转换增强
万博1manbetx支持多个入口点函数
定点转换现在支持多个入口点函数。万博1manbetx您可以生成C/ c++库函数,以便与更大的应用程序集成。
万博1manbetx支持全局变量
您现在可以将包含全局变量的MATLAB算法转换为定点代码,而无需修改MATLAB代码。
基于代码覆盖的转换
在定点转换过程中,MATLAB编码器现在检测死代码和常数折叠代码。如果在模拟测试文件期间没有执行代码的任何部分,它会警告您。此检测可以帮助您验证测试文件是否在预期的操作范围内测试算法。该软件在将代码从浮点MATLAB代码转换为定点MATLAB代码期间使用此代码覆盖率信息。该软件在定点代码中插入内联注释,以标记死的和未翻译的区域。它在生成的定点转换HTML报告中包含代码覆盖率信息。
生成的定点代码增强
现在生成的定点代码:
使用冒号语法进行多输出赋值,减少
fi
在生成的定点代码中强制转换。保留原始算法的缩进和格式,提高所生成的定点代码的可读性。
附加DSP系统工具箱对象的自动定点转换
如果您有DSP System Toolbox™许可证,您现在可以将以下DSP System Toolbox系统对象转换为定点:
dsp。FIRFilter
直接形式和直接形式的转换
您可以根据模拟范围数据为这些系统对象建议和应用数据类型。使用MATLAB编码器app,在转换过程中,您可以查看这些System对象的模拟最小值和最大值以及建议的数据类型。您还可以查看整数信息和直方图数据。不能基于静态范围数据为这些System对象建议数据类型。
新的插值方法生成查找表MATLAB函数替换
的coder.approximation
函数现在提供一个“平”
插值法生成查找表的MATLAB函数替换。这个完全指定的查找表通过丢弃预查找步骤和减少数据路径中乘数的使用来实现高速。此插值方法可从命令行工作流和函数替换标签中的定点转换步骤。
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2015a错误报告
代码生成额外的图像处理工具箱和计算机视觉系统工具箱功能
图像处理工具箱
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};typedef enum LEDcolor;
类型定义
语句为枚举类型和指定#定义
枚举值的语句。例如:
typedef短LEDColor;#定义绿色((LEDColor)1) #定义红色((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中,可以选择Intel®用于特定平台的性能原语(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
英特尔IPP/SSE与GNU99扩展
但是,如果您打开指定了带有GNU99扩展的Intel IPP或Intel IPP/SSE的以前版本的项目,则库选择将被保留,并且该库将出现在选择列表中。
看到选择一个代码替换库.
定点转换增强
从项目到MATLAB脚本的转换,用于命令行定点转换和代码生成
对于一个MATLAB编码器项目中包含的自动定点转换,可以使用-tocode
选项编码器
命令创建一对用于定点转换和定点代码生成的脚本。您可以使用脚本在命令行工作流中重复项目工作流。在将项目转换为脚本之前,必须完成测试数字步骤的定点转换过程。
例如:
myscript.m . code my_fixpt_proj
该命令生成两个脚本:
myscript.m
包含MATLAB命令,用于创建代码配置对象,并从定点MATLAB代码生成定点C代码。代码配置对象具有与项目相同的设置。myscript
包含MATLAB命令,用于创建浮点到定点配置对象,并从入口点函数生成定点MATLAB代码。浮点到定点配置对象具有与项目相同的定点转换设置。后缀
.m后缀
由项目文件指定的生成的定点文件名后缀。
如果没有指定- script
选项,编码器
将脚本写入命令窗口。
不支持的函数的查找表近似万博1manbetx
定点转换工具现在提供了一个选项,可以在原始MATLAB代码中为连续和无状态函数生成查找表近似值。此功能对于处理不支持定点的函数非常有用。万博1manbetx控件上要用生成的查找表替换函数,请指定要替换的函数函数替换选项卡。
在命令行工作流中,使用coder.approximation
和编码器。FixptConfig
配置对象addApproximation
方法。
看到使用查找表近似替换函数.
增强的绘图功能
定点转换工具现在提供了额外的绘图功能。您可以在测试阶段使用这些绘图功能,将生成的算法的定点版本与原始浮点版本进行比较。
违约情节
默认的比较绘图现在除了绘制标量数据外,还绘制向量和矩阵数据。
自定义绘图函数
现在可以指定自己的自定义绘图函数。定点转换工具调用该函数,并且对于每个变量,传递变量的名称和使用它的函数,以及浮点和定点模拟的结果。你的函数应该接受三个输入:
一种包含变量名和使用该变量的函数的结构。
存储变量的已记录浮点值的单元格数组。
一个单元格数组,用于保存定点转换后变量的日志值。
例如,函数customComparisonPlot(varInfo, floatVarVals, fixedPtVarVals)
.
若要使用自定义绘图功能,请在“定点转换”工具中选择先进的,然后设置自定义绘图函数到你的绘图函数的名字。
在命令行工作流中,设置编码器。FixptConfig
配置对象PlotFunction
属性设置为绘图函数的名称。
看到自定义绘图功能.
与仿真数据检查器集成
您现在可以使用模拟数据检查器进行比较图。仿真数据检查器提供了检查和比较多次运行记录的仿真数据的功能。您可以导入和导出日志数据,自定义日志数据的组织,以及创建报告。
在定点转换工具中,选择先进的然后设置用模拟数据检查器绘图来是的
.看到使用模拟数据检查器启用绘图.
在命令行工作流中生成定点代码时,设置编码器。FixptConfig
配置对象PlotWithSimulationDataInspector
财产真正的
.
自定义绘图函数优先于模拟数据检查器。看到使用模拟数据检查器启用绘图.
自动定点转换常用的系统对象在MATLAB中包括双角滤波器,FIR滤波器,和速率转换器
您现在可以使用定点转换工具将以下DSP系统工具箱系统对象转换为定点。
dsp。FIRFilter
,只适用于直接表格
您可以根据模拟范围数据为这些系统对象建议和应用数据类型。在转换过程中,您可以查看这些System对象的模拟最小值和最大值以及建议的数据类型。您还可以查看整数信息和直方图数据。不能基于静态范围数据为这些System对象建议数据类型。
附加的定点转换命令行选项
您现在可以使用codegen
函数与-float2fixed
选项将浮点转换为基于派生范围以及模拟范围的定点。有关更多信息,请参见编码器。FixptConfig
.
型式建议报告
在运行Test Numerics步骤来验证数据类型建议之后,该工具提供了一个指向类型建议报告的链接,该报告显示了定点模拟的检测结果。本报告包括:
在原始MATLAB算法中为每个函数生成的定点代码
这些函数中每个变量的定点检测结果:
模拟最小值
模拟最大值
建议的数据类型
生成的定点代码增强
现在生成的定点代码:
避免在无符号减法操作中损失范围或精度。当减法的结果为负数时,转换过程将左操作数提升为有符号类型。
处理定点变量与非定点变量的乘法。在以前的版本中,没有定点类型的变量必须是常量。
在加减非定点变量和定点变量时避免溢出。
避免在连接定点数字数组时丢失范围
vertcat
而且horzcat
.如果连接矩阵,转换工具将使用一行表达式中最大的数字类型,并将最左边的元素强制转换为该类型。然后将此类型用于连接的矩阵,以避免丢失范围。
如果要转换的函数有标量输入,则
mpower
指数输入不是常数,转换工具集fimath
ProductMode
来SpecifyPrecision
在生成的代码中。使用此设置,可以在编译时确定输出数据类型。万博1manbetx支持以下功能:
真正的(m, n)
false (m, n)
sub2ind
模式
快速眼动
使用增强的除法替换。
有关更多信息,请参见生成的定点代码.
工具中按顺序编号函数专门化函数列表。在生成的定点代码中,每个定点专门化的编号与函数列表,这样就可以很容易地在代码的浮点和定点版本之间进行跟踪。例如,生成用于特化函数的定点函数喷火
命名Foo > 1
被命名为foo_s1
.有关更多信息,请参见专门化.
突出显示生成的HTML报告中潜在的数据类型问题
现在可以选择在生成的HTML报告中突出显示潜在的数据类型问题。报告强调了需要单精度、双精度或昂贵的定点操作的MATLAB代码。昂贵的定点操作检查为定点代码确定了优化机会。它突出了MATLAB代码中需要繁琐的乘法或除法或昂贵的舍入的表达式。下面的示例报告强调了需要昂贵的定点操作的MATLAB代码。
默认情况下,数据类型问题的检查是禁用的。
在项目中启用检查:
在“定点转换工具”中,单击先进的查询系统高级设置。
集强调潜在的数据类型问题来
是的
.
使用实例启用命令行检查。
创建一个浮点到定点转换配置对象:
FXPTCFG = code .config(“fixpt”);
设置
HighlightPotentialDataTypeIssues
财产真正的
:fxptcfg。HighlightPotentialDataTypeIssues = true;
看到生成代码中的数据类型问题.
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2014b错误报告
转换从项目到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', code . constant (42)};CFG myfunction -globals globals
看到定义常量全局数据.
增强的代码生成支持万博1manbetx开关
语句
代码生成现在支持:万博1manbetx
非整数、非常量字符串、可变大小字符串或空矩阵的开关表达式和大小写表达式
混合类型和大小的Case表达式
如果所有的大小写表达式都是标量整数值,代码生成软件将生成一个C开关
声明。如果在运行时,开关值不是整数,代码生成软件将生成一个错误。
当case表达式包含非整数或非标量值时,代码生成软件将生成C如果
用语句代替C开关
声明。
使用的属性的代码生成错误AbortSet
属性
类的值时,生成的代码设置属性值并调用set属性方法AbortSet
属性。当AbortSet
属性为真时,生成的代码行为与MATLAB行为不同。
在R2014a中,如果您的代码具有使用AbortSet
属性时,代码生成软件生成错误。
兼容性的考虑
控件的代码,前面的示例是AbortSet
属性时,代码生成成功,但生成的代码的行为不正确。现在,对于相同的代码,代码生成以一个错误结束。删除AbortSet
属性,并重写代码以显式比较当前属性值和新属性值。
标准数学和代码替换库的独立配置选择
在R2014a中,您可以独立地选择和配置用于C和c++代码生成的标准数学和代码替换库。
语言选择(C或c++)决定可用的标准数学库。
在项目中,语言设置为所有设置TAB确定new可用的选项标准数学库设置为硬件选项卡。
在代码配置对象中
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)
自定义库(Embedded Coder),相应的注册文件已加载到内存中 的值 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代码代码生成报告的TAB。它们现在出现在接口源文件面板C代码选项卡。报告现在与生成文件的文件夹结构一致。从R2013b开始,接口文件位于名为接口.
代码生成报告中的编译器警告
对于MEX代码生成,代码生成报告现在包括C和c++编译器警告消息。如果代码生成软件检测到编译器警告,它将在所有消息选项卡。中的编译器错误和警告消息以红色高亮显示目标生成日志选项卡。
看到查看报表中的错误和警告.
从生成的代码文件中删除日期和时间注释
以前,生成的代码文件包含带有字符串的注释生成的C源代码
后面是日期和时间戳。此注释不再出现在生成的代码文件中。如果您拥有嵌入式Coder许可证,则可以使用代码生成模板(CGT)文件在自定义文件横幅中包含日期和时间戳。
删除2的补码保护rtwtypes.h
rtwtypes.h
不再包含以下代码:
#if ((SCHAR_MIN + 1) != -SCHAR_MAX) #错误
删除真正的
而且假
从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
.
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2014a错误报告
统计工具箱和相控阵系统工具箱的代码生成
代码生成现在支持100多个统计工具箱™函万博1manbetx数。具体实现请参见统计工具箱功能.
代码生成现在支持大多数相控阵系统工具箱™万博1manbetx函数和系统对象。具体实现请参见相控阵系统工具箱功能而且相控阵系统工具箱系统对象.
parfor
函数用于独立代码生成,支持在多个核上执行
你可以使用MATLAB编码器软件生成独立的C/ c++代码从MATLAB代码包含parfor
循环。代码生成软件使用开放多处理(OpenMP)应用程序接口来生成在目标硬件的多个核上并行运行的C/ c++代码。
有关更多信息,请参见parfor
而且加速MATLAB算法使用并行for循环(parfor).
使用外部代码集成编码器。ExternalDependency
属性定义到外部代码的接口编码器。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长长整数数据类型,则可以使用此数据类型生万博1manbetx成代码。使用long - long可以生成更高效的代码,其中包含更少的繁琐操作和多字辅助函数。为代码生成指定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 = code .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编码器项目中,可以使用模拟范围为可变大小的数据建议数据类型。
有关更多信息,请参见提出基于仿真范围的定点数据类型.
定点转换工具现在提供测试文件覆盖结果。在使用测试文件模拟您的设计之后,该工具提供了代码执行频率的指示。如果您一次运行多个测试文件,该工具将提供累积覆盖率。此信息有助于您确定测试文件的完整性,并验证它们正在执行算法的全部操作范围。测试文件的完整性直接影响所提议的定点类型的质量。
有关更多信息,请参见代码覆盖率.
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2013b错误报告
代码生成期间的自动定点转换(使用定点设计器)
中的定点转换功能,现在可以将浮点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 code .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 = code .ceval('fopen',fname,permission);if ftmp == null % Error - file open failed结束
有关更多信息,请参见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的当前版本的代码生成配置对象MATLAB编码器软件会自动尝试使用工具链方法。如果现有项目或配置对象不使用默认目标生成文件设置,MATLAB编码器可能无法升级到使用工具链方法,并将发出警告。有关更多信息,请参见项目或配置正在使用模板生成文件.
parfor
函数缩减改进和C支持万博1manbetx
生成的MEX函数时parfor
-loops,你现在可以使用相交
而且联盟
作为缩减函数,现在支持以下缩减:万博1manbetx
串连
数组
函数处理
默认情况下,当MATLAB编码器为MATLAB代码生成一个MEX函数,其中包含parfor
循环,MATLAB编码器不再需要c++,现在支持目标语言设置。
增强了对类属性初始万博1manbetx值的支持
如果初始化了类属性,则现在可以在使用类时为该属性分配不同的类型。例如,类喷火
有一个属性prop1
类型的双
.
类定义foo %#代码原属性prop1 = 0;结束方法…结束结束
酒吧
指定不同的类型prop1
.函数栏%#代码原f=foo;f.prop1 =单(0);...
兼容性的考虑
在以前的版本中,如果重新分配的属性具有与初始值相同的类型,但大小不同,则生成的代码中的属性将变成可变大小。在R2013a,MATLAB编码器使用重新分配的属性的大小,大小是固定的。如果现有的MATLAB代码依赖于可变大小的属性,则无法在R2013a中为此代码生成代码。若要修复此问题,请不要在属性定义块中初始化该属性。
例如,您不能再为以下函数生成代码酒吧
.
类喷火
有一个属性prop1
它是一个标量双
.
类定义foo %#代码原属性prop1 = 0;结束方法…结束结束
酒吧
的大小prop1
.函数栏%#代码原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支持这些新的编译器。
在微软Windows平台上,Visual c++®11.
在Mac OS X平台上,苹果Xcode 4.2带有Clang。
MATLAB编码器不再支持万博1manbetx海湾合作委员会
编译器在Mac OS X平台。
MATLAB编码器不再支持Watcom万博1manbetx独立代码生成。在构建MEX功能时仍然支持Wat万博1manbetxcom。
兼容性的考虑
因为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
以帮助将代码转换为新语法。
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2013a错误报告
parfor
功能支持MEX代码万博1manbetx生成,支持在多核上执行
你可以使用MATLAB编码器软件生成的MEX函数从MATLAB代码包含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要查看代码生成支持的系统对象列表,请参见万博1manbetx代码生成支持的系统对象万博1manbetx.
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2012b错误报告
MATLAB类代码生成
在R2012a中,初步支持MATLAB类的代码生成,目的是支持用万博1manbetx户定义的System对象。有关为MATLAB类生成代码的更多信息,请参见MATLAB类代码生成.有关为系统对象生成代码的更多信息,请参阅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
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2012a错误报告
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2011b错误报告
用于管理项目的新用户界面
新MATLAB编码器用户界面简化了MATLAB到C/ c++的代码生成过程。使用此用户界面,您可以:
指定要从中生成代码的MATLAB文件
为这些MATLAB文件的输入指定数据类型
选择输出类型:
墨西哥人的功能
C/ c++静态库
C / c++可执行文件
配置生成设置以自定义代码生成环境
打开代码生成报告以查看构建状态、生成的代码以及MATLAB代码中变量和表达式的编译时信息
如何开始
你启动一个MATLAB编码器通过做以下其中一项来完成项目:
从MATLAB主菜单中,选择文件>新>代码生成项目
输入
编码器
在MATLAB命令行
来学习更多与MATLAB编码器,请参阅使用MATLAB Coder项目接口从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。m注册目标函数库
在以前的版本中,emlc
函数还可以识别自定义文件,sl_customization.m
.在R2011a中,MATLAB编码器软件不识别此定制文件,必须使用rtwTargetInfo.m
注册一个目标函数库(TFL)。注册一个TFL,你必须有嵌入式编码器软件。有关更多信息,请参见使用rtwTargetInfo API使用MATLAB Coder软件注册CRL在嵌入式编码器文档中。
新的演示
添加了以下演示:
演示…… | 教你如何…… | |
---|---|---|
你好世界 | 从一个简单的MATLAB程序生成并运行一个MEX函数 | |
使用持久变量 | 使用持久变量计算一组值的平均值 | |
使用结构数组 | 演示如何在将标量模板增长为结构数组(从MATLAB生成代码的必需条件)之前构建标量模板。 | |
球模拟 | 模拟弹跳球,并显示在将应用程序编译为MEX函数时应仅指定入口函数。 | |
广义相对论与MATLAB编码器 | 利用爱因斯坦的广义相对论计算弯曲时空中的测地线。 | |
平均滤波器 | 使用MATLAB代码生成一个独立的C库codegen |
|
图像边缘检测 | 从MATLAB代码生成一个独立的C库,实现Sobel过滤器 | |
读取文本文件 | 类的MATLAB代码生成独立的C库coder.ceval ,coder.extrinsic 而且coder.opaque 功能。 |
|
“原子”模拟 | 使用代码生成配置对象从MATLAB代码生成独立的C库和可执行文件,以支持动态内存分配 | |
替换数学函数和运算符 | 使用目标函数库替换生成代码中的操作符和函数
|
|
卡尔曼滤波器 |
|
在未来版本中删除的功能元素
函数或元素名称 | 当你使用函数或元素时会发生什么? | 使用这个元素 |
---|---|---|
% # 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 |
检查错误报告中的问题和修复
软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。
bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。
除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。
搜索R2011a Bug报告
兼容性总结
释放 | 考虑兼容性的特性或更改 |
---|---|
R2016a | 可变大小空数组的拼接:当组件数组为空时,生成用于拼接的代码 |
R2015aSP1 | 没有一个 |
R2015b | codegen 库和可执行文件的调试选项 |
R2015a | |
R2014b | |
R2014a | |
R2013b | |
R2013a | |
R2012b | 没有一个 |
R2012a | 基于大小的动态内存分配 |
R2011b | 没有一个 |
R2011a |
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。