Используйте проверки Embedded Coder ® Model Advisor для настройки модели для создания кода.
Код чека: mathworks.codegen.PCGSupport
Определите блоки, не поддерживаемые генерацией кода или не рекомендуемые для развертывания производственного кода C/C + +.
Эта проверка частично определяет конструкции модели, которые не рекомендуются для генерации производственного кода C/C + +. Для Simulink ® Coder™ и Embedded Coder эти идентификаторы конструкции модели отображаются в таблицах поддержки блоков Simulink .
В некоторых случаях эта проверка помечает блоки, которые поддерживаются для создания кода. Для этих блоков необходимо просмотреть сведения о сноске, содержащиеся в заметках поддержки, и выполнить рекомендованное действие, предоставленное менеджером модели.
Выполнение рекомендаций этой проверки повышает вероятность генерации кода, соответствующего стандартам CERT C, CWE и ISO/IEC TS 17961.
Поставляется с встроенным кодером и Simulink Check™.
| Состояние | Рекомендуемое действие |
|---|---|
| Модель или подсистема содержит блоки, которые не должны использоваться для развертывания производственного кода. | Рассмотрите возможность замены блоков, перечисленных в результатах. Щелкните элемент из списка сомнительных элементов, чтобы найти условие. |
| Модель или подсистема содержит блоки, которые поддерживаются, но не рекомендуются для создания производственного кода. | Просмотрите примечания по поддержке и следуйте рекомендациям, предоставленным менеджером модели. |
Вы можете:
Выполните эту проверку для моделей библиотек.
Анализ содержимого связанных с библиотекой блоков.
Анализ содержимого в маскированных подсистемах.
Исключение блоков и диаграмм при наличии лицензии Simulink Check.
Эта проверка поддерживается проверкой времени редактирования.
Код чека: mathworks.codegen.EfficientTunableParamExpr
Проверьте конфигурацию модели на наличие параметров оптимизации, которые могут повысить эффективность кода.
Эта проверка определяет параметры конфигурации модели, рекомендуемые для генерации производственного кода C/C + +. Для встроенного кодера эти параметры конфигурации модели повышают эффективность кода.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
| Оптимизация подавляет создание кода для защиты от переполнения целочисленных значений для выбранного настраиваемого выражения параметра. Выберите исключение кода насыщения. | Если имеется встроенный кодер и используется системный целевой файл на основе ERT, выберите Параметр конфигурации Удалить код из настраиваемых выражений параметров, насыщающих значения вне диапазона, или задайте параметр EfficientTunableParamExpr кому on. |
Оптимизация подавляет генерацию кода, который обрабатывает результаты преобразования с плавающей запятой в целое для NaN значения. Выберите исключение кода преобразования. | Если имеется встроенный кодер и используется системный целевой файл на основе ERT, выберите Параметр конфигурации Удалить код из преобразования с плавающей запятой в целое с насыщением, которое сопоставляет NaN нулю, или задайте параметр EfficientMapNaN2IntZero кому on. |
Если щелкнуть Изменить настройки (Modify Settings), настройки оптимизации модели могут повлиять на эффективность создания кода. Нет никаких проблем безопасности для:
Параметр Удалить код из настраиваемых выражений параметров, который насыщает значения вне диапазона, если моделирование содержит весь диапазон значений параметров, являющихся терминами настраиваемых выражений, и Simulink не генерирует предупреждение о насыщении.
Команда Удалить код из преобразования с плавающей запятой в целое с насыщением, которая сопоставляет параметр NaN нулю, если моделирование модели не содержит входного значения NaN.
Не выполняется для библиотечных моделей.
Не допускает исключения блоков или диаграмм.
Код чека: mathworks.codegen.LUTRangeCheckCode
Определите блоки таблицы поиска, которые генерируют код для защиты от выходящих за пределы диапазона входов для значений точек останова или индексов.
Эта проверка проверяет, что следующие блоки не генерируют код для защиты от входов, выходящих за пределы диапазона допустимых значений точек останова:
Эта проверка также проверяет, что блоки интерполяции с использованием Prelookup не генерируют код для защиты от входов, выходящих за пределы диапазона допустимых значений индекса.
Выполнение рекомендованных действий повышает эффективность выполнения и работы ПЗУ генерируемого кода.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
Блок таблицы поиска генерирует код проверки за пределами диапазона. | Измените настройку в диалоговом окне блока так, чтобы не создавался код проверки за пределами диапазона.
|
Вы можете:
Выполните эту проверку для моделей библиотек.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
Нажатие кнопки «Изменить» не позволяет блокам таблицы поиска создавать код проверки за пределами диапазона, что повышает эффективность создаваемого кода.
Эта проверка поддерживается проверкой времени редактирования.
Код чека: mathworks.codegen.LogicBlockUseNonBooleanOutput
Определение логических блоков, которые не используются boolean для типа выходных данных.
Эта проверка проверяет, что тип выходных данных следующих блоков: boolean:
Сравнить с константой
Сравнить с нулем
Обнаружить изменения
Обнаружить уменьшение
Обнаружить отрицательный спад
Обнаружение непозволительного падения
Обнаружить увеличение
Обнаружение неотрицательного подъема
Обнаружить положительный подъем
Тест интервала
Динамический тест интервала
Логический оператор
Реляционный оператор
Использование типа выходных данных boolean повышение эффективности выполнения генерируемого кода.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
Тип выходных данных логического блока не является boolean. | В диалоговом окне блока задайте для параметра «Тип выходных данных» значение boolean. |
Вы можете:
Выполните эту проверку для моделей библиотек.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
Обзор исключения Model Advisor (Simulink Check)
Нажатие кнопки «Изменить» вынуждает использовать логические блоки boolean в качестве типа выходных данных. Если используется логический блок uint8 для типа вывода, щелчок Изменить изменяет тип вывода на boolean.
Код чека: mathworks.codegen.HWImplementation
Определение несогласованных или недостаточно указанных параметров реализации оборудования
Программное обеспечение Simulink и Simulink Coder требуют двух наборов целевых спецификаций. Первый набор описывает конечную предполагаемую цель производства. Второй набор описывает текущий выбранный целевой объект. Если конфигурации не совпадают, генератор кода создает дополнительный код для эмуляции поведения производственного объекта. Несогласованность или недоопределение атрибутов оборудования может привести к неэффективной или неправильной генерации кода для целевого оборудования.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
| Для параметров реализации аппаратных средств не установлены рекомендуемые значения. | В диалоговом окне Configuration Parameters на панели Hardware Implementation укажите следующие параметры:
В диалоговом окне «Параметры конфигурации» задайте следующие параметры:
|
| Аппаратная реализация Параметры производственного оборудования не соответствуют параметрам тестового оборудования. | В диалоговом окне Configuration Parameters (Параметры конфигурации) рассмотрите возможность выбора параметра Test hardware (Тестирование оборудования) таким же образом, как и для производственного оборудования (ProdEqTarget) или измените параметры, чтобы они соответствовали. |
Код чека: mathworks.codegen.SWEnvironmentSpec
Определение сомнительных параметров программной среды.
Поддержка некоторых настроек программной среды может привести к неэффективному созданию кода и неоптимальным результатам.
Отраслевые стандарты для C, такие как ISO ® и MISRA ®, требуют, чтобы идентификаторы были уникальными в пределах первых 31 символов.
Диаграммы stateflow ® со слабыми типами данных ввода-вывода Simulink приводят к неэффективному кодированию.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
| Максимальная длина идентификатора не соответствует промышленным стандартам для C. | В диалоговом окне «Параметры конфигурации» на панели «Создание кода» > «Идентификаторы» задайте для параметра «Максимальная длина идентификатора» значение 31 персонажи. |
| В диалоговом окне «Параметры конфигурации» параметры на панели «Создание кода» > «Интерфейс» не имеют рекомендуемых значений. | В диалоговом окне «Параметры конфигурации» на панели «Создание кода» > «Интерфейс» снимите следующие параметры:
В диалоговом окне «Параметры конфигурации» снимите флажок «Поддержка неинлинированных S-функций». |
| В диалоговом окне «Параметры конфигурации» параметры на панели «Создание кода» > «Идентификаторы» не имеют рекомендуемых значений. | В диалоговом окне «Параметры конфигурации» на панели «Создание кода» > «Идентификаторы» задайте для параметра «Создать скалярные встроенные параметры» значение Literals. |
| В диалоговом окне «Параметры конфигурации» на панели «Создание кода» > «Интерфейс» выбран параметр «Поддержка сигналов переменного размера». Это может привести к неэффективному коду. | Если поддержка сигналов переменного размера не планируется, в диалоговом окне «Параметры конфигурации» на панели «Создание кода» > «Интерфейс» снимите флажок «Поддержка сигналов переменного размера». |
| Модель содержит диаграммы Stateflow со слабыми спецификациями типов данных ввода-вывода Simulink. | Выберите свойство диаграммы Stateflow Использовать строгий ввод данных с Simulink I/O. После выбора свойства может потребоваться скорректировать типы данных в модели. |
При использовании диаграмм Stateflow требуется лицензия Stateflow.
Сильная типизация данных с помощью Simulink Inputs and Outputs (поток состояния)
Код чека: mathworks.codegen.CodeInstrumentation
Определение сомнительного кода.
Инструментализация созданного кода может привести к неоптимальным результатам.
Контрольные точки требуют глобальной памяти и не являются оптимальными для создания производственного кода.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
| Параметры интерфейса не имеют рекомендуемых значений. | В диалоговом окне «Параметры конфигурации» на панели «Создание кода» > «Интерфейс» задайте рекомендуемые значения параметров. |
| Блоки генерируют код утверждения. | В диалоговом окне «Параметры конфигурации» задайте для блока «Проверка модели» значение Disable All поблочно или глобально. |
| Выходные сигналы блока имеют одну или несколько контрольных точек, и при наличии лицензии Embedded Coder флажок Игнорировать сигналы контрольных точек снимается в диалоговом окне Configuration Parameters. | Удалите контрольные точки из указанных выходных сигналов блока. Для каждого сигнала в диалоговом окне Signal Properties снимите флажок Test point. Кроме того, если модель использует системный целевой файл на основе ERT, установите флажок Игнорировать сигналы контрольных точек (Ignore test point signals) в диалоговом окне Параметры конфигурации (Configuration Parameters), чтобы игнорировать контрольные точки во время генерации кода. |
При наличии лицензии Simulink Check из этой проверки можно исключить блоки и диаграммы.
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.codegen.UseRowMajorAlgorithm
Определение блоков, генерирующих неэффективные алгоритмы.
Эта проверка определяет блоки, генерирующие неэффективные алгоритмы в сгенерированном коде на основе структуры массива модели.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
Параметру конфигурации Array layout присвоено значение Column-major для генерации основного кода столбца. | Отключите параметр конфигурации Используйте алгоритмы, оптимизированные для компоновки основного массива строк. |
Параметру конфигурации Array layout присвоено значение Row-major для генерации основного кода строки. | Выберите параметр конфигурации Use algoriths optimized for row-major array layout (Использовать алгорит |
Анализирует содержимое в маскированных подсистемах.
Код чека: mathworks.misra.CodeGenSettings
Определите параметры конфигурации, которые могут повлиять на создание кода, совместимого с MISRA C:2012.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
| Математика и типы данных | |
Параметр конфигурации Использовать деление для вычисления чистого уклона с фиксированной точкой не установлен в On или Use division for reciprocals of integers only. | Задать для параметра «Использовать деление» для расчета чистого уклона с фиксированной точкой значение On или Use division for reciprocals of integers only. |
Параметр конфигурации Inf или выход блока NaN имеет значение Параметр конфигурации Inf или выход блока NaN имеет значение | Если Поддержка неграничных чисел:
|
Параметр конфигурации Включение блока проверки модели имеет значение Use local settings или Enable All. | Установка блока проверки модели, позволяющего Disable All. |
Параметр конфигурации Undirected event broadcasts имеет значение none или warning. | Установка для широковещательных передач неориентированных событий значения error. |
Параметр конфигурации Wrap on overflow имеет значение None | Задайте для параметра конфигурации Wrap on overflow значение warning или error. |
| Внедрение аппаратных средств | |
Параметр конфигурации Производственное оборудование, подписанное целочисленными округами деления, имеет значение Undefined | Установить для производственного оборудования, подписанного целочисленными раундами деления, значение Zero или Floor. |
| Параметр конфигурации Shift справа от целого числа со знаком в качестве арифметического сдвига. | Снимите флажок «Сдвиг справа от целого числа со знаком» в качестве арифметического сдвига. |
| Цель моделирования | |
Параметр конфигурации Compile-time recursion limit для функций MATLAB имеет значение, отличное от 0. | Установить предел рекурсии времени компиляции для функций MATLAB в 0. |
| Параметр конфигурации Динамическое выделение памяти в функциях MATLAB. | Снимите флажок Динамическое выделение памяти в функциях MATLAB. |
| Выбран параметр конфигурации Включить рекурсию во время выполнения для функций MATLAB. | Снимите флажок Включить рекурсию во время выполнения для функций MATLAB. |
| Создание кода | |
Параметр конфигурации Спецификатор типа декларатора Bitfield имеет значение
| Установить спецификатор типа декларатора Bitfield в значение uint_T. |
Параметру конфигурации Режимы литья не присвоено значение Standards Compliant. | Задать для режимов литья значение Standards Compliant. |
Параметр конфигурации Библиотека замены кода не установлена в значение None или AUTOSAR 4.0. | Задать для библиотеки замены кода значение |
| Выбран параметр конфигурации Внешний режим. | Снимите флажок Внешний режим. |
| Выбран параметр конфигурации Генерировать общие константы. | Снимите флажок «Генерировать общие константы». |
Параметр конфигурации Include comments очищен. | Выберите Включить комментарии. |
| Выбран параметр конфигурации MAT-файл регистрации. | Очистка журнала файлов MAT |
| Для целевых систем на основе ERT параметр конфигурации MATLAB user comments очищается. | Выберите комментарии пользователя MATLAB. |
| Значение параметра конфигурации Максимальная длина идентификатора не указано. | Установите значение предела, зависящего от внедрения. Значение по умолчанию: 31. |
Параметр конфигурации Parenthesis level не имеет значение Maximum (Specify precedence with parentheses). | Установить уровень «Круглые скобки» в значение Maximum (Specify precedence with parentheses). |
Для целевых систем на основе ERT параметр конфигурации Preserve static keyword in function declarations очищается, если для параметра File packaging format установлено значение | Выберите Сохранить статическое ключевое слово в объявлениях функций. |
| Параметр конфигурации Замена умножения на мощности двух со знаком побитовых сдвигов. | Clear Заменить умножение на степени двух со знаком побитовых сдвигов. |
Параметр конфигурации Размещение общего кода имеет значение Auto. | Задать для параметра Размещение общего кода значение |
| Для целевых систем на основе ERT выбран параметр конфигурации Поддержка непрерывного времени | Очистить время непрерывной поддержки. |
| Для целевых систем на базе ERT выбран параметр конфигурации Support non-inlined S-functions | Снимите флажок Поддерживать неинлинированные S-функции. |
Параметр конфигурации Системные идентификаторы имеют значение Classic. | Установите системные идентификаторы в значение Shortened. |
| Параметр конфигурации Системный целевой файл установлен в целевой файл на основе GRT. | Установите системный целевой файл в целевой файл на основе ERT. |
Параметр конфигурации Использовать динамическое выделение памяти для инициализации модели выбирается, если для параметра Code Interface Packaging установлено значение Reusable Function. | Снимите флажок Использовать динамическое выделение памяти для инициализации модели. Примечание Выбор осуществляется только в том случае, если для параметра «Упаковка интерфейса кода» установлено значение |
При нажатии кнопки Изменить все значения параметров изменяются на рекомендуемые значения.
Примечание
При нажатии кнопки Изменить все (Modify All) для моделей с целевым объектом на основе GRT мастер моделей не обновляет параметр конфигурации целевого файла системы в системе на основе ERT.
Подчеки параметров зависят от результатов параметра, отмеченного буквой D в таблице результатов. Если результатом является D-Warning, столбец Текущее значение (Current Value) в таблице результатов указывает на то, что условное ограничение не соблюдается для подчек. После изменения параметра повторно запустите проверку.
Примечание
Некоторые подчеки специфичны для параметров конфигурации систем на основе ERT. Эти параметры не обновляются при нажатии кнопки Изменить все (Modify All), если модель не изменена на систему на основе ERT.
Эта проверка не проверяет ссылочные модели.
Код чека: mathworks.misra.BlkSupport
Определите блоки, которые не поддерживаются или не рекомендуются для создания кода, совместимого с MISRA C:2012.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
В модели или подсистеме найдены блоки таблицы подстановки, использующие методы интерполяции или экстраполяции кубических сплайнов. Конкретными блоками являются:
| Рассмотрим другие методы интерполяции и экстраполяции для блоков таблицы поиска. |
Устаревшие блоки таблицы подстановки найдены в модели или подсистеме. Конкретными блоками являются:
| Попробуйте заменить устаревшие блоки таблицы подстановки. |
| Блоки S-Function Builder были найдены в модели или подсистеме. | Рекомендуется заменить блоки S-Function Builder блоками, рекомендуемыми для производства. |
| Из рабочей области в модели или подсистеме найдены блоки | Попробуйте заменить блоки «Из рабочей области» блоками, рекомендованными для производства. |
Строковые блоки найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите возможность замены блоков String блоками, рекомендованными для производства. |
Вы можете:
Выполните эту проверку для моделей библиотек.
Анализ содержимого связанных блоков библиотеки.
Анализирует содержимое в маскированных подсистемах.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
Проверка времени редактирования. Эта проверка поддерживается проверкой времени редактирования.
Код чека: mathworks.misra.BlockNames
Определение имен блоков, содержащих /.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
Имена блоков, содержащие / были найдены в модели или подсистеме. | Удалить / из имени блока. |
Выполняется для библиотечных моделей.
Анализ содержимого связанных блоков библиотеки.
Анализирует содержимое в маскированных подсистемах.
При наличии лицензии Simulink Check позволяет исключать блоки и диаграммы.
Проверка времени редактирования. Эта проверка поддерживается проверкой времени редактирования.
MISRA C:2012, Правило 3.1
Код чека: mathworks.misra.AssignmentBlocks
Определите блоки назначения, не имеющие параметра блока Действие, если какому-либо выходному элементу не присвоено значение Ошибка или Предупреждение.
Эта проверка применяется к блоку Назначение (Assignment), который доступен в библиотеке блоков Simulink по пути Simulink > Математические операции (Math Operations).
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений, а также кода, соответствующего стандартам CERT C, CWE, ISO/IEC TS 17961.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
| Модель или подсистема может содержать блоки Assignment с неполной инициализацией массива, которые не имеют параметра block Action, если какому-либо выходному элементу не присвоено значение Error или Warning. | Задайте параметр блока Действие, если какому-либо выходному элементу не присвоено одно из рекомендуемых значений:
|
Выполняется для библиотечных моделей.
Анализ содержимого связанных блоков библиотеки.
Анализирует содержимое в маскированных подсистемах.
При наличии лицензии Simulink Check позволяет исключать блоки и диаграммы.
Проверка времени редактирования. Эта проверка поддерживается проверкой времени редактирования. Однако следующее условие проверки не поддерживается, поскольку проверка времени редактирования не может определить, находится ли блок Assignment в подсистеме Iterator.
Задайте параметр блока Действие, если какому-либо выходному элементу не присвоено одно из рекомендуемых значений:
Ошибка, если блок Assignment отсутствует в подсистеме Iterator.
Предупреждение, если блок Assignment находится в подсистеме Iterator.
MISRA C:2012, правило 9.1
ISO/IEC TS 17961:2013, uninitref
CERT C, EXP33-C
CWE, CWE-908
Код чека: mathworks.misra.SwitchDefault
Определите выражения вариантов переключения, которые не имеют вариантов по умолчанию.
Флажок помечает объекты модели, имеющие выражения вариантов переключения без варианта по умолчанию.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений, а также кода, соответствующего стандартам CERT C, CWE, ISO/IEC TS 17961.
Проверка не помечает блоки без случаев по умолчанию, если они выровнены с помощью аннотации Polyspace ®. При выполнении проверки в таблице Блоки с выравниванием (Blocks with justification) перечислены блоки без вариантов по умолчанию, которые имеют выравнивание.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
Объект модели имеет выражение регистра переключения без регистра по умолчанию. | Для блоков «Вариант переключения» рекомендуется выбрать параметр блока «Показать вариант по умолчанию», чтобы явно указать вариант по умолчанию. |
Вы можете:
Выполните эту проверку для моделей библиотек.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
Проверка времени редактирования. Эта проверка поддерживается проверкой времени редактирования.
MISRA C:2012, правило 16.4
ISO/IEC TS 17961:2013, swtchdflt
CERT C, MSC01-C
CWE, CWE-478
Аннотирование кода и скрытие известных или приемлемых результатов (Polyspace Bug Finder)
Код чека: mathworks.misra.AutosarReceiverInterface
Определите входные данные интерфейса приемника AUTOSAR, которые не имеют соответствующих портов ошибок.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений. Флажок помечает входы интерфейсов приемника AUTOSAR, в которых отсутствуют порты ошибок. В следующей таблице указаны типы режимов доступа к данным AUTOSAR для портов интерфейса приемника, отмеченных при проверке при отсутствии соответствующего порта ошибки.
| Тип режима доступа к данным AUTOSAR | Помечено чеком? |
|---|---|
ImplicitReceive | Да |
ExplicitReceive | Да |
QueuedExplicitReceive | Нет |
ErrorStatus | Нет |
ModeReceive | Нет |
IsUpdated | Нет |
EndToEndRead | Да |
ExplicitReceiveByVal | Нет |
otherwise | Нет |
Проверка не помечает отсутствующие порты ошибок, если они выровнены с аннотацией Polyspace. При выполнении проверки в таблице Блоки с выравниванием (Blocks with justigation) перечислены отсутствующие порты ошибок, имеющие выравнивание.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
|
Входной порт интерфейса приемника AUTOSAR не имеет соответствующего порта ошибки. |
Добавьте отсутствующий порт ошибки и сопоставьте его с соответствующим входным портом интерфейса приемника AUTOSAR. |
Порты интерфейса приемника AUTOSAR не имеют соответствующего порта ошибки, если режим доступа к данным ImplicitReceive, ExplicitReceive, или EndToEndRead. | Добавьте отсутствующий порт ошибки и сопоставьте его с соответствующим входным портом интерфейса приемника AUTOSAR. |
Вы можете:
Анализ моделей верхнего уровня/корневых уровней.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
MISRA C: 2012, Директива 4.7
Обзор исключения Model Advisor (Simulink Check)
Аннотирование кода и скрытие известных или приемлемых результатов (Polyspace Bug Finder)
Настройка элементов и свойств AUTOSAR (блок AUTOSAR)
Конфигурация компонента AUTOSAR (блок AUTOSAR)
Код чека: mathworks.misra.BusElementNames
Определите имена объектов шины, которые используются в качестве имен элементов шины.
Использование этой проверки повышает вероятность создания кода для встраиваемых приложений, совместимых с MISRA C:2012. Флажок помечает экземпляры, в которых имя объекта Simulink.Bus используется в качестве имени элемента Simulink.Bus.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
| Имя объекта шины используется в качестве имени элемента шины. | Измените либо имя помеченного объекта шины, либо имя элемента шины, чтобы они не были идентичными. |
MISRA C:2012, правило 5.6
MISRA AC AGC, Правило 5.3
Код чека: mathworks.security.CodeGenSettings
Определение параметров конфигурации, которые могут повлиять на соответствие стандартам безопасного кодирования.
Выполнение рекомендаций этой проверки повышает вероятность генерации кода, соответствующего стандартам безопасного кодирования CERT C, CWE, ISO/IEC TS 17961.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
| Диагностика | |
Параметр конфигурации Inf или выход блока NaN имеет значение Параметр конфигурации Inf или выход блока NaN имеет значение | Если Поддержка неграничных чисел:
|
Параметр конфигурации Включение блока проверки модели имеет значение Use local settings или Enable All. | Установка блока проверки модели, позволяющего Disable All. |
Параметр конфигурации Undirected event broadcasts имеет значение none или warning. | Установка для широковещательных передач неориентированных событий значения error. |
Параметр конфигурации Wrap on overflow имеет значение none. | Установить значение Wrap при переполнении warning или error. |
| Внедрение аппаратных средств | |
Параметр конфигурации Производственное оборудование, подписанное целочисленными округами деления, имеет значение Undefined. | Установить для производственного оборудования, подписанного целочисленными раундами деления, значение Zero или Floor. |
| Параметр конфигурации Shift справа от целого числа со знаком в качестве арифметического сдвига. | Снимите флажок «Сдвиг справа от целого числа со знаком» в качестве арифметического сдвига. |
| Цель моделирования | |
Параметр конфигурации Compile-time recursion limit для функций MATLAB имеет значение, отличное от 0. | Установить предел рекурсии времени компиляции для функций MATLAB в 0. |
| Параметр конфигурации Динамическое выделение памяти в функциях MATLAB. | Снимите флажок Динамическое выделение памяти в функциях MATLAB. |
| Выбран параметр конфигурации Включить рекурсию во время выполнения для функций MATLAB. | Снимите флажок Включить рекурсию во время выполнения для функций MATLAB. |
| Создание кода | |
Параметр конфигурации Библиотека замены кода не установлена в значение None или AUTOSAR 4.0. | Задать для библиотеки замены кода значение None или AUTOSAR 4.0. |
| Выбран параметр конфигурации Внешний режим. | Снимите флажок Внешний режим. |
Параметр конфигурации Include comments очищен. | Выберите Включить комментарии. |
| Выбран параметр конфигурации MAT-файл регистрации. | Очистить журнал MAT-файлов. |
| Для целевых систем на основе ERT параметр конфигурации MATLAB user comments очищается. | Выберите комментарии пользователя MATLAB. |
| Параметр конфигурации Замена умножения на мощности двух со знаком побитовых сдвигов. | Clear Заменить умножение на степени двух со знаком побитовых сдвигов. |
| Для целевых систем на основе ERT выбран параметр конфигурации Поддержка непрерывного времени | Очистить время непрерывной поддержки. |
| Для целевых систем на базе ERT выбран параметр конфигурации Support non-inlined S-functions | Снимите флажок Поддерживать неинлинированные S-функции. |
| Параметр конфигурации Системный целевой файл установлен в целевой файл на основе GRT. | Установите системный целевой файл в целевой файл на основе ERT. |
| Параметр конфигурации Используется динамическое выделение памяти для инициализации модели. | Снимите флажок Использовать динамическое выделение памяти для инициализации модели. Примечание Выбор осуществляется только в том случае, если для параметра «Упаковка интерфейса кода» установлено значение |
При нажатии кнопки Изменить все значения параметров изменяются на рекомендуемые значения.
Примечание
При нажатии кнопки Изменить все (Modify All) для моделей с целевым объектом на основе GRT мастер моделей не обновляет параметр конфигурации целевого файла системы в системе на основе ERT.
Подчеки параметров зависят от результатов параметра, отмеченного буквой D в таблице результатов. Если результатом является D-Warning, столбец Текущее значение (Current Value) в таблице результатов указывает на то, что условное ограничение не соблюдается для подчек. После изменения параметра повторно запустите проверку.
Примечание
Некоторые подчеки специфичны для параметров конфигурации систем на основе ERT. Эти параметры не обновляются при нажатии кнопки Изменить все (Modify All), если модель не изменена на систему на основе ERT.
Код чека: mathworks.security.BlockSupport
Определение блоков, не рекомендованных для соответствия стандартам безопасного кодирования.
Выполнение рекомендаций этой проверки повышает вероятность генерации кода, соответствующего стандартам безопасного кодирования CERT C, CWE, ISO/IEC TS 17961.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
В модели или подсистеме найдены блоки таблицы подстановки, использующие методы интерполяции или экстраполяции кубических сплайнов. Конкретными блоками являются:
| Рассмотрим другие методы интерполяции и экстраполяции для блоков таблицы поиска. |
Устаревшие блоки таблицы подстановки найдены в модели или подсистеме. Конкретными блоками являются:
| Попробуйте заменить устаревшие блоки таблицы подстановки. |
| Блоки S-Function Builder были найдены в модели или подсистеме. | Рекомендуется заменить блоки S-Function Builder блоками, рекомендуемыми для производства. |
| Из рабочей области в модели или подсистеме найдены блоки | Попробуйте заменить блоки «Из рабочей области» блоками, рекомендованными для производства. |
Строковые блоки найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите возможность замены блоков String блоками, рекомендованными для производства. |
Вы можете:
Выполните эту проверку для моделей библиотек.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
Проверка времени редактирования. Эта проверка поддерживается проверкой времени редактирования.
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.codegen.QuestionableSubsysSetting
Определение сомнительных параметров блока подсистемы.
Блоки подсистемы, реализованные как функции void-void в сгенерированном коде, используют глобальную память для хранения ввода-вывода подсистемы.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
Для блоков подсистем опция Subsystem Parameters > Function packaging имеет значение Nonreusable function. | Установите для параметра Subsystem Parameters > Function packaging значение Auto. |
Для блоков подсистем опция Subsystem Parameters > Function packaging имеет значение Reusable function. | Установите для параметра Subsystem Parameters > Function packaging значение Auto. |
При наличии лицензии Simulink Check из этой проверки можно исключить блоки и диаграммы.
Блок подсистемы
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.codegen.RowMajorCodeGenSupport
Проверка наличия блоков, не поддерживаемых для генерации кода основной строки.
Эта проверка определяет блоки, которые не поддерживаются для генерации основного кода строки.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
| Модель взаимодействует с внешними данными, находящимися в макете основного массива строк. | Задайте для параметра конфигурации Array layout значение Row-major. |
Анализирует содержимое в маскированных подсистемах.
Код чека: mathworks.codegen.RowMajorUnsetSFunction
Идентификация S-функций TLC с неснятой компоновкой массива.
Эта проверка идентифицирует S-функции, которые имеют SSArrayLayout установить в значение SS_UNSET. По умолчанию каждая S-функция имеет SSArrayLayout свойство имеет значение SS_UNSET. Этот параметр отключает S-функцию для генерации кода основной строки. Если параметру конфигурации Array layout присвоено значение Row-majorEmbedded Coder сообщает об ошибке. Можно отключить ошибку, изменив совместимость внешних функций для генерации основного кода строки на warning или none.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
Параметру конфигурации Array layout присвоено значение Column-major для генерации основного кода столбца. | Установите SSArrayLayout свойство для Column-major. |
Параметру конфигурации Array layout присвоено значение Row-major для генерации основного кода строки. | Установите SSArrayLayout свойство для Row-major. |
Анализирует содержимое во всех маскированных подсистемах.
Код чека: mathworks.codegen.BlockSpecificQuestionableFxptOperations
Определение операций с фиксированной точкой, которые могут привести к неоптимальным результатам.
Определенные настройки блоков могут привести к дорогим кодам с фиксированной точкой и насыщением.
| Условия | Рекомендуемое действие |
|---|---|
| Блоки генерируют дорогостоящий код насыщения. | Проверьте, требуется ли для приложения настройка параметров функционального блока > Атрибуты сигнала > Насыщение при переполнении целых чисел. В противном случае очистите параметр Saturate on integer overflow для наиболее эффективной реализации блока в сгенерированном коде. |
| Блоки произведения являются перемножающими сигналами с несовпадающими коэффициентами регулировки наклона. Вычисление чистого наклона использует умножение, за которым следуют сдвиги, что неэффективно для некоторых целевых аппаратных средств. | Задайте для параметра «Оптимизация» > «Использовать деление для расчета чистого откоса с фиксированной точкой» значение Примечание Эта оптимизация выполняется только при соблюдении определенных условий простоты и точности. Дополнительные сведения см. в разделе Расчет чистого уклона (конструктор фиксированных точек). |
| Блоки продуктов сконфигурированы с операцией деления для первого входа и операцией умножения для второго входа. | Обращение входных сигналов таким образом, что операция умножения происходит первой, а операция деления - второй. |
| Блоки продуктов сконфигурированы для выполнения нескольких операций разделения. | Умножьте все члены знаменателя вместе, а затем выполните одно деление с помощью каскадных блоков Product. |
| Блоки продуктов сконфигурированы для выполнения множества операций умножения или деления. | Разделение операций по нескольким блокам, при этом каждый блок выполняет одну операцию умножения или одну операцию деления. |
| Код защиты, генерируемый в рамках операции разделения, является избыточным. | Убедитесь, что модель не может вызывать исключения в операциях разделения, а затем удалите избыточный код защиты, задав параметр Optimization (Оптимизация) > Remove code (Удалить код), который защищает от арифметических исключений разделения в диалоговом окне Configuration Parameters (Параметры конфигурации). |
| Диапазон типов данных входов блоков Sum превышает диапазон типов данных вывода, что может вызвать переполнение или насыщение. | Измените типы выходных и накопительных данных таким образом, чтобы диапазон равнялся или превышал все входные диапазоны. Например, если модель имеет два входа
Диапазон типов данных выхода и накопителя должен быть равен или превышать -128 до 255. A |
| Блок суммы имеет вход с поправочным коэффициентом наклона, который не равен регулировочному коэффициенту наклона выхода. | Измените типы данных таким образом, чтобы входы, выходы и аккумулятор имели одинаковый коэффициент регулировки наклона. |
| Чистая сумма входных смещений блока Sum не равна смещению выходного сигнала. | Измените смещение выходного масштабирования, сделав чистую корректировку смещения нулевой. |
| Входные и выходные данные блока MinMax имеют различные типы данных. | Измените тип данных ввода или вывода. |
| На входе блока MinMax коэффициент регулировки наклона отличается от коэффициента на выходе. | Измените масштаб ввода или вывода. |
| Исходное состояние блока интегратора дискретного времени используется для инициализации как состояния, так и выходного сигнала. | Установите для параметра Function Block Parameters > Initial condition setting значение State (most efficient). |
| Для блока Сравнить с нулем (Compare to Zero) произошло переполнение параметра. Этот блок использует тип входных данных для представления нуля. Входной тип данных не может точно представлять нуль, поэтому входное значение сравнивалось с ближайшим представимым значением ноля. | Выберите тип входных данных, который может представлять ноль. |
| Переполнение параметра произошло для следующего блока Compare to Constant. Этот блок использует тип входных данных для представления параметра Constant value. Параметр Constant value находится вне диапазона, который может представлять тип входных данных. Входной сигнал сравнивали с ближайшим представимым значением параметра Constant value. | Выберите тип входных данных, который может представлять параметр Constant value, или измените параметр Constant value в соответствии с типом входных данных. |
Для создания кода с фиксированной точкой требуется лицензия Fixed-Point Designer™.
При наличии лицензии Simulink Check из этой проверки можно исключить блоки и диаграммы.
Определение блоков, генерирующих дорогостоящий код с фиксированной точкой и код насыщения (конструктор с фиксированной точкой)
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.misra.ModelFunctionInterface
Определите отсутствующие квалификаторы констант во входных указателях данных.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений. Флажок помечает указатели входных данных, не имеющие квалификатора const.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
| Квалификатор const не определен для указателя входных данных. | Попробуйте добавить квалификатор константы к указателю входных данных. |
MISRA C:2012, правило 8.13
Код чека: mathworks.codegen.QuestionableFxptOperations
Определение операций с фиксированной точкой, которые могут привести к неоптимальным результатам.
Менее эффективный код может быть результатом блоков, которые генерируют громоздкие операции умножения и деления, дорогостоящий код преобразования, неэффективность в блоках таблицы поиска и дорогостоящий код сравнения.
| Условия | Рекомендуемое действие |
|---|---|
| Код, созданный с целочисленным разделением, велик. | В диалоговом окне Configuration Parameters (Параметры конфигурации) на панели Hardware Implementation (Аппаратная реализация) задайте для параметра Production hardware signed integer division rounds значение рекомендуемого значения. |
| Вектор таблицы подстановки входных значений распределен неравномерно. | Если данные точек останова не могут быть настроены, настройте данные таким образом, чтобы они имели четное значение, равное 2 интервалам. Посмотрите fixpt_look1_func_approx. |
| Вектор таблицы поиска входных значений не равномерно распределяется при квантовании, но он очень близок к равномерному разнесению. | Если данные точек останова не могут быть настроены, настройте данные таким образом, чтобы они имели четное значение, равное 2 интервалам. Посмотрите fixpt_evenspace_cleanup. |
| Поиск Вектор таблицы входных значений равномерно разнесен, но интервал не равен степени 2. | Если данные точек останова не могут быть настроены, настройте данные таким образом, чтобы они имели четное значение, равное 2 интервалам. Посмотрите fixpt_look1_func_approx. |
Для блока таблицы поиска Prelookup или n-D метод поиска индекса Evenly spaced points. Данные точки останова не имеют значения 2 интервала. | Если данные точек останова не могут быть настроены, настройте данные таким образом, чтобы они имели четное значение, равное 2 интервалам. В противном случае в диалоговом окне параметров блока укажите другой метод поиска «Индекс», чтобы избежать интенсивной операции деления. |
n-D Данные точки останова таблицы подстановки не расположены равномерно, а метод поиска индекса не Evenly spaced points. | Если данные точки останова не могут быть настроены, настройте данные, чтобы они имели четный интервал в 2, а затем задайте для метода поиска Index значение Evenly spaced points. |
n-D Данные точки останова таблицы подстановки равномерно разнесены, а метод поиска индекса - Evenly spaced points. Но интервал не является степенью 2. | Если данные точек останова не могут быть настроены, настройте данные таким образом, чтобы они имели четное значение, равное 2 интервалам. Посмотрите fixpt_look1_func_approx. |
n-D Данные точек останова таблицы подстановки равномерно разнесены, но интервал не равен 2. Кроме того, метод индексного поиска не является Evenly spaced points. | Задать для метода поиска Index значение Evenly spaced points. Кроме того, если данные не настраиваются, рассмотрим четную степень 2 интервала. |
n-D Данные точек останова таблицы подстановки равномерно разнесены, а интервал равен 2. Но метод поиска Index не является Evenly spaced points. | Задать для метода поиска Index значение Evenly spaced points. |
| Блоки требуют многословных операций в сгенерированном коде. | Отрегулируйте длины входных слов для операций таким образом, чтобы они не превышали наибольший размер текста процессора. Дополнительные сведения см. в разделе Многословные операции с фиксированной точкой в сгенерированном коде (Конструктор с фиксированной точкой). |
| Блоки требуют громоздкого умножения. |
Ограничить операции умножения:
|
| Блоки произведения являются перемножающими сигналами с несовпадающими коэффициентами регулировки наклона. | Измените масштаб выходного сигнала таким образом, чтобы его коэффициент регулировки наклона был результатом входных коэффициентов регулировки наклона. |
| Блоки умножают сигналы с ненулевым смещением. | Вставка блока преобразования типа данных до и после блока, содержащего операцию умножения. |
| Входы блока реляционного оператора имеют различные типы данных. |
|
| Входы блока реляционного оператора имеют различные коэффициенты регулировки наклона. | Измените масштаб любого входного сигнала. |
| Выходной сигнал блока реляционного оператора является постоянным. Это может привести к мертвому коду, который будет исключен Simulink Coder. | Просмотрите проект модели и либо удалите блок Relational Operator, либо замените его константой. |
Для создания кода с фиксированной точкой требуется лицензия Fixed-Point Designer.
При наличии лицензии Simulink Check из этой проверки можно исключить блоки и диаграммы.
Определение сомнительных операций с фиксированными точками (конструктор фиксированных точек)
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.codegen.ExpensiveSaturationRoundingCode
Проверьте наличие блоков, генерирующих дорогостоящий код округления.
Созданный код округления неэффективен из-за настройки параметра режима целочисленного округления.
Доступно с встроенным кодером.
| Состояние | Рекомендуемое действие |
|---|---|
| Созданный код неэффективен. | Установите рекомендуемое значение параметра Режим целочисленного округления "Function Block Parameters" (Параметры функционального блока) > "Integer rounding mode |
При наличии лицензии Simulink Check из этой проверки можно исключить блоки и диаграммы.
Определение блоков, генерирующих дорогостоящий код округления (конструктор фиксированных точек)
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.misra.CompliantCGIRConstructions
Определите блоки Simulink, содержащие побитовые операции со подписанными целыми числами.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений, а также кода, соответствующего стандартам CERT C и CWE.
Доступно с встроенным кодером и Simulink Check.
Для этой проверки требуется лицензия Stateflow, если в модели используется Stateflow.
| Состояние | Рекомендуемое действие |
|---|---|
| Модель содержит блоки, содержащие побитовые операции со подписанными целыми числами. | Рекомендуется использовать целые числа без знака для побитовых операций. |
Вы можете:
Проверка предполагает, что код создается для всей модели. При создании кода функциями сборки или экспорта подсистемы проверка может привести к неправильным результатам.
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, правило 10.1
CERT C, INT13-C
CWE, CWE-682
hisl_0060: Параметры конфигурации, улучшающие соответствие MISRA C:2012
Код чека: mathworks.misra.RecursionCompliance
Определение рекурсивных вызовов функций в диаграммах Stateflow.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений. Флажок помечает диаграммы, имеющие рекурсивные вызовы функций.
Доступно с встроенным кодером и Simulink Check.
Для этой проверки требуется лицензия Stateflow.
| Состояние | Рекомендуемое действие |
|---|---|
Диаграмма имеет рекурсивный вызов функции. | Удаление рекурсивного вызова функции. |
MISRA C:2012, правило 17.2
Избежать нежелательной рекурсии в диаграмме (поток состояний)
Код чека: mathworks.misra.CompareFloatEquality
Определение операций равенства и неравенства для значений с плавающей запятой.
Флажок помечает источники, вызывающие операции равенства или неравенства для значений с плавающей запятой.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений, а также кода, соответствующего стандартам CERT C и CWE.
Проверка не помечает блоки с операциями равенства или неравенства для значений с плавающей запятой, если они выровнены с помощью аннотации Polyspace. При выполнении проверки в таблице Блоки с выравниванием (Blocks with justification) перечислены блоки с операциями равенства или неравенства, которые имеют выравнивание.
Доступно с встроенным кодером и Simulink Check.
Для этой проверки требуется лицензия Stateflow.
| Состояние | Рекомендуемое действие |
|---|---|
Объект модели имеет операцию равенства или неравенства для значения с плавающей запятой. | Рассмотрите возможность использования значений без плавающей точки для операций равенства или неравенства. |
Вы можете:
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, Dir 1.1
CERT C, FLP00-C
CWE, CWE-697
Аннотирование кода и скрытие известных или приемлемых результатов (Polyspace Bug Finder)
Код чека: mathworks.misra.IntegerWordLengths
Определение целочисленных длин слов, не соответствующих параметрам реализации оборудования
Флажок помечает целые числа, длина слов которых превышает число битов, разрешенных в настройках реализации аппаратных средств.
Выполнение рекомендаций этой проверки повышает вероятность создания кода, соответствующего MISRA C:2012, для встраиваемых приложений, а также кода, соответствующего стандартам CERT C и CWE.
Доступно с встроенным кодером и Simulink Check.
| Состояние | Рекомендуемое действие |
|---|---|
|
Объект модели содержит целочисленные длины слов, которые не соответствуют параметрам реализации оборудования. |
Обновите целое число, чтобы его длина не превышала допустимое число битов. Разрешенное количество битов можно просмотреть в диалоговом окне Configuration Parameters на панели Hardware Implementation > Device details. |
Вы можете:
Исключите блоки и диаграммы из этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, правило 10.1
CERT C, INT13-C
CWE, CWE-682
Обзор исключения Model Advisor (Simulink Check)
Код чека: mathworks.codegen.BlockNames
Проверяет, содержат ли имена блоков в панели «Перспектива кода» недопустимые символы.
Эта проверка времени редактирования оценивает имена блоков на панели «Перспектива кода». Проверка сообщает о недопустимых символах в именах блоков, за исключением:
Блоки, которые игнорируются или не рекомендуются для создания кода
Блоки виртуальной подсистемы
Проверка проверяет соответствие имен блоков следующим инструкциям:
Форма:
имя:
Не начинается с числа
Не включает пробелы в начале имени блока
Не использует двухбайтовые символы
Возврат каретки разрешен
Разрешенные символы:
имя:
a b d f g h i k l m n o p q r s t u v w x y z
A B C D E F G H I J L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 _
| Состояние | Рекомендуемое действие |
|---|---|
Имя блока на панели «Перспектива кода» не соответствует инструкциям. | Обновите имя блока в соответствии с инструкциями. |
Выполняется для библиотечных моделей.
Анализ содержимого связанных с библиотекой блоков.
Анализирует содержимое в маскированных подсистемах.
Допускает исключения блоков и диаграмм.