Обнаружьте из связанной модели доступа к массиву в качестве примера

В этом примере показано, как обнаружить из связанных ошибок доступа к массиву и рассмотреть результаты анализа. В sldvdemo_array_bounds модель в качестве примера, блок MATLAB function ComputeIndex использует значения входного сигнала, чтобы определить область значений индексов с минимальным minIdx и максимальный maxIdx. ArrayOp_Matlab, ArrayOp_MAL и блоки ArrayOp_SF используют набор целочисленных индексов между minIdx и maxIdx получить доступ к элементам массива и выполнить операции над массивами.

Шаг 1: откройте модель

В командной строке, введите:

open_system('sldvdemo_array_bounds');

Шаг 2: выполните анализ поиска ошибок проектирования

Опции анализа в модели предварительно сконфигурированы для из связанного выявления ошибок доступа к массиву. Чтобы просмотреть эти опции, в Редакторе Simulink, дважды кликают кнопку View Options.

Чтобы выполнить анализ поиска ошибок проектирования, в Редакторе Simulink, дважды кликают кнопку Run. Окно Summary Simulink® Design Verifier™ Results открывается, который отображает прогресс анализа. Когда анализ завершается, модель в качестве примера подсвечена с результатами анализа.

Шаг 3: рассмотрите результаты анализа

Чтобы просмотреть результаты анализа в графике, дважды кликните блок ArrayOp_SF Chart, который подсвечен в красном.

Simulink Design Verifier обнаруживает, что индекс из связанных ошибок происходит в массиве u в Различном состоянии.

Шаг 4: создайте обвязку и симулируйте тесты

Щелкните по первой ссылке теста Представления. Simulink Design Verifier создает и открывает модель тестовой обвязки, которая содержит тесты, которые демонстрируют из связанных ошибок доступа к массиву. В диалоговом окне Signal Builder нажмите симуляцию Start, чтобы симулировать модель тестовой обвязки с Тестом 2.

Остановки симуляции прежде, чем ввести состояние, Различное Stateflow® Debugger, открываются. Следующую ошибку показывают:

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 модель, держите свой курсор над Различным состоянием, чтобы видеть значения данных в этой точке останова симуляции.

Используя Тест 2 значения входного сигнала, блок MATLAB function ComputeIndex определяет область значений индексов массива, чтобы быть 1:4. Индексация на основе одна сопоставима с синтаксисом MATLAB, таким образом, эти индексы допустимы для блока MATLAB function ArrayOp_Matlab и графика ArrayOp_MAL Stateflow®.

График ArrayOp_SF Stateflow® использует C в качестве языка действия, который не поддерживает индексацию на основе одну. Таким образом, 1:4 не допустимая область значений индекса для доступа к массиву в графике. Допустимая область значений индекса для доступа к массиву в графике является 0:3, как сообщается сообщением об ошибке. Когда или maxIdx или minIdx оценивают к 4, из связанной ошибки доступа к массиву происходит в блоке ArrayOp_SF Chart. Для получения дополнительной информации об основанной на нуле поддержке индексации смотрите Различия Между MATLAB и C как Синтаксис языка Действия (Stateflow).