这个例子展示了如何检测超出绑定的数组访问错误并检查分析结果。在sldvdemo_array_bounds.
示例模型,MATLAB的ComputeIndex函数块使用输入信号的值来确定索引的最小范围Minidx.
和最大maxIdx
.ArrayOp_Matlab、ArrayOp_MAL和ArrayOp_SF块使用之间的整数索引集Minidx.
和maxIdx
访问数组元素并执行数组操作。
在命令提示符下,输入:
open_system (“sldvdemo_array_bounds”);
模型中的分析选项被预先配置为超出边界的阵列访问错误检测。要查看这些选项,请在Simulink编辑器中双击金宝app视图选项按钮。
要执行设计错误检测分析,请在Simulink编辑器中双击金宝app运行按钮。打开Si金宝appmulink®Design Verifier™Results Summary窗口,显示分析的进度。当分析完成时,示例模型将与分析结果一起突出显示。
要查看图表内的分析结果,请双击以红色突出显示的arrayop_sf图表块。
金宝appSimulink Design Verifier检测到数组中出现索引超界错误u
在国家差异。
点击第一个查看测试用例链接。金宝appSimulink Design Verifier创建并打开一个包含测试用例的装配模型,该测试用例演示了超出边界的数组访问错误。在“信号生成器”对话框中,单击开始模拟用测试用例2来模拟装配模型。
模拟在进入Diff状态之前停止。状态流®调试器打开。显示如下错误:
试图用更小的尺寸访问u的索引4。有效的索引范围是0 ~ 3。此错误将停止模拟。sldvdemo_array_bounds_harness/Test Unit(从sldvdemo_array_bounds中复制)/ArrayOp_SF': y = u[maxIdx] - u[minIdx];
在此断点处保持Stateflow®调试器打开。在sldvdemo_array_bounds_harness
模型中,将光标停留在Diff状态上以查看此模拟断点处的数据值。
使用测试用例2输入信号值,ComputeIndex MATLAB函数块确定数组索引的范围为1:4。基于一的索引与MATLAB语法一致,因此这些索引对于ArrayOp_Matlab MATLAB Function块和ArrayOp_MAL statflow®图是有效的。
ArrayOp_SF statflow®图表使用C作为动作语言,它不支持基于一的索引。金宝app因此,1:4不是图表中数组访问的有效索引范围。在图表中,数组访问的有效索引范围是0:3,正如错误消息所报告的。当maxIdx或minIdx的计算结果为4时,ArrayOp_SF Chart块中发生了一个边界外的数组访问错误。有关零基索引支持的更多信息,请参见金宝appMATLAB和C作为动作语言语法的区别(Stateflow).