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 может проверить сгенерированный код.
Модели с Присвоением, Селектором или 2D-inport Многопортовыми блоками 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 не поддерживает верификацию неиспользованных входных параметров графической функции, потому что они оптимизированы и не включены в сгенерированный код.