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

Прежде чем вы сгенерируете код из модели, можно инкрементно и итеративно использовать программу контроля совместимости, чтобы проверить совместимость модели с Simulink® Code Inspector™. Программа контроля совместимости обнаруживает и сообщает о проблемах совместимости рано в процессе разработки моделей. Это раннее обнаружение значительно уменьшает время и усилие, требуемое достигнуть удовлетворительных результатов инспекции кода. Однако существуют экземпляры, когда Simulink Code Inspector не делает:

  • Обнаружьте и сообщите о несовместимостях модели.

  • Проверьте сгенерированный код с определенными свойствами.

  • Проверьте сгенерированный код, который теряет структурную эквивалентность с исходной моделью из-за устранения избыточной функциональности.

Когда вы работаете с Simulink Code Inspector, рассматривают ограничения:

Ограничения программы контроля совместимости, чтобы проверять совместимость модели

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

  • Когда имена элемента модели или имена папок содержат символы non-ASCII, сбои инспекции кода. Simulink Code Inspector поддерживает модели, которые используют только символы ASCII для имен элементов и имен папок. Например:

    • Модель под названием model_itèr.slx не совместимо с инспекцией кода, потому что она содержит символ non-ASCII.

    • Модель в папке C:/Modèles не совместимо с инспекцией кода, потому что имя папки содержит символ non-ASCII.

  • Когда объект интерполяционной таблицы инициализирует параметр подсистемы маскированный, сбои инспекции кода, если имена параметра и объекта интерполяционной таблицы не соответствуют. Simulink Code Inspector не обнаруживает это несоответствие как несовместимость, но не удается смотреть сгенерированный код. Чтобы работать вокруг этого ограничения, подтвердите, что параметр подсистемы маскированный и объект интерполяционной таблицы имеют то же имя.

  • Когда вы устанавливаете параметр конфигурации модели, Оптимизируют порядок блочной операции в сгенерированном коде (Embedded Coder) к Improved Code Execution Speed, генератор кода изменяет порядок блочной операции в сгенерированном коде, чтобы увеличить экземпляры буферного повторного использования. В результате это вызывает несоответствие между порядком блочной операции симуляции модели и сгенерированным кодом. Программа контроля совместимости не обнаруживает параметр конфигурации, устанавливающий как несовместимость, но Инспектору кода не удается смотреть сгенерированный код из-за этого несоответствия. Чтобы работать вокруг этого ограничения, установите параметр конфигурации модели, Оптимизируют порядок блочной операции в сгенерированном коде (Embedded Coder) к Off.

  • В модели, на которую ссылаются, если начальные условия перечислимого типа не имеют значения по умолчанию 0, Инспектору кода не удается проверить сгенерированный код. Когда вы используете перечислимый тип в модели, на которую ссылаются, начальные условия перечислимого типа должны иметь значение по умолчанию 0.

  • Если модель содержит блок из библиотеки Math Operation, которая берет int входной сигнал преобразовал от булева сигнала, сгенерированный код из модели приводит верификацию инспекции кода к сбою.

  • Если модель имеет самомодифицируемую подсистему маскированную, которая добавляет или удаляет блоки, программа контроля совместимости может иметь непреднамеренное поведение.

  • Модель, которая содержит ступенчатую функцию с аргументом функции real-time model не совместимо с Инспектором кода. Ступенчатая функция, которая использует аргумент функции real-time model с упрощенным вызовом интерфейс совместим с инспекцией кода.

  • Если блоки, устраненные во время компиляции модели, имеют неавтоматический класс памяти и не являются testpointed, верификацией инспекции кода сбоев сгенерированного кода. Можно устранить блоки во время компиляции посредством сокращения блока.

  • Если модели генерируют код с отдельными функциями выхода и обновления, Инспектору кода не удается проверить сгенерированный код.

  • Simulink Code Inspector поддерживает верификацию coder.ceval функция в блоках MATLAB function, которая позволяет модели вызвать функцию C/C++ от сгенерированного кода. Чтобы добавить эту функциональность, исходный файл C/C++ и заголовочный файл заданы в параметрах конфигурации под Code Generation> Custom Code> Insert custom C code in generated. В результате определения этих параметров настройки генерации Контрольного кода проверки совместимости перестали работать с нефатальным предупреждением. В этой ситуации Simulink Code Inspector проверяет эти модели даже при том, что они перестали работать с нефатальным ограничением. Необходимо вручную рассмотреть внешние файлы C/C++, перечисленные под разделом Utils Verification Отчета Simulink Code Inspector.

  • Если модель содержит блоки, которые имеют выражения настраиваемого параметра, сбои инспекции кода. Выражения настраиваемого параметра используются, чтобы задать значения параметров блоков. Для получения дополнительной информации смотрите Настраиваемые Ограничения Выражения (Simulink Coder)

  • Модели, содержащие тестовую обвязку, не совместимы с Simulink Code Inspector. Программа контроля совместимости не обнаруживает эти модели как несовместимые.

  • transpose (.') в блоке MATLAB function не совместимо, если операнд является константой или если оператор операции транспонирования объединен с другим оператором. Например, вы не можете использовать transpose в цикле.

Ограничения проверки сгенерированного кода, который имеет определенные свойства

Существуют некоторые экземпляры, когда Simulink Code Inspector не удается проверить сгенерированный код, который имеет определенные свойства.

  • В сгенерированном коде, если инициализировать функция времени выполнения передач модели к модели, на которую ссылаются, Инспектору кода не удается проверить инициализировать функцию. Например, следующее инициализируют функциональную верификацию инспекции кода сбоев:

    {
    		<topModelName>_TimingBridge.nTasks = 1;	
    		<topModelName>_TimingBridge.clockTick = (NULL);
    		<topModelName>_TimingBridge.clockTickH = (NULL);
    }
    
    /* Model Initialize fcn for ModelReference Block: '<Root>/Model' */
    <subModelName>_initialize(&<topModelName>_TimingBridge);
    В коде, <topModelName> имя модели и <subModelName> имя модели, на которую ссылаются.

  • В сгенерированном коде, если инициализировать функция модели передает сигнал запроса остановки блоку Stop Simulation в модели, на которую ссылаются, Инспектор кода не проверяет код.

  • В сгенерированном коде, если размер локальных данных превышает размер стека, данные перемещены в глобальную переменную и не инициализируются локально. Инспектор кода не проверяет код.

  • Когда Stateflow циклический поток управления приводит к while или do-while в сгенерированном коде Simulink Code Inspector не удается проверить код.

Ограничения из-за моделирования шаблонов и устранения избыточной функциональности

Simulink Code Inspector не удается проверить сгенерированный код из моделей, которые имеют некоторые определенные шаблоны моделирования. Для примеров смотрите Шаблоны Модели, Которые Могут Привести к Отказам Верификации кода.

Из-за устранения избыточной функциональности модели в сгенерированном коде, Simulink Code Inspector не может проверить, что исходная модель и оптимизированный сгенерированный код структурно эквивалентны. В результате этому не удается проверить сгенерированный код. Чтобы работать вокруг этих ограничений, избегайте использования избыточной функциональности в модели.

  • Если ваша модель содержит неиспользованные объекты Stateflow, сбои инспекции кода. Например, Инспектор кода не смотрит локальные переменные или параметры, заданные в осциллографе графика, если вы не используете их в диаграмме Stateflow.

  • Если существует неиспользованный импорт в допускающую повторное использование подсистему в подсистеме, Инспектору кода не удается проверить сгенерированный код.

  • Simulink Code Inspector действительно поддерживает верификацию неиспользованных входных параметров графической функции, потому что при генерации кода, генератор кода оптимизирует те неиспользованные входные параметры графической функции и не включает их в сгенерированный код.

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

Другие ограничения

  • Если симуляция модели возвращает ошибку, верификацию инспекции кода сбоев сгенерированного кода.

  • Если вы изменяете модель, заменяя блоки и смотрите код без первой регенерации его, сбоев инспекции кода. Например, если вы заменяете импорт или выходные порты модели, и смотрите код без первой регенерации его, ваша модель содержит импорт корневого уровня или выходной порт с идентификатором Simulink (SID), который не совпадает с SID импорта или блока выходного порта в модели. В результате сбои инспекции кода. Для получения дополнительной информации смотрите Идентификаторы Simulink

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

  • Если несовместимости в подмодели влияют на глобальные данные и инициализацию данных в топ-модели, Инспектору кода не удается проверить сгенерированный код для топ-модели.

  • Если пользовательский прототип функции приводит к несовместимости в подмодели, Инспектору кода не удается проверить сгенерированный код для топ-модели.

Похожие темы