金宝app®设计验证器™设计错误检测分析检测出模型中的超出边界的数组访问错误。在模拟中,当您的模型试图使用无效索引访问数组元素时,将发生边界外的数组访问错误。
要检测模型中超出边界的数组访问错误:
在设计验证器选项卡,模式部分中,选择设计错误检测.
点击错误检测设置.
在“配置参数”对话框中,单击设计错误检测窗格中,选择超出界限的数组访问.
点击好吧.
点击检测设计错误.
的金宝app仿真软件设计验证器日志窗口将打开,显示分析的进度。
当分析完成时:
软件利用分析结果对模型进行了重点分析。
的金宝app仿真软件设计验证器结果对话框打开并显示分析摘要。
请注意
如果模型包含超出边界的数组访问错误,在第一次出现数组访问后,金宝app仿真软件设计验证器假设数组索引在剩余分析的范围内。因此,在此假设之后分析的设计错误检测目标可能被报告为有效的,即使设计错误发生在模型中。
这个示例展示了如何检测超出边界的数组访问错误并检查分析结果。在sldvdemo_array_bounds
示例模型,ComputeIndex MATLAB函数块使用输入信号值确定索引的最小范围minIdx
和最大maxIdx
.ArrayOp_Matlab、ArrayOp_MAL和ArrayOp_SF块使用之间的整数索引集minIdx
和maxIdx
访问数组元素并执行数组操作。
步骤1:打开模型
在命令提示符处,输入:
open_system (“sldvdemo_array_bounds”);
步骤2:执行设计错误检测分析
模型中的分析选项被预先配置为超出边界的数组访问错误检测。要查看这些选项,在Simulink编辑器中,双击金宝app视图选项按钮。
要执行设计错误检测分析,在Simulink编辑器中,双击金宝app运行按钮。打开Si金宝appmulink®Design Verifier™Results Summary窗口,显示分析的进展。当分析完成时,示例模型与分析结果一起突出显示。
步骤3:回顾分析结果
要查看图表中的分析结果,双击以红色突出显示的ArrayOp_SF chart块。
金宝appSimulink Design Verifier检测到数组中出现索引界外错误u
在国家差异。
步骤4:创建利用和模拟测试用例
点击第一个查看测试用例链接。金宝appSimulink Design Verifier创建并打开一个包含测试用例的工具模型,该模型演示了超出边界的数组访问错误。在“Signal Builder”对话框中,单击开始模拟以使用测试用例2来模拟线束模型。
仿真在进入Diff状态之前停止,statflow®调试器打开。显示如下错误:
试图以较小的维度访问u的索引4。有效的索引范围是0到3。此错误将停止模拟。State 'Diff' in Chart 'sldvdemo_array_bounds_harness/Test Unit (copied from sldvdemo_array_bounds)/ArrayOp_SF': y = u[maxIdx] - u[minIdx];
在此断点保持statflow®调试器打开。在sldvdemo_array_bounds_harness
模型,将光标停留在Diff状态上以查看模拟断点处的数据值。
使用测试用例2的输入信号值,ComputeIndex MATLAB函数块确定数组索引的范围为1:4。基于一的索引与MATLAB语法一致,所以这些索引对ArrayOp_Matlab MATLAB函数块和ArrayOp_MAL statflow®图是有效的。
ArrayOp_SF statflow®图表使用C作为操作语言,它不支持基于1的索引。金宝app因此,1:4不是图表中数组访问的有效索引范围。图表中数组访问的有效索引范围是0:3,正如错误消息所报告的那样。当maxIdx或minIdx的值为4时,ArrayOp_SF图表块中发生超出边界的数组访问错误。有关基于零的索引支持的更多信息,请参见金宝app作为动作语言语法的MATLAB与C的区别(Stateflow).
正
索引值设计错误检测不支持索引金宝app正
.如果您的模型试图使用计算结果为的索引值访问数组正
,设计错误检测不报告边界外的阵列访问错误,但在模拟中,会发生边界外的阵列访问错误。
不支持超出边界的数组访问设计错误检测金宝app索引向量具有标量数据输入的块。如果你的模型包含索引向量块,该块指定标量数据输入而不是矢量数据输入,并且控制输入导致越界数组访问,设计错误检测不报告错误,但在模拟中发生错误。