Прежде чем вы сгенерируете код из модели, можно пошагово и итеративно использовать проверку совместимости для проверки совместимости модели с Simulink® Code Inspector™. Проверка совместимости обнаруживает и сообщает о проблемах совместимости на ранних этапах процесса разработки модели. Это раннее обнаружение значительно сокращает время и усилия, необходимые для достижения удовлетворительных результатов инспекции кода. Однако существуют образцы, когда Simulink Code Inspector не делает:
Обнаружите и сообщите о несовместимости модели.
Проверьте сгенерированный код с определенными свойствами.
Проверьте сгенерированный код, который теряет структурную эквивалентность с исходной моделью из-за исключения избыточных функциональных возможностей.
Когда вы работаете с Simulink Code Inspector, примите во внимание ограничения:
Существуют образцы, когда проверка совместимости не может обнаружить и сообщить о несовместимости модели с Simulink Code Inspector, что приводит к отказу инспекции кода.
Когда имена элементов модели или папок содержат символы, отличные от ASCII, инспекция кода прекращает работать. Simulink Code Inspector поддерживает модели, которые используют только символы ASCII для имен элементов и имен папок. Для примера:
Модель с именем model_itèr.slx
несовместим с инспекцией кода, поскольку содержит символ, отличный от ASCII.
Модель в папке C:/Modèles
несовместим с инспекцией кода, поскольку имя папки содержит символ, отличный от ASCII.
Когда объект интерполяционной таблицы инициализирует параметр маскированной подсистемы, инспекция кода прекращается, если имена параметра и объекта интерполяционной таблицы не совпадают. Simulink Code Inspector не обнаруживает это несоответствие как несовместимость, но не может просмотреть сгенерированный код. Чтобы обойти это ограничение, подтвердите, что параметр маскированной подсистемы и объект интерполяционной таблицы имеют одинаковое имя.
Когда вы устанавливаете параметр конфигурации модели Оптимизируйте порядок операции блока в сгенерированном коде (Embedded Coder) равным Improved Code Execution Speed
генератор кода изменяет порядок операции блока в сгенерированном коде, чтобы увеличить образцы повторного использования буфера. В результате это вызывает несоответствие между порядком операции блока симуляции модели и сгенерированным кодом. Проверка совместимости не обнаруживает несовместимость параметров конфигурации, но Code Inspector не может проверить сгенерированный код из-за этого несоответствия. Чтобы обойти это ограничение, установите параметр конфигурации модели Оптимизируйте порядок операции блока в сгенерированном коде (Embedded Coder) равным Off
.
В ссылочной модели, если начальные условия перечисляемого типа не имеют значения по умолчанию 0, Code Inspector не проверяет сгенерированный код. При использовании перечисляемого типа в ссылочной модели начальные условия перечисляемого типа должны иметь значение по умолчанию 0.
Если модель содержит блок из библиотеки Математическая операция, который принимает int
входной сигнал, преобразованный из логического сигнала, сгенерированный код из модели отказывает инспекции кода верификации.
Если модель имеет самомодифицируемую маскированную подсистему, которая добавляет или удаляет блоки, проверка совместимости может иметь непреднамеренное поведение.
Модель, которая содержит функцию шага с аргументом функции real-time model
несовместим с Code Inspector. Шаговая функция, которая использует аргумент функции real-time model
с упрощенным интерфейсом вызова совместим с инспекцией кода.
Если блоки, удаленные во время компиляции модели, имеют не автоматические классы памяти и не тестируются, сгенерированный код не инспекции кода верификации. Можно удалить блоки во время компиляции путем сокращения блоков.
Если модели генерируют код с отдельными функциями выхода и обновления, Code Inspector не может проверить сгенерированный код.
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 не может проверить сгенерированный код, который имеет определенные свойства.
В сгенерированном коде, если функция инициализации модели передает время выполнения в модель-ссылку, 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 в модели-ссылке, Code Inspector не проверяет код.
В сгенерированном коде, если размер локальных данных превышает размер стека, данные перемещаются в глобальную переменную и не инициализируются локально. Code Inspector не проверяет код.
Когда циклический поток управления Stateflow приводит к while
или do-while
в сгенерированном коде Simulink Code Inspector не может проверить код.
Simulink Code Inspector не может проверить сгенерированный код из моделей, которые имеют некоторые определенные шаблоны моделирования. Для примеров смотрите Шаблоны модели, которые могут привести к отказам верификации кода.
Из-за исключения избыточной функциональности модели в сгенерированном коде Simulink Code Inspector не может проверить, что исходная модель и оптимизированный сгенерированный код являются структурно эквивалентными. Чтобы обойти эти ограничения, избегайте использования избыточной функциональности в модели.
Если ваша модель содержит неиспользованные объекты Stateflow, инспекция кода прекращается. Например, Code Inspector не проверяет локальные переменные или параметры, определенные в возможности, если вы не используете их в диаграмме Stateflow.
При наличии неиспользованного входного порта в повторно используемую подсистему внутри подсистемы Code Inspector не проверяет сгенерированный код.
Simulink Code Inspector поддерживает верификацию неиспользуемых графических функций входов потому что во время генерации кода генератор кода оптимизирует те, что не используются входы графических функций и не включает их в сгенерированный код.
Если модели содержат Constant блока, которые используют постоянные шаги расчета, а матричные данные могут вызвать оптимизацию, которая устраняет блоки во время генерации кода. Инспектор кода не может проверить сгенерированный код.
Если симуляция модели возвращает ошибку, сгенерированный код падает инспекция кода верификации.
Если вы изменяете модель путем замены блоков и просматриваете код, не регенерируя его предварительно, инспекция кода прекращается. Например, если вы заменяете входные или выходные порты модели и просматриваете код, не регенерируя его предварительно, ваша модель содержит входной или выходной порт корневого уровня с идентификатором Simulink (SID), который не соответствует SID блока inport или outport в модели. В результате инспекция кода прекращается. Для получения дополнительной информации см. Раздел «Идентификаторы Simulink»
Если размер сигнала в вашей модели очень велик, он может исчерпать стек на вашей машине, что приводит к нарушению сегментации во время инспекции кода.
Если несовместимости в подмодели влияют на глобальные данные и инициализацию данных в верхней модели, Code Inspector не может проверить сгенерированный код для верхней модели.
Если прототип пользовательской функции приводит к несовместимости в подмодели, Code Inspector не может проверить сгенерированный код для верхней модели.