检测结合的阵列访问范例模型的输出

这个例子显示了如何检测出界数组访问错误的审查和分析结果。在里面sldvdemo_array_bounds示例模型中,ComputeIndex MATLAB功能块使用输入信号值,以确定具有最小索引的范围minIdx和最大maxIdx。的ArrayOp_Matlab,ArrayOp_MAL和ArrayOp_SF块使用之间的设定整数索引minIdxmaxIdx访问数组元素并执行阵列操作。

步骤1:打开模型

在命令提示符下,输入:

open_system('sldvdemo_array_bounds');

第2步:执行设计错误检测分析

该模型中的分析选项预先配置外边界阵列访问错误检测的。要查看这些选项,在Simulink编辑器中,双击万博1manbetx查看选项按钮。

要执行设计错误检测分析,在Simulink编辑器中,双击万博1manbetx按钮。该设计的万博1manbetxSimulink™验证结果摘要窗口打开,显示分析的进度。当分析完成后,例如模型的显示使用的分析结果。

第3步:查看分析结果

要查看图表内的分析结果中,双击以红色突出显示的图表ArrayOp_SF块。

万博1manbetxSimulink设计验证检测到结合的误差的指数列于阵列发生ü在状态DIFF。

第4步:创建线束和模拟测试案例

单击第一个查看测试案例链接。万博1manbetxSimulink设计验证创建并打开包含测试用例,绑定数组访问错误的,展示了一个治理模式。在信号生成器对话框,点击开始模拟与测试用例2模拟线束模型。

进入状态DIFF前的模拟停止。该Stateflow®调试器打开。示出了以下错误:

试图用更小的尺寸大小的U访问索引4。有效索引范围是0到3此错误将停止模拟。状态 '差异' 在图表 'sldvdemo_array_bounds_harness /测试单元(从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功能块和ArrayOp_MALStateflow®图。

所述ArrayOp_SFStateflow®图表使用C作为动作语言,它不支持基于1的索引。万博1manbetx因此,1:4不是图表中数组访问一个有效的索引范围。图表中数组访问的有效指数范围为0:3,如由错误消息中报告。当任一或maxIdx minIdx计算结果为4,一个外边界阵列访问错误的发生在ArrayOp_SF图表块。有关从零开始索引支持的更多信息,请参阅万博1manbetxMATLAB和C之间的差异为操作语言语法(Stateflow的)。