В этом примере показано, как обнаружить внешние ошибки доступа к массиву и просмотреть результаты анализа. В sldvdemo_array_bounds
пример модели, блок ComputeIndex MATLAB Function использует значения входного сигнала, чтобы определить область значений индексов с минимальными minIdx
и максимальное maxIdx
. Блоки ArrayOp_Matlab, ArrayOp_MAL и ArrayOp_SF используют набор целочисленных индексов между minIdx
и maxIdx
для доступа к элементам массива и выполнения операций над массивами.
В командной строке введите:
open_system('sldvdemo_array_bounds');
Опции анализа в модели предварительно сконфигурированы для выявления ошибок внешнего доступа к массиву. Чтобы просмотреть эти опции, в редакторе Simulink Editor дважды нажмите кнопку View Options.
Чтобы выполнить поиск ошибок проектирования анализ, в редакторе Simulink Editor дважды нажмите кнопку Run. Откроется окно Simulink ® Design Verifier™ Сводные Данные, в котором отображается прогресс анализа. Когда анализ завершается, пример модели подсвечивается результатами анализа.
Чтобы просмотреть результаты анализа внутри графика, дважды кликните блок ArrayOp_SF Chart, выделенный красным цветом.
Simulink Design Verifier обнаруживает, что индекс из связанных ошибок происходит в массиве u
в состоянии Diff.
Щелкните первую ссылку View тест. Simulink Design Verifier создает и открывает модель тестовой обвязки, содержащую тесты, которые демонстрируют несвязанные ошибки доступа к массиву. В диалоговом окне Signal Builder нажмите Start simulation, чтобы симулировать модель тестовой обвязки с Тест 2.
Симуляция останавливается перед входом в состояние Diff. Откроется отладчик Stateflow ®. Отображается следующая ошибка:
Attempted to access index 4 of u with smaller dimension sizes. The valid index range is 0 to 3. This error will stop the simulation. State 'Diff' in Chart 'sldvdemo_array_bounds_harness/Test Unit (copied from sldvdemo_array_bounds)/ArrayOp_SF': y = u[maxIdx] - u[minIdx];
Оставьте Stateflow ® Debugger открытым в этой точке останова. В sldvdemo_array_bounds_harness
удерживая курсор над состоянием Diff, чтобы увидеть значения данных в этой точке останова симуляции.
Используя значения входного сигнала Тест 2, блок ComputeIndex MATLAB Function определяет область значений индексов массива как 1:4. Одноуровневая индексация согласуется с синтаксисом MATLAB, поэтому эти индексы действительны для ArrayOp_Matlab Function блока MATLAB и диаграммы ArrayOp_MAL Stateflow ®.
Диаграмма ArrayOp_SF Stateflow ® использует C в качестве языка действий, который не поддерживает индексацию на основе одного. Таким образом, 1:4 не является допустимой индексной областью значений для доступа к массиву на графике. Допустимая область значений индексов для доступа к массиву на графике: 0:3, как сообщается в сообщении об ошибке. Когда maxIdx или minIdx вычисляет значение 4, в блоке ArrayOp_SF Chart возникает ошибка доступа к несвязанному массиву. Для получения дополнительной информации о поддержке индексации с нулем, смотрите Различия между MATLAB и C как синтаксис языка действий (Stateflow).