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

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

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

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

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

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

  3. В диалоговом окне Параметры конфигурации на 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 пример модели, блок ComputeIndex MATLAB Function использует значения входного сигнала, чтобы определить область значений индексов с минимальными minIdx и максимальное maxIdx. Блоки ArrayOp_Matlab, ArrayOp_MAL и ArrayOp_SF используют набор целочисленных индексов между minIdx и maxIdx для доступа к элементам массива и выполнения операций над массивами.

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

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

open_system('sldvdemo_array_bounds');

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

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

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

Шаг 3: Обзор результатов анализа

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

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

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

Щелкните первую ссылку 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).

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

Inf Значения индексов

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

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

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

Похожие темы