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