Simulink® Code Inspector™ имеет нижеследующие ограничения:
Simulink Code Inspector поддерживает подмножество Simulink и возможности моделирования Stateflow®. Можно использовать проверки совместимости, чтобы проверить совместимость модели с инспекцией кода. Однако существуют экземпляры, когда проверки совместимости не обнаруживают несовместимости модели с Simulink Code Inspector. Например, модели с:
Блоки, которые имеют выражения настраиваемого параметра. Для получения дополнительной информации смотрите Настраиваемые Ограничения Выражения (Simulink Coder).
Символы Non-ASCII для элемента модели или имен папок. Инспекция кода поддерживается только для моделей, которые используют символы ASCII в:
Имена элемента модели. Например, модель под названием model_itèr.slx
не совместимо с инспекцией кода.
Имена папок. Например, модель в папке C:/Modèles
не совместимо с инспекцией кода.
Объекты Stateflow, которые не используются в диаграмме Stateflow. Например, Simulink Code Inspector не смотрит локальные переменные или параметры, заданные в осциллографе графика, если они не используются в диаграмме Stateflow.
Циклический поток управления Stateflow, который приводит к while
или do-while
в сгенерированном коде. В этом случае Simulink Code Inspector приводит верификацию к сбою для модели.
Если вы изменяете модель, заменяя блоки и смотрите код без первой регенерации его, инспекция кода может перестать работать. Например:
Если вы заменяете импорт или выходные порты, и смотрите код без первой регенерации его, ваша сила модели содержат импорт корневого уровня или выходной порт с идентификатором Simulink (SID), который не совпадает с SID импорта или блока выходного порта в модели. В результате сбои инспекции кода. Для получения дополнительной информации смотрите, Определяют местоположение Компонентов Схемы Используя Идентификаторы Simulink (Simulink).
Simulink Code Inspector рассматривает модель, которая содержит массив шин как несовместимый и приводит верификацию к сбою для этой модели. Однако проверки совместимости модели на топ-модель не могут обнаружить массив шин, который был задан в образце модели. В сгенерированном коде, если совместимая топ-модель инициализирует функцию, инициализирует структуру DWork, соответствующую массиву шин в модели, на которую ссылаются, инициализировать функция не проверяет.
Например, следующее инициализируют функцию, не проверяет. topModelName
имя топ-модели и subModelName
имя модели, на которую ссылаются.
{ /* states (DWork) */ void memset((void *)&topModelName_DW, 0, sizeof(DW_topModelName_T)); }
DW_topModelName_T
содержит массив шин для модели subModelName
, на которую ссылаются,
можно следующим образом /* Block states (auto storage) for model 'subModelName' */ typedef struct { myBus data[3]; } DW_topModelName_T;
transpose
(.'
) в MATLAB Function блок не может быть совместимым, если операнд является константой или если оператор операции транспонирования объединен с другим оператором. Например, transpose
не может использоваться в цикле.
Simulink Code Inspector поддерживает подмножество возможности генерации кода Simulink Coder™. Можно использовать проверки совместимости, чтобы проверить, что модель сконфигурирована, чтобы сгенерировать код, совместимый с инспекцией кода. Однако существуют некоторые экземпляры, когда проверки совместимости не обнаруживают модели, сконфигурированные, чтобы сгенерировать код, который несовместим с Simulink Code Inspector. Например:
Модели, которые содержат ступенчатые функции с аргументом функции real-time model
не совместимы с инспекцией кода. Ступенчатые функции с помощью аргумента функции real-time model
с упрощенным интерфейсом вызова, однако, совместимы с инспекцией кода.
Если блоки, устраненные во время компиляции модели, будут иметь неавтоматический класс памяти и не будут testpointed, сгенерированный код не проверит. Блоки могут быть устранены во время компиляции посредством сокращения блока.
Если модели сгенерируют код с отдельными функциями выхода и обновления, код не проверит.
Если размер сигнала превышает MaxStackVariableSize
значение по умолчанию, код, сгенерированный из модели, не проверит. Если вы увеличиваете значение MaxStackVariableSize
, модель приведет проверку совместимости к сбою Check code generation settings> Verify ‘TLC options’ setting. Однако Simulink Code Inspector может проверить сгенерированный код.
Модели с Assignment, Selector или 2D-inport блоками Multiport Switch могут инициировать оптимизацию, которая изменяет выбор индекса, чтобы избежать копий данных в сгенерированном коде. Сгенерированный код не проверит. Для примера см., что Модели Инициировали Оптимизацию кода, чтобы Избежать Копий Данных.
Модели с Постоянными блоками, которые используют постоянные шаги расчета и матричные данные, могут инициировать оптимизацию, которая устраняет блоки во время генерации кода. Сгенерированный код не проверит.
В сгенерированном коде, если модель инициализирует функциональное время выполнения передач к модели, на которую ссылаются, инициализировать функция не проверит. Например, следующее инициализируют функцию, не проверит. <topModelName>
имя модели и <subModelName>
имя модели, на которую ссылаются.
{ <topModelName>_TimingBridge.nTasks = 1; <topModelName>_TimingBridge.clockTick = (NULL); <topModelName>_TimingBridge.clockTickH = (NULL); } /* Model Initialize fcn for ModelReference Block: '<Root>/Model' */ <subModelName>_initialize(&<topModelName>_TimingBridge);
В сгенерированном коде, если код инициализации модели передает сигнал запроса остановки блоку Stop Simulation, содержавшемуся в модели, на которую ссылаются, SLCI не проверит код.
Если несовместимости в подмодели влияют на глобальные данные и инициализацию данных в топ-модели, SLCI может не проверить сгенерированный код для топ-модели.
В модели, на которую ссылаются начальные условия перечислимого типа должны иметь значение по умолчанию 0. Если значение по умолчанию не 0, SLCI может не проверить код.
Если пользовательский прототип функции приводит к несовместимости в подмодели, SLCI может не проверить сгенерированный код для топ-модели.
Если симуляция модели возвращает ошибку, сгенерированный код может не проверить.
В сгенерированном коде, если размер локальных данных превышает размер стека, данные перемещены в глобальную переменную и не инициализируются локально. В этом случае код не проверит.
Если размер сигнала в вашей модели является очень большим, это может исчерпать стек на вашей машине, приводящей к нарушению сегментации во время инспекции кода.
Если модель сгенерирует код с непоэлементным циклом for, код не проверит.
Если модель имеет самомодифицируемую подсистему маскированную, которая добавляет или удаляет блоки, программа контроля совместимости может иметь непреднамеренное поведение.
Модели, содержащие тестовую обвязку, не совместимы с инспекцией кода.
Если импорт в допускающую повторное использование подсистему не используется в подсистеме, SLCI может не проверить сгенерированный код.
Некоторые шаблоны моделирования могут привести к отказам инспекции кода. Для примеров смотрите Шаблоны Модели, Которые Могут Привести к Отказам Верификации кода.
Если блок Math Operations берет int
входной сигнал преобразован от boolean
сигнал, контроль сбоя силы модели.
Simulink Code Inspector поддерживает верификацию coder.ceval
функция в блоках MATLAB Function, которая позволяет модели вызывать функцию C/C++ от сгенерированного кода. Чтобы добавить эту функциональность, Source file C/C++ и Header file заданы в параметрах конфигурации под Code Generation > Custom Code > Insert custom C code in generated. В результате определения этих параметров настройки генерации контрольного кода “Проверки совместимости” перестали работать с нефатальным предупреждением. В этой ситуации Simulink Code Inspector проверяет эти модели даже при том, что они перестали работать с нефатальным ограничением. Необходимо вручную рассмотреть внешние файлы C/C++, перечисленные под разделом Utils Verification Отчета Simulink Code Inspector.
Simulink Code Inspector не поддерживает верификацию неиспользованных входных параметров графической функции, потому что они оптимизированы и не включены в сгенерированный код.
Когда объект интерполяционной таблицы инициализирует параметр подсистемы маскированный, сбои инспекции кода, если имена параметра и объекта интерполяционной таблицы не соответствуют. Simulink Code Inspector не обнаруживает это несоответствие как несовместимость, но не удается смотреть.