Ограничения инспекции кода

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 не обнаруживает это несоответствие как несовместимость, но не удается смотреть.

Похожие темы