Обнаружьте из связанных ошибок доступа к массиву

Поиск ошибок проектирования для из связанного доступа к массиву

Анализ поиска ошибок проектирования Simulink® Design Verifier™ обнаруживает из связанных ошибок доступа к массиву в вашей модели. В симуляции, когда ваша модель пытается получить доступ к элементу массива с помощью недопустимого индекса, из связанной ошибки доступа к массиву, происходит.

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

  1. На вкладке Design Verifier, в разделе Mode, выбирают Design Error Detection.

  2. Нажмите Error Detection Settings.

  3. В диалоговом окне Configuration Parameters, в панели Design Error Detection, выбирают Out of bound array access.

  4. Нажмите OK.

  5. Нажмите Detect Design Errors.

    Логарифмическое окно Simulink Design Verifier открывается, показывая прогресс анализа.

    Когда анализ завершен:

    • Программное обеспечение подсвечивает модель с результатами анализа.

    • Диалоговое окно Simulink Design Verifier Results открывает и отображается аналитические сводные данные.

Примечание

Если модель содержит из связанной ошибки доступа к массиву, после того, как первое вхождение доступа к массиву, Simulink Design Verifier принимает, что индекс массива внутри границ для остающегося анализа. Следовательно, о целях поиска ошибок проектирования, которые анализируются после этого предположения, можно сообщить как допустимых, даже если ошибки проектирования происходят в модели.

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

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

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

Inf Индексируйте значения

Поиск ошибок проектирования не поддерживает индексацию Inf. Если ваша модель пытается получить доступ к массиву с помощью значения индекса, которое оценивает к Inf, поиск ошибок проектирования не сообщает из связанной ошибки доступа к массиву, но в симуляции, из связанной ошибки доступа к массиву происходит.

Блок Index Vector со скалярным вводом данных

Из связанного доступа к массиву поиск ошибок проектирования не поддерживает блоки Index Vector со скалярными вводами данных. Если ваша модель включает блок Index Vector, который задает скалярный ввод данных вместо векторного ввода данных, и вход управления вызывает за пределы доступ к массиву, поиск ошибок проектирования не сообщает об ошибке, но ошибка происходит в симуляции.

Похожие темы