文档

MATLAB编码器发布说明

R2016a

新功能,Bug修复,兼容性考虑

单元格阵列支持:在MA万博1manbetxTLAB代码中使用额外的单元格阵列特性进行代码生成

在R2016a中,对单元格数组的代码生成支持包括:万博1manbetx

使用{end + 1}来增加单元格数组

您可以编写这样的代码X{end + 1}培养细胞阵列X.例如:

X = {1 2};X(end + 1} = 'a';

当你使用{end + 1}若要生长单元格数组,请遵循中描述的限制使用{end + 1}扩展单元格数组

在单元格数组中赋值并处理对象

单元格数组可以包含值和处理对象。可以使用单元格对象数组来解决代码生成不支持矩阵或结构中的对象的限制。万博1manbetx

单元格数组中的函数句柄

单元格数组可以包含函数句柄。

支持非二幂FFT:生成用于非二幂变换长度的万博1manbetx快速傅里叶变换的代码

在以前的版本中,代码生成需要两个变换长度的幂fftfft2fftn传输线ifft2,ifftn.在R2016a中,代码生成允许这些函数的长度为非2的幂。

线性代数的更快独立代码:生成利用您自己的特定于目标的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.如果你通过一个空Xmyconcat_mex,结果的大小为2 × 4。如果传递一个非空参数Xmyconcat_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中,应用程序包含链接。

定点转换代码覆盖范围的更改

如果你使用MATLAB编码器应用程序将MATLAB代码转换为定点代码,并根据模拟范围提出类型,应用程序显示代码覆盖结果。在之前的版本中,该应用程序以百分比显示覆盖率。在R2016a中,应用程序将覆盖率显示为行执行计数。

定点转换需要定点设计器™软件。

代码生成报告中更多的键盘快捷键:更轻松地浏览报告

在R2016a中,可以使用键盘快捷键在代码生成报告中执行以下操作。

行动 Windows平台的默认键盘快捷方式
放大 Ctrl + +
缩小 Ctrl + -
评估所选MATLAB代码 F9
打开所选MATLAB代码的帮助 F1
打开选定的MATLAB代码 Ctrl + D
后退一步查看您在代码窗格中打开的文件 Alt +左
向前一步浏览您在代码窗格中打开的文件 Alt +正确的
刷新 F5
找到 Ctrl + F

MATLAB首选项定义了与这些操作相关的键盘快捷键。您还可以从上下文菜单中选择这些操作。要打开上下文菜单,右键单击报表中的任何位置。

xcorr代码生成:为长输入向量的xcorr生成更快的代码

对于长输入向量,代码生成为xcorr现在用频域计算代替时域计算。生成的代码可以比以前的版本更快。

使用xcorr功能,您必须有信号处理工具箱™软件。

代码生成附加的MATLAB函数

MATLAB专业数学

MATLAB中的三角函数

插值和计算几何在MATLAB

对MATLAB函数的代码生成支持的更改万博1manbetx

音频系统工具箱函数和系统对象的代码生成

生成WLAN系统工具箱函数和系统对象的代码

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2016a错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2015aSP1

错误修复

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2015aSP1 Bug报告

错误代码生成的已知bug
此产品的所有已知bug

R2015b

新功能,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代码中的运行时检查:在测试生成的独立库和可执行文件时,检测并报告运行时错误

在R2015b中,生成的独立库和可执行文件可以检测和报告运行时错误,例如超出范围的数组索引。在以前的版本中,只有生成的MEX检测和报告运行时错误。

缺省情况下,MEX启用运行时错误检测功能。默认情况下,对独立库和可执行文件禁用运行时错误检测。

为独立库和可执行文件启用运行时错误检测:

  • 在命令行中,使用代码配置属性RuntimeChecks

    CFG = code .config('lib');cfg. %或'dll'或'exe'。RuntimeChecks = true;CFG myfunction
  • 使用MATLAB编码器应用程序,在项目构建设置,在调试选项卡,选择生成运行时错误检查复选框。

生成的库和可执行文件使用将错误消息写入stderr而且中止终止应用程序。如果而且中止不可用,你必须提供它们。错误信息是英文的。

多核功能函数:从二十多个MATLAB数学函数生成支持openmp的C代码

对于代码生成,现在使用一些MATLAB的数学函数parfor创建在共享内存多核平台上并行运行的循环。并行运行的循环比在单个线程上运行的循环更快。

一些函数使用parfor当元素的数量保证并行时。这些函数包括interp1interp2interp3,大多数函数在MATLAB专业数学.一些函数使用parfor当它们对列进行操作时,以及当要处理的列的数量保证并行时。这些函数包括过滤器中位数模式排序性病,var

如果您的编译器不支持开放多处理(OpenMP)应用程万博1manbetx序接口,MATLAB编码器parfor循环,循环。在生成的代码中,循环迭代在单个线程上运行。看到万博1manbetx支持编译器

统计和机器学习工具箱代码生成:生成kmeans和randsample的代码

简化了硬件规格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错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2015a

新功能,Bug修复,兼容性考虑

改进的MATLAB编码器应用程序集成编辑器和简化的工作流程

在R2015a中,MATLAB编码器应用程序为代码生成工作流提供了一个新的用户界面。

改进后的应用程序包括:

  • 自动检查代码生成准备情况和运行时问题。代码生成就绪性检查包括标识不支持的函数。万博1manbetx

  • 一个集成的编辑器,在您的MATLAB代码中修复问题,而无需离开应用程序。

  • 项目摘要和对生成文件的访问。

  • 以MATLAB脚本的形式导出项目设置。

  • 为每个步骤提供帮助,并链接到文档以获取更多信息。

生成示例C/ c++,主要用于将生成的代码集成到应用程序中

在R2015a中,当生成源代码、静态库、动态库或可执行文件时,可以生成示例C/ c++ main函数。修改示例main函数以满足应用程序的需求。

main函数示例提供了一个模板,帮助您将生成的代码合并到应用程序中。该模板展示了如何将函数输入参数初始化为零并调用入口点函数。当代码对数据使用动态内存分配时,生成一个示例main函数尤其有用。看到在应用程序中使用一个C Main的例子

默认情况下,MATLAB编码器在生成源代码、静态库、动态库或可执行文件时,生成一个示例main函数。

控件控制示例main函数的生成MATLAB编码器应用:

  1. 生成代码页,打开生成对话框中,单击生成箭头

  2. 生成对话框,设置构建类型致下列其中一项:

    • 源代码

    • 静态库(.lib)

    • 动态库(.dll)

    • 可执行文件(. exe)

  3. 点击更多的设置

  4. 所有设置选项卡,在先进的,设置生成示例main致下列其中一项:

    • 不生成一个示例主函数

    • 生成,但不编译,一个示例主函数(默认)

    • 生成并编译一个main函数示例

使用命令行界面控制main函数的生成:

  1. 的代码配置对象“自由”“dll”,或exe”.例如:

    CFG = code .config('lib');%或DLL或exe

  2. 设置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来提高性能。

代码生成额外的图像处理工具箱和计算机视觉系统工具箱功能

计算机视觉系统工具箱

看到计算机视觉系统工具箱

代码生成额外的通信系统工具箱,DSP系统工具箱和相控阵系统工具箱系统对象

代码生成额外的统计和机器学习工具箱功能

代码生成附加的MATLAB函数

代码生成额外的MATLAB函数选项

从项目转换到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编码器导出可用于创建和交互的函数emxArrayS在你生成的代码中。R2015a包括以下改进emxArray接口功能:

emxArray外部C/ c++函数使用的可变大小数组的接口函数

当你使用coder.ceval调用外部C/ c++函数,MATLAB编码器为外部函数使用的可变大小数组生成emxArray接口函数。

函数初始化输出emxArray年代和emxArray结构输出中的S

MATLAB编码器生成函数进行初始化emxArrayS是输出或者emxArrayS是结构输出。

创建空对象的函数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编码器不允许外部定义包含的结构emxArrays.如果你在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;

生成代码中的显式强制转换可能会防止编译器警告。

在没有嵌入式编码器许可证的情况下生成可重入代码

在以前的版本中,生成可重入代码需要嵌入式Coder许可证。在R2015a中,您可以使用MATLAB编码器没有嵌入式编码器许可证。

看到可重入代码

代码生成parfor-循环堆栈溢出

在以前的版本中,不能为parfor-loops包含不适合堆栈的变量。在R2015a中,您可以为此生成代码parfor循环。看到使用并行for循环的算法加速

的默认值的更改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的初始值全局变量

禁用超链接时用于命令行代码生成的目标生成日志显示

在以前的版本中,如果禁用了超链接,则无法访问代码生成报告以查看目标构建日志中的编译器或链接器消息。在R2015a中,当超链接被禁用时,您将在命令窗口中看到目标构建日志。

如果你使用-nojvm启动MATLAB时,超链接将被禁用。看到常用的启动选项

有关目标生成日志的详细信息,请参见查看目标版本信息

取消仪表MEX输出类型

您不能再指定输出类型仪器的墨西哥人

兼容性的考虑

对于手动定点转换,使用命令行工作流。这个工作流使用定点设计器函数buildInstrumentedMex而且showInstrumentationResults.看到手动转换浮点MATLAB算法到定点在定点设计器文档中。

截断包含类名前缀的长枚举类型值名

在以前的版本中,当代码生成软件确定生成的枚举类型值名称的长度或唯一性时,它会忽略类名前缀。如果指定生成的枚举类型值名包含类名前缀,则可能生成的类型值名:

  • 超过您指定的最大标识符长度。

  • 与另一个标识符相同。

在R2015a中,如果指定生成的枚举类型值名包含类名前缀,则生成的类型值名:

  • 不超过标识符的最大长度。

  • 是独一无二的。

兼容性的考虑

对于包含类名前缀的长类型值名称,以前版本中生成的名称可以与R2015a中生成的名称不同。例如,考虑枚举类型:

classdef颜色< int32枚举红色(1)绿色678911234567892123456789312(2)结束方法(静态)函数p = addClassNameToEnumNames() p = true;结束结束

假设最大标识符长度为默认值31。在以前的版本中,为枚举值生成的名称Green678911234567892123456789312Colors_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系统对象转换为定点:

您可以根据模拟范围数据为这些系统对象建议和应用数据类型。使用MATLAB编码器app,在转换过程中,您可以查看这些System对象的模拟最小值和最大值以及建议的数据类型。您还可以查看整数信息和直方图数据。不能基于静态范围数据为这些System对象建议数据类型。

新的插值方法生成查找表MATLAB函数替换

coder.approximation函数现在提供一个“平”插值法生成查找表的MATLAB函数替换。这个完全指定的查找表通过丢弃预查找步骤和减少数据路径中乘数的使用来实现高速。此插值方法可从命令行工作流和函数替换标签中的定点转换步骤。

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2015a错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2014b

新功能,Bug修复,兼容性考虑

代码生成额外的图像处理工具箱和计算机视觉系统工具箱功能

图像处理工具箱

有关代码生成支持的图像处理工具箱函数列表,请参见万博1manbetx图像处理工具箱

计算机视觉系统工具箱

有关代码生成支持的计算机视觉系统工具箱函数的列表,请参见万博1manbetx计算机视觉系统工具箱

代码生成额外的通信系统工具箱和DSP系统工具箱功能和系统对象

通讯系统工具箱

有关代码生成所支持的通信系统工具箱™函数的列表,请参见万博1manbetx通讯系统工具箱

DSP系统工具箱

有关代码生成支持的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方法返回。真正的而不是

代码生成ode23而且数值常微分方程求解器

代码生成附加的MATLAB函数

MATLAB中的数据和文件管理

看到MATLAB中的数据和文件管理

MATLAB中的线性代数

看到MATLAB中的线性代数

MATLAB中的字符串函数

str2double

看到MATLAB中的字符串函数

代码生成额外的MATLAB函数选项

  • “向量”而且“矩阵”的特征值选项eig

  • 的所有输出类选项总和而且刺激

  • 的所有输出类选项的意思是除了“本地”对于整型

  • 多维数组支持万博1manbetxflipudfliplr,rot90

  • 尺寸操作沿选项circshift

看到C和c++代码生成支持的函数和对象-按字母顺万博1manbetx序排列

代码生成报告中继承属性的折叠列表

上的继承对象属性将显示为代码生成报告变量选项卡。在R2014b中,默认情况下继承的属性列表是折叠的。

更改导出标识符的长度

在以前的版本中,代码生成软件将导出的标识符(例如入口点函数名或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后缀.m包含MATLAB命令,用于创建浮点到定点配置对象,并从入口点函数生成定点MATLAB代码。浮点到定点配置对象具有与项目相同的定点转换设置。后缀由项目文件指定的生成的定点文件名后缀。

如果没有指定- script选项,编码器将脚本写入命令窗口。

看到转换定点转换项目到MATLAB脚本

不支持的函数的查找表近似万博1manbetx

定点转换工具现在提供了一个选项,可以在原始MATLAB代码中为连续和无状态函数生成查找表近似值。此功能对于处理不支持定点的函数非常有用。万博1manbetx控件上要用生成的查找表替换函数,请指定要替换的函数函数替换选项卡。

在命令行工作流中,使用coder.approximation编码器。FixptConfig配置对象addApproximation方法。

看到使用查找表近似替换函数

增强的绘图功能

定点转换工具现在提供了额外的绘图功能。您可以在测试阶段使用这些绘图功能,将生成的算法的定点版本与原始浮点版本进行比较。

违约情节

默认的比较绘图现在除了绘制标量数据外,还绘制向量和矩阵数据。

自定义绘图函数

现在可以指定自己的自定义绘图函数。定点转换工具调用该函数,并且对于每个变量,传递变量的名称和使用它的函数,以及浮点和定点模拟的结果。你的函数应该接受三个输入:

  • 一种包含变量名和使用该变量的函数的结构。

  • 存储变量的已记录浮点值的单元格数组。

  • 一个单元格数组,用于保存定点转换后变量的日志值。

例如,函数customComparisonPlot(varInfo, floatVarVals, fixedPtVarVals)

若要使用自定义绘图功能,请在“定点转换”工具中选择先进的,然后设置自定义绘图函数到你的绘图函数的名字。

在命令行工作流中,设置编码器。FixptConfig配置对象PlotFunction属性设置为绘图函数的名称。

看到自定义绘图功能

与仿真数据检查器集成

您现在可以使用模拟数据检查器进行比较图。仿真数据检查器提供了检查和比较多次运行记录的仿真数据的功能。您可以导入和导出日志数据,自定义日志数据的组织,以及创建报告。

在定点转换工具中,选择先进的然后设置用模拟数据检查器绘图是的.看到使用模拟数据检查器启用绘图

在命令行工作流中生成定点代码时,设置编码器。FixptConfig配置对象PlotWithSimulationDataInspector财产真正的

自定义绘图函数优先于模拟数据检查器。看到使用模拟数据检查器启用绘图

自动定点转换常用的系统对象在MATLAB中包括双角滤波器,FIR滤波器,和速率转换器

您现在可以使用定点转换工具将以下DSP系统工具箱系统对象转换为定点。

您可以根据模拟范围数据为这些系统对象建议和应用数据类型。在转换过程中,您可以查看这些System对象的模拟最小值和最大值以及建议的数据类型。您还可以查看整数信息和直方图数据。不能基于静态范围数据为这些System对象建议数据类型。

附加的定点转换命令行选项

您现在可以使用codegen函数与-float2fixed选项将浮点转换为基于派生范围以及模拟范围的定点。有关更多信息,请参见编码器。FixptConfig

型式建议报告

在运行Test Numerics步骤来验证数据类型建议之后,该工具提供了一个指向类型建议报告的链接,该报告显示了定点模拟的检测结果。本报告包括:

  • 在原始MATLAB算法中为每个函数生成的定点代码

  • 这些函数中每个变量的定点检测结果:

    • 模拟最小值

    • 模拟最大值

    • 建议的数据类型

生成的定点代码增强

现在生成的定点代码:

  • 避免在无符号减法操作中损失范围或精度。当减法的结果为负数时,转换过程将左操作数提升为有符号类型。

  • 处理定点变量与非定点变量的乘法。在以前的版本中,没有定点类型的变量必须是常量。

  • 在加减非定点变量和定点变量时避免溢出。

  • 避免在连接定点数字数组时丢失范围vertcat而且horzcat

    如果连接矩阵,转换工具将使用一行表达式中最大的数字类型,并将最左边的元素强制转换为该类型。然后将此类型用于连接的矩阵,以避免丢失范围。

  • 如果要转换的函数有标量输入,则mpower指数输入不是常数,转换工具集fimathProductModeSpecifyPrecision在生成的代码中。使用此设置,可以在编译时确定输出数据类型。

  • 万博1manbetx支持以下功能:

    • 真正的(m, n)

    • false (m, n)

    • sub2ind

    • 模式

    • 快速眼动

  • 使用增强的除法替换。

有关更多信息,请参见生成的定点代码

工具中按顺序编号函数专门化函数列表。在生成的定点代码中,每个定点专门化的编号与函数列表,这样就可以很容易地在代码的浮点和定点版本之间进行跟踪。例如,生成用于特化函数的定点函数喷火命名Foo > 1被命名为foo_s1.有关更多信息,请参见专门化

突出显示生成的HTML报告中潜在的数据类型问题

现在可以选择在生成的HTML报告中突出显示潜在的数据类型问题。报告强调了需要单精度、双精度或昂贵的定点操作的MATLAB代码。昂贵的定点操作检查为定点代码确定了优化机会。它突出了MATLAB代码中需要繁琐的乘法或除法或昂贵的舍入的表达式。下面的示例报告强调了需要昂贵的定点操作的MATLAB代码。

默认情况下,数据类型问题的检查是禁用的。

在项目中启用检查:

  1. 在“定点转换工具”中,单击先进的查询系统高级设置。

  2. 强调潜在的数据类型问题是的

使用实例启用命令行检查。

  1. 创建一个浮点到定点转换配置对象:

    FXPTCFG = code .config(“fixpt”);
  2. 设置HighlightPotentialDataTypeIssues财产真正的

    fxptcfg。HighlightPotentialDataTypeIssues = true;

看到生成代码中的数据类型问题

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2014b错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2014a

新功能,Bug修复,兼容性考虑

代码生成额外的信号处理工具箱,通信系统工具箱,DSP系统工具箱功能和系统对象

代码生成fminsearch优化函数和附加插值函数的MATLAB

MATLAB优化函数

看到MATLAB优化函数

插值和计算几何在MATLAB

看到插值和计算几何在MATLAB

转换从项目到MATLAB脚本命令行代码生成

使用-tocode选项编码器命令时,可以将MATLAB编码器在MATLAB脚本中投影到等效的MATLAB代码。该脚本在配置对象中重现项目并运行codegen命令。使用此功能,您可以:

  • 从项目工作流转移到命令行工作流。

  • 将项目保存为可以共享的文本文件。

下面的命令转换命名为myproject到命名为myscript.m

编码器-tocodemyproject- scriptmyscript.m

如果省略- script选项时,编码器命令将脚本写入命令窗口。

代码生成从文件中读函数

的代码从文件中读函数。

自动设置C/ c++编译器

之前,你使用了墨西哥人设置为C/ c++代码生成设置编译器。在R2014a中,代码生成软件定位并使用支持安装的编译器。万博1manbetx你可以使用墨西哥人设置更改默认编译器。看到更改默认编译器

常量全局变量的编译时声明

可以指定全局变量为编译时常量。使用一个常量全局变量:

  • 生成优化的代码。

  • 在不更改源代码的情况下定义常量的值。

类中声明一个常量全局变量MATLAB编码器项目:

  1. 概述选项卡上,单击增加全球.为全局变量输入一个名称。

  2. 单击全局变量名称右侧的字段。

  3. 选择定义恒定值

  4. 输入全局变量名右侧的值。

要在命令行界面上声明一个常量全局变量,请使用全局变量选项与编码器。Constant函数。

在下面的代码中,gConstant全局变量是常值吗42

CFG = code .config('mex');globals = {'gConstant', code . constant (42)};CFG myfunction -globals globals

增强的代码生成支持万博1manbetx开关语句

代码生成现在支持:万博1manbetx

  • 非整数、非常量字符串、可变大小字符串或空矩阵的开关表达式和大小写表达式

  • 混合类型和大小的Case表达式

如果所有的大小写表达式都是标量整数值,代码生成软件将生成一个C开关声明。如果在运行时,开关值不是整数,代码生成软件将生成一个错误。

当case表达式包含非整数或非标量值时,代码生成软件将生成C如果用语句代替C开关声明。

的值类的代码生成支持万博1manbetxset.prop方法

在R2014a中,可以为具有的值类生成代码set.prop方法。

使用的属性的代码生成错误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(仅限嵌入式编码器)

      要生成与早期版本相同的代码,请进行更改TargetLangStandardC99 (ISO)

  • 打开项目后,如果选择MathWorks提供的代码替换库,则代码生成软件可以生成与以前版本不同的代码,具体取决于标准数学库设置。验证生成的代码。

  • 如果在以前版本中使用的脚本设置了配置对象CodeReplacementLibrary参数,则修改脚本以同时使用CodeReplacementLibraryTargetLangStandard参数。

类中整数类型的位长度限制编码器。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) #错误
方法生成的代码必须编译MATLAB编码器目标上使用二补表示有符号整数值的软件。生成的代码不验证目标是否对有符号整数值使用二补表示。

删除真正的而且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错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2013b

新功能,Bug修复,兼容性考虑

统计工具箱和相控阵系统工具箱的代码生成

代码生成现在支持100多个统计工具箱™函万博1manbetx数。具体实现请参见统计工具箱功能

代码生成现在支持大多数相控阵系统工具箱™万博1manbetx函数和系统对象。具体实现请参见相控阵系统工具箱功能而且相控阵系统工具箱系统对象

parfor函数用于独立代码生成,支持在多个核上执行

你可以使用MATLAB编码器软件生成独立的C/ c++代码从MATLAB代码包含parfor循环。代码生成软件使用开放多处理(OpenMP)应用程序接口来生成在目标硬件的多个核上并行运行的C/ c++代码。

有关更多信息,请参见parfor而且加速MATLAB算法使用并行for循环(parfor)

中的持久化变量parfor循环

现在可以从使用持久变量的并行算法生成代码。

有关更多信息,请参见parfor

随机数发生器函数在parfor循环

现在可以从使用随机数生成器的并行算法生成代码兰德randn兰迪randperm,rng

有关更多信息,请参见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_Tint32_T

MATLAB表达式转换成C常数使用coder.const

您可以使用新功能coder.const在编译时将表达式和函数调用转换为常量。看到coder.const而且常数合并

在编译报告中突出显示常量函数参数

编译报告现在突出显示常量函数参数,并以不同的颜色显示它们。通过将光标放在高亮显示的参数上,可以显示常量参数数据类型和值。可以将常量参数值导出到基本工作区,在基本工作区中可以显示关于参数的详细信息。

有关更多信息,请参见在MATLAB代码中查看变量

支持int64, uint64类万博1manbetx型的数据

您现在可以使用int64而且uint64用于代码生成的数据类型。

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数据类型的长度,单位为比特。万博1manbetx

    • TargetLongLongMode:指定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()
如果你在R2013a中生成这个函数,你可以这样调用这个函数:
S = foo();

如果你在R2013b中生成这个函数,你可以这样调用这个函数:

foo(谨此告知);

coder.runTest新语法

使用语法coder.runTest (test_fcn MEX_name_ext)运行test_fcn将对入口点函数的调用替换为对命名为MEX文件中的相应MEX函数的调用MEX_name_extMEX_name_ext包括特定于平台的文件扩展名。看到coder.runTest

coder.target语法变化

的新语法coder.target是:

Tf = code .target('target')
例如,coder.target (MATLAB)当代码在MATLAB中运行时返回true。看到coder.target

您可以使用旧语法,但请考虑更改为新语法。旧的语法将在未来的版本中删除。

虚部为零的复值的变化

在R2013b中,当虚部为零的复数值变为实数时:

  • 它们由MEX函数返回。

  • 它们被传递给一个外部函数。

看到带有复杂操作数的表达式会产生复杂的结果

兼容性的考虑

R2013b中生成的MEX函数在复数结果的虚部为零时返回实值。在R2013b之前生成的MEX函数在复数结果虚部等于零时返回复数值。

在R2013b中,虚部等于零的复数值在传递给外部函数时变为实数。在以前的版本中,它们仍然很复杂。

代码生成接口文件的子文件夹

以前,用于生成MEX代码的接口文件出现在代码生成输出文件夹中。在R2013b中,这些接口文件都有前缀_coder,出现在名为接口,并出现在所有代码生成输出类型中。

万博1manbetx支持Windows 64位机器上的LCC编译器

lc -win64编译器是随附的MATLAB编码器为微软®Windows 64位机器。对于没有安装第三方编译器的Windows 64位计算机,MEX代码生成默认使用LCC。

不能将LCC用于C/ c++静态库、C/ c++动态库或C/ c++可执行文件的代码生成。对于这些输出类型,必须安装编译器。看到万博1manbetx支持编译器

定点转换增强

这些功能需要定点设计器许可。

定点转换选项codegen

在Mac平台上使用派生范围的定点转换

中的复变量的派生范围MATLAB编码器项目

定点转换工作流支持使用枚举类型的设计万博1manbetx

使用模拟范围的可变大小数据的定点转换

定点转换测试文件覆盖结果

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2013b错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2013a

新功能,Bug修复,兼容性考虑

代码生成期间的自动定点转换(使用定点设计器)

中的定点转换功能,现在可以将浮点MATLAB代码转换为定点C代码MATLAB编码器项目。您可以根据模拟范围数据、静态范围数据或两者选择建议数据类型。

    注意:您必须拥有定点设计器许可证。

在定点转换过程中,您可以:

  • 根据默认的单词长度提出分数长度。

  • 根据默认分数长度提出单词长度。

  • 优化整数。

  • 指定模拟最小/最大数据的安全裕度。

  • 验证是否可以使用建议的数据类型构建项目。

  • 通过运行应用了定点类型的测试文件来测试数值。

  • 查看每个变量使用的比特的直方图。

支持文件I/O功能万博1manbetx

以下文件I/O函数现在支持代码生成:万博1manbetx

要查看实现详细信息,请参见支持代码生成的函数-万博1manbetx按字母顺序排列

万博1manbetx支持非持久句柄对象

现在可以为包含处理对象或System对象的引用的局部变量生成代码。在以前的版本中,为这些对象生成的代码仅限于分配给持久变量的对象。

通过引用传递给入口点函数的结构

现在可以在生成的代码中通过引用入口点函数来指定传递结构。这种优化只适用于独立的代码生成;它不适用于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编码器可能无法升级到使用工具链方法,并将发出警告。有关更多信息,请参见项目或配置正在使用模板生成文件

复三角函数

为复杂的代码生成添加了支持万博1manbetxacosDacotDacscDasecDasinDatanDcosDcscDcotDsecD信德,罐内功能。

parfor函数缩减改进和C支持万博1manbetx

生成的MEX函数时parfor-loops,你现在可以使用相交而且联盟作为缩减函数,现在支持以下缩减:万博1manbetx

  • 串连

  • 数组

  • 函数处理

默认情况下,当MATLAB编码器为MATLAB代码生成一个MEX函数,其中包含parfor循环,MATLAB编码器不再需要c++,现在支持目标语言设置。

万博1manbetx在数论函数中支持整数

代码生成支持以下数论函数的整数输万博1manbetx入:

要查看实现详细信息,请参见支持代码生成的函数-万博1manbetx按字母顺序排列

增强了对类属性初始万博1manbetx值的支持

如果初始化了类属性,则现在可以在使用类时为该属性分配不同的类型。例如,类喷火有一个属性prop1类型的

类定义foo %#代码原属性prop1 = 0;结束方法…结束结束
函数酒吧指定不同的类型prop1
函数栏%#代码原f=foo;f.prop1 =单(0);...
在R2013a,MATLAB编码器忽略初始属性定义并使用重新分配的类型。在以前的版本中,MATLAB编码器不支持此重赋,代万博1manbetx码生成失败。

兼容性的考虑

在以前的版本中,如果重新分配的属性具有与初始值相同的类型,但大小不同,则生成的代码中的属性将变成可变大小。在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,parforMac OS X平台不再支万博1manbetx持。

  • MATLAB编码器不再支持Watcom万博1manbetx独立代码生成。仅使用Watcom构建MEX功能。使用另一种编译器生成独立的代码。有关受支持的编译器的列表,请万博1manbetx参见万博1manbetx支持编译器

正在删除的函数

这些函数已从MATLAB编码器软件

函数名 当你使用这个函数时会发生什么?
emlc R2013a中的错误。
emlmex R2013a中的错误。

兼容性的考虑

emlc而且emlmex已被移除。使用codegen代替。如果您有调用emlcemlmex,使用coder.upgrade以帮助将代码转换为新语法。

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2013a错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2012b

新功能,Bug修复

parfor功能支持MEX代码万博1manbetx生成,支持在多核上执行

你可以使用MATLAB编码器软件生成的MEX函数从MATLAB代码包含parfor循环。生成的MEX功能可以在一个桌面的多个核上运行。有关更多信息,请参见parfor而且基于并行for循环的MATLAB算法加速

代码生成准备工具

代码生成准备工具筛选MATLAB代码中不支持代码生成的特性和功能。万博1manbetx该工具提供了一个报告,其中列出了包含不受支持的特性和函数的源文件,并指示了需要做多少工作才能使MATLAB代码适合代码生成。万博1manbetx

有关更多信息,请参见coder.screener而且代码生成准备工具

减少了生成的MEX函数的数据副本和轻量级运行时检查

MATLAB编码器现在消除内置的非复杂数据类型的数据副本。它还可以执行更快的边界检查。这些增强可以更快地生成MEX函数。

额外的字符串函数支持代码生成万博1manbetx

代码生成现在支持以下字符串函数。万博1manbetx要查看实现详细信息,请参见支持代码生成的函数-万博1manbetx按字母顺序排列

生成的MEX函数中的可视化函数

MATLAB编码器软件现在检测对许多常见可视化函数的调用,例如情节disp,数字.对于MEX代码生成,MATLAB编码器自动调用MATLAB来实现这些函数。对于独立代码生成,MATLAB编码器不为这些可视化函数生成代码。此功能减少了使代码适合于代码生成所花费的时间。类在外部声明这些函数的要求也被消除了coder.extrinsic函数。

输入参数类型规范增强

更新后的项目用户界面方便了输入参数类型规范。

项目导入和导出能力

您现在可以将项目设置导出到存储为基本工作区中的变量的配置对象。方法将设置导入到不同的项目中,或者在命令行中生成代码codegen函数。此功能允许您:

  • 在项目和命令行工作流之间共享设置

  • 在多个项目之间共享设置

  • 标准化代码生成项目的设置

有关更多信息,请参见共享生成配置设置

包生成的代码在zip文件重新定位

packNGo函数包生成的代码文件到一个压缩的zip文件中,以便您可以在另一个开发环境中重新定位、解包和重建它们。如果您希望重新定位文件,以便可以针对特定的目标环境重新编译它们,或者在未安装MATLAB的开发环境中重新编译它们,则此功能非常有用。

有关更多信息,请参见在另一个开发环境中使用的包代码

定点检测和数据类型建议

MATLAB编码器项目提供下列定点转换支助:万博1manbetx

  • 选项生成仪表MEX函数

  • 使用仪表MEX函数提供模拟最小和最大结果

  • 基于模拟最小值和最大值的定点数据类型建议

  • 建议分数长度或单词长度的选项

您可以使用这些建议的定点数据类型来创建原始MATLAB入口点函数的定点版本。

    注意:需要定点工具箱™许可证。

有关更多信息,请参见定点转换

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2012b错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2012a

新特性,兼容性考虑

MATLAB类代码生成

在R2012a中,初步支持MATLAB类的代码生成,目的是支持用万博1manbetx户定义的System对象。有关为MATLAB类生成代码的更多信息,请参见MATLAB类代码生成.有关为系统对象生成代码的更多信息,请参阅DSP系统工具箱、计算机视觉系统工具箱或通信系统工具箱文档。

基于大小的动态内存分配

默认情况下,现在为大小超过可配置阈值的可变大小数组启用动态内存分配。这种行为允许对堆栈内存使用进行更精细的控制。此外,您可以为更多的MATLAB算法自动生成代码,而无需修改原始的MATLAB代码。

兼容性的考虑

如果使用脚本生成代码,而不想使用动态内存分配,则必须禁用它。有关更多信息,请参见控制动态内存分配

C/ c++动态库生成

您现在可以使用MATLAB编码器从生成的C代码构建动态链接库(DLL)。这些库对于集成到期望动态链接库的现有软件解决方案中非常有用。万博 尤文图斯

有关更多信息,请参见从MATLAB代码生成C/ c++动态链接库

自动定义输入参数类型

MATLAB编码器软件现在可以通过从您提供的测试文件推断这些类型来自动定义输入参数类型。此功能有助于输入类型定义,并降低手动定义类型时引入错误的风险。

要了解有关自动定义类型的更多信息:

MEX功能验证

MATLAB编码器现在提供对测试文件的支持,万博1manbetx以验证生成的MEX函数的操作。此功能使您能够验证MEX函数在功能上与原始MATLAB代码等效,并检查运行时错误。

要了解有关验证MEX函数行为的详细信息,请执行以下操作:

增强项目设置对话框

项目设置对话框现在将配置参数分组,以便您可以轻松识别与代码生成目标(如速度、内存和代码外观)相关的参数。代码生成配置对象的对话框,编码器。MexCodeConfig编码器。CodeConfig,编码器。EmbeddedCodeConfig,也使用相同的新分组。

查看已更新的项目设置对话框:

  1. 在项目中,单击构建选项卡。

  2. 构建选项卡,点击更多设置链接打开项目设置对话框。

    有关每个选项卡上的参数的信息,请单击帮助按钮。

查看已更新的代码生成配置对象对话框:

  1. 在MATLAB命令行中,创建一个配置对象。例如,创建一个用于生成MEX代码的配置对象。

    Mex_cfg = code .config;

  2. 打开此对象的对话框。

    打开mex_cfg
    有关每个选项卡上的参数的信息,请单击帮助按钮。

项目从源代码中的断言语句推断输入类型

MATLAB编码器项目现在可以从中推断输入数据类型断言在MATLAB入口点文件中定义函数输入属性的语句。有关更多信息,请参见在MATLAB文件中编程定义输入

MATLAB代码生成

有关代码生成支持的新工具箱函数和系统对象的详细信息,请参见万博1manbetx代码生成从MATLAB发布说明

新的演示

添加了以下演示:

演示…… 教你如何……
coderdemo_reverb 为使用MATLAB类的算法生成MEX函数。

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2012a错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2011b

新功能

万博1manbetx支持从矩阵中删除行和列

现在可以从MATLAB代码生成C/ c++代码,从矩阵中删除行或列。例如,下面的代码删除了矩阵的第二列X

X(:,2) = [];
有关更多信息,请参见减小矩阵的大小在MATLAB文档中。

MATLAB代码生成

有关代码生成支持的新工具箱函数和系统对象的详细信息,请参见万博1manbetx代码生成从MATLAB发布说明

检查错误报告中的问题和修复

软件本身就很复杂,并不是没有错误。代码生成器的输出可能包含错误,其中一些是编译器无法检测到的。MathWorks在其Bug报告系统上报告引起其注意的关键已知Bugwww.tianjin-qmedu.com/万博1manbetxsupport/bugreports/.使用“保存的搜索和观察的错误”工具,搜索短语“错误的代码生成”,以获得已知错误的报告,这些错误产生的代码可能会编译和执行,但仍然产生错误的答案。

bug报告是每个版本的文档中不可分割的一部分。定期检查一个版本的所有错误报告,因为这样的报告可能会识别出您正在使用的版本的实际行为与本文档中描述的行为之间的不一致。

除了检查错误报告之外,您还应该实现一个验证和验证策略,以识别设计、代码和工具中的潜在错误。

搜索R2011b错误报告

错误代码生成的已知bug
此产品的所有已知bug

R2011a

新特性,兼容性考虑

用于管理项目的新用户界面

MATLAB编码器用户界面简化了MATLAB到C/ c++的代码生成过程。使用此用户界面,您可以:

  • 指定要从中生成代码的MATLAB文件

  • 为这些MATLAB文件的输入指定数据类型

  • 选择输出类型:

    • 墨西哥人的功能

    • C/ c++静态库

    • C / c++可执行文件

  • 配置生成设置以自定义代码生成环境

  • 打开代码生成报告以查看构建状态、生成的代码以及MATLAB代码中变量和表达式的编译时信息

如何开始

你启动一个MATLAB编码器通过做以下其中一项来完成项目:

  • 从MATLAB主菜单中,选择文件>>代码生成项目

  • 输入编码器在MATLAB命令行

来学习更多与MATLAB编码器,请参阅使用MATLAB Coder项目接口从MATLAB代码生成C代码

从实时车间emlc函数迁移

MATLAB编码器,codegen函数替换emlc与以下区别:

新的编码选项

旧的emlc选项 新的编码选项

arg游戏

emlcoder.egc

编码器。Constant

emlcoder.egs

coder.typeof (a, b, 1)指定具有相同类和复杂度的可变大小输入一个大小和上界与大小向量相同b

创建编码器。类型对象的codegenarg游戏选择。有关更多信息,请参见coder.typeof

- f

没有codegen选项可用。相反,请使用默认的fimath。有关更多信息,请参阅定点工具箱文档。

全球

全局变量

    注意:全球继续与codegen

- n

不再支持此选项。万博1manbetx相反,建立numerictype在MATLAB。

- s

配置

与新配置对象一起使用,请参见新的代码生成配置对象

- t环球套票:exe

配置:exe

使用此选项可使用默认构建选项生成C/ c++可执行文件。否则,使用配置与一个编码器。CodeConfig编码器。EmbeddedCodeConfig配置对象。

- t墨西哥人

配置:墨西哥人

使用此选项可使用默认生成选项生成MEX函数。否则,使用配置与一个编码器。MexCodeConfig配置对象。

- t环球套票
- t环球套票:自由

配置:自由

使用这些选项中的任何一个来使用默认构建选项生成C/ c++库。否则,使用配置与一个编码器。CodeConfig编码器。EmbeddedCodeConfig配置对象。

新的代码生成配置对象

codegen函数使用新的配置对象替换旧的配置对象emlc具有以下区别的对象:

旧的emlc配置对象 新的编码源配置对象
emlcoder。MEXConfig

编码器。MexCodeConfig

emlcoder。RTWConfig
emlcoder.RTWConfig (grt)

编码器。CodeConfig


万博1manbetxSupportNonFinite属性现在可以在没有嵌入式编码器许可证的情况下使用。


以下属性名称已更改:

  • RTWCompilerOptimization现在是CCompilerOptimization

  • RTWCustomCompilerOptimization现在是CCustomCompilerOptimization

  • RTWVerbose现在是详细的

emlcoder.RTWConfig(“接受方”)

编码器。EmbeddedCodeConfig

以下属性名称已更改:

  • MultiInstanceERTCode现在是MultiInstanceCode

  • RTWCompilerOptimization现在是CCompilerOptimization

  • RTWCustomCompilerOptimization现在是CCustomCompilerOptimization

  • RTWVerbose现在是详细的

emlcoder。
HardwareImplementation

编码器。HardwareImplementation

编码函数没有默认的主函数输入类型

在以前的版本中,如果使用emlc函数生成带有输入参数的MATLAB函数的代码,并且您没有指定这些输入的类型,默认情况下,emlc假设这些输入是实数,标量,双精度。在R2011a中,codegen函数不假设默认类型。必须至少指定每个主函数输入的类。有关更多信息,请参见指定项目中主要功能输入的属性

兼容性的考虑

如果您现有的脚本调用emlc来为具有输入但不指定输入类型的MATLAB函数生成代码,并将此脚本迁移到使用codegen,则必须修改脚本以指定输入。

代码原函数以不同的顺序处理编译选项

在以前的版本中,emlc函数从左到右解析编译选项,以最右的选项为准。在R2011a中,codegen函数优先使用单个命令行选项,而不是使用配置对象指定的选项。如果命令行选项冲突,则最右的选项优先。

兼容性的考虑

如果您现有的脚本调用emlc指定一个配置对象以及其他命令行选项,您就可以迁移这个脚本来使用codegencodegen可能不会使用相同的配置参数值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代码生成C代码,请参阅视频

新的演示

添加了以下演示:

演示…… 教你如何……
你好世界 从一个简单的MATLAB程序生成并运行一个MEX函数
使用持久变量 使用持久变量计算一组值的平均值
使用结构数组 演示如何在将标量模板增长为结构数组(从MATLAB生成代码的必需条件)之前构建标量模板。
球模拟 模拟弹跳球,并显示在将应用程序编译为MEX函数时应仅指定入口函数。
广义相对论与MATLAB编码器 利用爱因斯坦的广义相对论计算弯曲时空中的测地线。
平均滤波器 使用MATLAB代码生成一个独立的C库codegen
图像边缘检测 从MATLAB代码生成一个独立的C库,实现Sobel过滤器
读取文本文件 类的MATLAB代码生成独立的C库coder.cevalcoder.extrinsic而且coder.opaque功能。
“原子”模拟 使用代码生成配置对象从MATLAB代码生成独立的C库和可执行文件,以支持动态内存分配
替换数学函数和运算符 使用目标函数库替换生成代码中的操作符和函数

    注意:要运行这个演示,您需要嵌入式Coder软件。

卡尔曼滤波器
  • 从MATLAB版本的卡尔曼滤波器生成一个独立的C库

  • 通过生成MEX函数加速卡尔曼滤波算法

在未来版本中删除的功能

的未来版本中将删除此函数MATLAB编码器软件

函数名 当你使用这个函数时会发生什么? 兼容性的考虑
emlc 仍然在R2011a中运行 没有一个

在未来版本中删除的功能元素

函数或元素名称 当你使用函数或元素时会发生什么? 使用这个元素
% # 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报告

错误代码生成的已知bug
此产品的所有已知bug

这个话题有用吗?