exponenta event banner

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

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

  • Обнаружение несовместимости моделей и создание отчетов о ней.

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

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

При работе с инспектором кода Simulink необходимо учитывать следующие ограничения:

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

Бывают случаи, когда средство проверки совместимости не может обнаружить несовместимость модели с Simulink Code Inspector и сообщить о ней, что приводит к сбою проверки кода.

  • Если имена элементов модели или папок содержат символы, отличные от ASCII, проверка кода завершается неуспешно. Simulink Code Inspector поддерживает модели, использующие только символы ASCII для имен элементов и папок. Например:

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

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

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

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

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

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

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

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

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

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

  • Инспектор кода Simulink поддерживает проверку coder.ceval функция в функциональных блоках MATLAB, которая позволяет модели вызывать функцию C/C + + из сгенерированного кода. Чтобы включить эту функцию, исходный файл C/C + + и файл заголовка определяются в параметрах конфигурации в разделе «Создание кода» > «Пользовательский код» > «Вставка пользовательского кода C в сгенерированном». В результате определения этих параметров проверка совместимости Проверка настроек генерации кода завершается неуспешно с нефатальным предупреждением. В этой ситуации Simulink Code Inspector проверяет эти модели, даже если они отказывают с нефатальным ограничением. Необходимо вручную просмотреть внешние файлы C/C + +, перечисленные в разделе Проверка Utils отчета Simulink Code Inspector.

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

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

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

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

В некоторых случаях инспектору кода Simulink не удается проверить созданный код, имеющий определенные свойства.

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

    {
    		<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> - имя ссылочной модели.

  • В сгенерированном коде, если функция инициализации модели передает сигнал запроса остановки в блок моделирования остановки в ссылочной модели, инспектор кода не проверяет код.

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

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

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

Инспектору кода Simulink не удается проверить созданный код из моделей с определенными шаблонами моделирования. Примеры см. в разделе Шаблоны моделей, которые могут привести к сбоям проверки кода.

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

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

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

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

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

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

  • Если моделирование модели возвращает ошибку, сгенерированный код не проходит проверку кода.

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

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

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

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

Связанные темы