包括MATLAB生成可嵌入C代码的模型中的代码
万博1manbetxSimulink/用户定义函数
HDL编码器/用户定义函数
用一个MATLAB函数块,可以编写MATLAB®在Simulink中使用的功能万博1manbetx®模型。MATLAB函数执行用于模拟并为a生成代码万博1manbetx仿真软件编码器™目标。如果您是Simulink和MATLA万博1manbetxB产品的新手,请参阅s manbetx 845用块实现MATLAB函数概述。
双击MATLAB函数块打开MATLAB函数块编辑器,您编写MATLAB功能的位置。示例模型call_stats_block2
讨论于使用MATLAB函数块创建自定义功能中使用下列函数MATLAB函数块编辑器:
作用[均值,stdev] = stats(vals)%计算统计平均值和标准值val中值的偏差%。len =长度(val);意味着= avg (val, len);方差=√总和(vals-avg (vals, len)) ^ 2)) / len);情节(瓦尔斯,' - +');作用Mean = avg(array,size) /size;
函数在函数声明语句中指定输入和输出数据作为参数和返回值。中的块的输入和输出对应于前面示例函数的参数和返回值call_stats_block2
模型。
您还可以使用Model Explorer或Ports and data Manager定义数据、添加输入触发器和创建函数调用输出。您可以访问端口和数据管理器MATLAB函数块编辑器通过点击编辑数据.有关更多信息,请参见定义MATLAB函数块数据那管理MATLAB函数块的输入触发器和管理MATLAB功能块的函数调用输出.
这MATLAB函数块基于确定每个变量的大小、类和复杂性的分析生成有效的可嵌入代码。这种分析施加了以下限制:
变量的第一个赋值定义了变量的类型、大小、类别和复杂性。
除了在代码中使用的可变大小数据或重用不同目的时,除了使用可变大小数据或重用变量之外,您无法重新分配变量属性。
除了语言限制,MATLAB函数块支持Mat万博1manbetxlab中可用的功能的子集。这些函数包括常见类别中的函数,例如:
有关更多信息,请参见C/C++代码生成支持的函数和对象万博1manbetx.
笔记
尽管此块的代码试图产生与MATLAB完全相同的结果,但由于舍入错误,可能会出现差异。这些数字上的差异,可能是很少的EPS
最初,经过反复操作后可以放大。依赖的行为楠
不推荐。对于相同的计算,不同的C编译器可以产生不同的结果。
笔记
刚出现的MATLAB函数块不包括% # codegen
指令,但检查是否有错误,就好像它包含在内一样。添加% # codegen
对a的指令MATLAB函数块不影响错误检查。有关更多信息,请参阅编译指令%#codegen.
支持数万博1manbetx据的可视化,MATLAB函数块只支持对M万博1manbetxATLAB函数的仿真调用。看使用MATLAB引擎在生成的代码中执行函数调用了解此功能的一些限制,以及它如何与此块的代码分析集成。如果这些函数调用不直接影响任何Simulink的输入或输出,则调用不会出现在万博1manbetx万博1manbetx仿真软件编码器生成的代码。
从MATLAB函数块中定义的函数,也可以调用万博1manbetxSimulink功能块您可以调用Stateflow®功能与导出图表级功能(Make Global)和允许通过Simulink调用导出的函数万博1manbetx选中图表属性对话框中的。
在端口和数据管理器中,您可以将块输入声明为Simulink参数而不是端口。万博1manbetx这MATLAB函数块还支持输入、输出和参万博1manbetx数的类型和大小继承。还可以显式指定这些属性。看见定义和修改函数参数类型那指定MATLAB功能块数据的大小和配置MATLAB功能块参数数据参数有关中使用的变量的说明,请参见MATLAB函数阻碍。
中不允许递归调用MATLAB函数阻碍。
默认情况下,MATLAB函数块具有直接馈通功能。要禁用它,清除允许直接喂水财产。Nondirect explrough语义可确保输出仅依赖于当前状态。使用Nondirect馈通使您可以使用MATLAB函数阻塞反馈回路,防止代数回路。有关更多信息,请参见在MATLAB功能块中使用非直接馈通.