Используйте проверки Embedded Coder® Model Advisor, чтобы сконфигурировать вашу модель для генерации кода.
Осуществите проверки Model Advisor (Simulink)
Simulink Check (Simulink)
Simulink Coder проверяет (Simulink Coder)
ID проверки: mathworks.codegen.PCGSupport
Идентифицируйте блоки, не поддержанные генерацией кода или не рекомендуемые для производственного развертывания C/C++ кода.
Эта проверка частично идентифицирует построения модели, которые не рекомендуются для генерации производственного кода C/C++. Для Simulink® Coder™ и Embedded Coder, эти тождества построения модели появляются в таблицах Поддержки блока Simulink (Simulink Coder). Если вы используете блоки с примечаниями поддержки для генерации кода, рассматриваете информацию и следуете данному совету.
Доступный с Simulink Check™ и Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Модель или подсистема содержат блоки, которые не должны использоваться в производственном развертывании кода. | Рассмотрите заменяющий блоки перечисленный в результатах. Кликните по элементу из списка сомнительных элементов, чтобы определить местоположение условия. |
Вы можете:
Осуществите эту проверку своих моделей библиотеки.
Анализирует содержимое соединенных блоков библиотеки.
Анализирует содержимое в подсистемах маскированных.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
Блоки и продукты, поддержанные для генерации кода (Simulink Coder)
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.codegen.EfficientTunableParamExpr
Проверяйте настройку модели на настройки оптимизации, которые могут повысить эффективность кода.
Эта проверка идентифицирует параметры конфигурации модели, которые рекомендуются для генерации производственного кода C/C++. Для Embedded Coder эти параметры конфигурации модели повышают эффективность кода.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Оптимизация подавляет генерацию кода, чтобы принять меры против целочисленного переполнения для выражения настраиваемого параметра, которое вы выбираете. Выберите устранение насыщения кода. | Если вы Встроили Coderand, используют основанный на ERT системный конечный файл, выбирают Configuration Parameter Remove Code from Tunable Parameter Expressions That Saturate Out-of-Range Values (Simulink Coder) или устанавливают параметр EfficientTunableParamExpr к on . |
Оптимизация подавляет генерацию кода, которая обрабатывает с плавающей точкой к целочисленным результатам преобразования для NaN значения. Выберите устранение кода преобразования. | Если вы имеете Embedded Coder и используете основанный на ERT системный конечный файл, выберите код Configuration Parameter Remove от с плавающей точкой до целочисленных преобразований с насыщением, которое сопоставляет NaN, чтобы обнулить (Simulink Coder) или установить параметр EfficientMapNaN2IntZero к on . |
Нажатие на Modify Settings конфигурирует настройки оптимизации модели, может повлиять на КПД генерации кода. Нет никаких опасений безопасности о:
Параметр Remove code from tunable parameter expressions that saturates out-of-range values, если ваша симуляция содержит целую область значений значений для параметров, которые являются условиями настраиваемых выражений и Simulink, не генерирует предупреждение насыщения.
Параметр Remove code from floating-point to integer conversions with saturation that maps NaN to zero, если ваша симуляция модели не содержит входное значение NaN.
Не работает на моделях библиотеки.
Не позволяет исключения блоков или графиков.
ID проверки: mathworks.codegen.LUTRangeCheckCode
Идентифицируйте блоки интерполяционной таблицы, которые генерируют код, чтобы защитить от входных параметров из области значений для значений точки останова или индекса.
Эта проверка проверяет, что следующие блоки не генерируют код, чтобы защитить от входных параметров, которые выходят за пределы области значений допустимых значений точки останова:
Эта проверка также проверяет, что блоки Interpolation Using Prelookup не генерируют код, чтобы защитить от входных параметров, которые выходят за пределы области значений допустимых значений индекса.
После рекомендуемых действий увеличивает и выполнение и КПД ROM сгенерированного кода.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Блок интерполяционной таблицы генерирует из области значений проверяющий код. | Измените настройки на диалоговом окне блока так, чтобы проверка из области значений кода не была сгенерирована.
|
Вы можете:
Осуществите эту проверку своих моделей библиотеки.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
Нажатие на Modify препятствует тому, чтобы блоки интерполяционной таблицы генерировали из области значений проверяющий код, который делает сгенерированный код более эффективным.
Эта проверка поддерживается разовой редактированием проверкой.
ID проверки: mathworks.codegen.LogicBlockUseNonBooleanOutput
Идентифицируйте логические блоки, которые не используют boolean
для типа выходных данных.
Эта проверка проверяет, что типом выходных данных следующих блоков является boolean
:
Сравните с постоянным
Сравните с нулем
Обнаружьте изменение
Обнаружьте уменьшение
Обнаружьте отрицательное падение
Обнаружьте неположительное падение
Обнаружьте увеличение
Обнаружьте неотрицательное повышение
Обнаружьте положительное повышение
Тест интервала
Динамический тест интервала
Логический оператор
Оператор отношения
Используя выходные данные вводят boolean
КПД выполнения увеличений сгенерированного кода.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Типом выходных данных логического блока не является boolean . | В диалоговом окне блока, набор Output data type к boolean . |
Вы можете:
Осуществите эту проверку своих моделей библиотеки.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
Обзор исключения Model Advisor (Simulink Check)
Нажатие на Modify обеспечивает логические блоки, чтобы использовать boolean
как тип выходных данных. Если логический блок использует uint8
для выходного типа, нажатие по Modify изменяет выходной тип в boolean
.
ID проверки: mathworks.codegen.HWImplementation
Идентифицируйте противоречивые или underspecified настройки аппаратной реализации
Программное обеспечение Simulink и Simulink Coder требует двух наборов целевых спецификаций. Первый набор описывает предназначенную производственную платформу финала. Второй набор описывает в настоящее время выбранную цель. Если настройки не соответствуют, генератор кода создает дополнительный код, чтобы эмулировать поведение производственной платформы. Несоответствия или underspecification аппаратных атрибутов могут привести к неэффективной или неправильной генерации кода для целевого компьютера.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Параметры аппаратной реализации не устанавливаются на рекомендуемые значения. | В диалоговом окне Configuration Parameters, на панели Аппаратной реализации, задают следующие параметры:
В диалоговом окне Configuration Parameters задайте следующие параметры:
|
Настройки Production hardware аппаратной реализации не совпадают с настройками Test hardware. | В диалоговом окне Configuration Parameters рассмотрите выбор Test hardware is the same as production hardware (ProdEqTarget ) флажок, или изменяют настройки, чтобы соответствовать. |
ID проверки: mathworks.codegen.SWEnvironmentSpec
Идентифицируйте сомнительные настройки программной среды.
Поддержка некоторых настроек программной среды может привести к неэффективной генерации кода и неоптимальным результатам.
Промышленные стандарты для C, такие как ISO® и MISRA®, требуют, чтобы идентификаторы были уникальны в первом 31 символе.
Stateflow® строит диаграмму со слабым выводом типов данных ввода-вывода Simulink к неэффективному коду.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Максимальная длина идентификатора не соответствует промышленным стандартам для C. | В диалоговом окне Configuration Parameters, на панели > Symbols Code Generation, устанавливает Maximum identifier length (Simulink Coder) параметр к 31 'characters'. |
В диалоговом окне Configuration Parameters, параметрах на Code Generation> панель Interface не установлены в рекомендуемые значения. | В диалоговом окне Configuration Parameters, на Code Generation> Interface (Simulink Coder) панель, очищают следующие параметры:
В диалоговом окне Configuration Parameters очистите Support non-inlined S-functions. |
В диалоговом окне Configuration Parameters, параметрах на Code Generation> панель Symbols не установлены в рекомендуемые значения. | В диалоговом окне Configuration Parameters, на Code Generation> панель Symbols, устанавливает Generate scalar inlined parameters as (Simulink Coder) параметр к Literals . |
В диалоговом окне Configuration Parameters, на Code Generation> панель Interface , выбран Support: variable-size signals. Этот вывод силы к неэффективному коду. | Если вы не намереваетесь поддержать сигналы переменного размера, в диалоговом окне Configuration Parameters, на Code Generation> панель Interface, очистите Support: variable-size signals (Simulink Coder). |
Модель содержит диаграммы Stateflow со слабыми спецификациями типа данных ввода-вывода Simulink. | Выберите свойство Use Strong Data Typing with Simulink I/O диаграммы Stateflow (Stateflow). Вы можете должны быть настроить типы данных в своей модели после выбора свойства. |
Лицензия Stateflow требуется при использовании диаграмм Stateflow.
Сильный ввод данных с вводами и выводами Simulink (Stateflow)
ID проверки: mathworks.codegen.CodeInstrumentation
Идентифицируйте сомнительную отладку кода.
Инструментирование сгенерированного кода может вызвать неоптимальные результаты.
Тестовые точки требуют глобальной памяти и не оптимальны для генерации производственного кода.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Интерфейсные параметры не устанавливаются на рекомендуемые значения. | В диалоговом окне Configuration Parameters, на Code Generation> Interface (Simulink Coder) панель, устанавливает параметры на рекомендуемые значения. |
Блоки генерируют код утверждения. | В диалоговом окне Configuration Parameters, набор Model Verification block enabling (Simulink) к Disable All на основе блока блоком или глобально. |
Блокируйтесь выходные сигналы имеют одну или несколько тестовых точек и, если у вас есть лицензия Embedded Coder, флажок Ignore test point signals снимается в диалоговом окне Configuration Parameters. | Удалите тестовые точки из заданных выходных сигналов блока. Для каждого сигнала, в диалоговом окне Signal Properties (Simulink), снимают флажок Test point. В качестве альтернативы, если модель использует основанный на ERT системный конечный файл, установите флажок Ignore test point signals в диалоговом окне Configuration Parameters, чтобы проигнорировать тестовые точки во время генерации кода. |
Если у вас есть лицензия Simulink Check, можно исключить блоки и графики от этой проверки.
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.codegen.UseRowMajorAlgorithm
Идентифицируйте блоки, генерирующие неэффективные алгоритмы.
Эта проверка идентифицирует блоки, которые генерируют неэффективные алгоритмы в сгенерированном коде на основе размещения массивов модели.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Параметр конфигурации Array layout (Simulink Coder) установлен в Column-major для упорядоченной по столбцам генерации кода. | Отключите параметр конфигурации Use algorithms optimized for row-major array layout (Simulink). |
Параметр конфигурации Array layout установлен в Row-major для упорядоченной по строкам генерации кода. | Выберите параметр конфигурации Use algorithms optimized for row-major array layout. |
Анализирует содержимое в подсистемах маскированных.
ID проверки: mathworks.misra.CodeGenSettings
Идентифицируйте параметры конфигурации, которые могут повлиять на MISRA C:2012 совместимая генерация кода.
В соответствии с рекомендациями этой проверки увеличивает вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Math and Data Types | |
Параметр конфигурации Use division for fixed-point net slope computation не установлен в On или Use division for reciprocals of integers only . | Установите Use division for fixed-point net slope computation на On или Use division for reciprocals of integers only . |
Параметр конфигурации Inf or NaN block output установлен в Параметр конфигурации Inf or NaN block output установлен в | Когда Support non-finite numbers:
|
Параметр конфигурации Model Verification block enabling установлен в Use local settings или Enable All . | Установите Model Verification block enabling на Disable All . |
Параметр конфигурации Undirected event broadcasts установлен в none или warning . | Установите Undirected event broadcasts на error . |
Параметр конфигурации Wrap on overflow установлен в None | Установите параметр конфигурации Wrap on overflow на warning или error . |
Hardware Implementation | |
Параметр конфигурации Production hardware signed integer division rounds to установлен в Undefined | Установите Production hardware signed integer division rounds to на Zero или Floor . |
Параметр конфигурации Shift right on a signed integer as arithmetic shift выбран. | Очистите Shift right on a signed integer as arithmetic shift . |
Simulation Target | |
Параметр конфигурации Compile-time recursion limit for MATLAB functions установлен в значение кроме 0 . | Установите Compile-time recursion limit for MATLAB functions на 0 . |
Параметр конфигурации Dynamic memory allocation in MATLAB functions выбран. | Очистите Dynamic memory allocation in MATLAB functions. |
Параметр конфигурации Enable run-time recursion for MATLAB functions выбран. | Очистите Enable run-time recursion for MATLAB functions. |
Code Generation | |
Параметр конфигурации Bitfield declarator type specifier установлен в
| Установите Bitfield declarator type specifier на uint_T . |
Параметр конфигурации Casting Modes не установлен в Standards Compliant . | Установите Casting Modes на Standards Compliant . |
Параметр конфигурации Code replacement library не установлен в None или AUTOSAR 4.0 . | Установите Code replacement library на |
Параметр конфигурации External mode выбран. | Очистите External mode. |
Параметр конфигурации Generate shared constants выбран. | Очистите Generate shared constants. |
Параметр конфигурации Include comments очищен. | Выберите Include comments. |
Параметр конфигурации MAT-file logging выбран. | Очистите MAT-file logging |
Для основанных на ERT целевых систем параметр конфигурации очищен MATLAB user comments. | Выберите MATLAB user comments. |
Значение для параметра конфигурации Maximum identifier length не введено. | Установите значение к зависящему от реализации пределу. Значением по умолчанию является 31 . |
Параметр конфигурации Parenthesis level не установлен в Maximum (Specify precedence with parentheses) . | Установите Parentheses level на Maximum (Specify precedence with parentheses) . |
Для основанных на ERT целевых систем параметр конфигурации очищен Preserve static keyword in function declarations, когда File packaging format установлен в | Выберите Preserve static keyword in function declarations. |
Параметр конфигурации Replace multiplications by powers of two with signed bitwise shifts выбран. | Очистите Replace multiplications by powers of two with signed bitwise shifts. |
Параметр конфигурации Shared code placement установлен в Auto . | Установите Shared code placement на |
Для основанных на ERT целевых систем параметр конфигурации выбран Support continuous time | Очистите Support continuous time. |
Для основанных на ERT целевых систем параметр конфигурации выбран Support non-inlined S-functions | Очистите Support non-inlined S-functions. |
Параметр конфигурации System-generated identifiers установлен в Classic . | Установите System-generated identifiers на Shortened . |
Параметр конфигурации System target file установлен в основанную на GRT цель. | Установите System target file на основанную на ERT цель. |
Use dynamic memory allocation for model initialization параметра конфигурации выбран, когда Code Interface Packaging установлен в Reusable Function . | Очистите Use dynamic memory allocation for model initialization. ПримечаниеВыберите только, когда Code Interface Packaging будет установлен в |
Нажатие на Modify All изменяет значения параметров в рекомендуемые значения.
Когда вы нажимаете Modify All для моделей с основанной на GRT целью, Model Advisor не обновляет параметр конфигурации System target file к основанной на ERT системе.
Подпроверки параметра зависят от результатов параметра, отмеченного с D в таблице результатов. Когда результатом является D-предупреждение, столбец Current Value в таблице результатов утверждает Необходимое как условие ограничение, которому не соответствуют для подпроверок. После того, как вы изменяете параметр, повторно выполняете проверку.
Некоторые подпроверки характерны для параметров конфигурации для основанных на ERT систем. Эти параметры не обновляются, когда вы нажимаете Modify All, если вы не изменяете модель в основанную на ERT систему.
Эта проверка не рассматривает модели, на которые ссылаются.
ID проверки: mathworks.misra.BlkSupport
Идентифицируйте блоки, которые не поддержаны или рекомендованы для MISRA C:2012 совместимую генерацию кода.
В соответствии с рекомендациями этой проверки увеличивает вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Блоки Интерполяционной таблицы с помощью интерполяции кубическим сплайном или методов экстраполяции были найдены в модели или подсистеме. Определенные блоки:
| Рассмотрите другие методы интерполяции и экстраполяции для блоков Интерполяционной таблицы. |
Блоки Интерполяционной таблицы устаревшие были найдены в модели или подсистеме. Определенные блоки:
| Рассмотрите заменяющий блоки Интерполяционной таблицы устаревшие. |
Блоки S-Function Builder были найдены в модели или подсистеме. | Рассмотрите заменяющий Разработчика S-функции блоки на блоки рекомендуемый для производства. |
Блоки From Workspace были найдены в модели или подсистеме | Рассмотрите заменяющий От блоков Рабочей области с блоками рекомендуемый для производства. |
Блоки строки были найдены в модели или подсистеме. Определенные блоки:
| Рассмотрите заменяющий блоки Строки на блоки рекомендуемый для производства. |
Вы можете:
Осуществите эту проверку своих моделей библиотеки.
Анализирует содержимое соединенных блоков библиотеки.
Анализирует содержимое в подсистемах маскированных.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
Разовая редактированием Проверка. Эта проверка поддерживается разовой редактированием проверкой.
ID проверки: mathworks.misra.BlockNames
Идентифицируйте имена блока, содержащие /
.
В соответствии с рекомендациями этой проверки увеличивает вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Имена блока, содержащие / были найдены в модели или подсистеме. | Удаление от имени блока. |
Работает на моделях библиотеки.
Анализирует содержимое соединенных блоков библиотеки.
Анализирует содержимое в подсистемах маскированных.
Если у вас есть лицензия Simulink Check, позволяет исключения блоков и графиков.
Разовая редактированием Проверка. Эта проверка поддерживается разовой редактированием проверкой.
MISRA C:2012, правило 3.1
Факторы податливости MISRA C:2012 (Simulink)
ID проверки: mathworks.misra.AssignmentBlocks
Идентифицируйте блоки Assignment, которые не имеют параметров блоков набором Action if any output element is not assigned к Error или Warning.
Эта проверка применяется к блоку Assignment, который доступен в библиотеке блока Simulink под Simulink> Math Operations.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений, а также код, который выполняет CERT C, CWE, стандарты ISO/IEC TS 17961.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Модель или подсистема могут содержать блоки Assignment с неполной инициализацией массивов, которые не имеют параметров блоков набором Action if any output element is not assigned к Error или Warning. | Установите параметры блоков Action if any output element is not assigned на одно из рекомендуемых значений:
|
Работает на моделях библиотеки.
Анализирует содержимое соединенных блоков библиотеки.
Анализирует содержимое в подсистемах маскированных.
Если у вас есть лицензия Simulink Check, позволяет исключения блоков и графиков.
Разовая редактированием Проверка. Эта проверка поддерживается разовой редактированием проверкой. Однако следующее условие проверки не поддержано, потому что разовая редактированием проверка не может определить, является ли блок Assignment подсистемой Итератора.
Установите параметры блоков Action if any output element is not assigned на одно из рекомендуемых значений:
Error, если блок Assignment не находится в подсистеме Итератора.
Warning, если блок Assignment находится в подсистеме Итератора.
MISRA C:2012, правило 9.1
ISO/IEC TS 17961: 2013, uninitref
CERT C, EXP33-C
CWE, CWE-908
hisl_0029: Использование блоков Присвоения (Simulink)
Факторы податливости MISRA C:2012 (Simulink)
ID проверки: mathworks.misra.SwitchDefault
Идентифицируйте case-выражения переключателя, которые не имеют случая по умолчанию.
Проверка отмечает объекты модели, которые имеют case-выражения переключателя без случая по умолчанию.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений, а также код, который выполняет CERT C, CWE, стандарты ISO/IEC TS 17961.
Проверка не отмечает блоки без случаев по умолчанию, если они выравниваются по ширине с аннотацией Polyspace®. Когда вы осуществляете проверку, блоки списков таблиц Blocks with justification без случаев по умолчанию, которые имеют выравнивание.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Объект модели имеет case-выражение переключателя без случая по умолчанию. | Для блоков Switch Case считайте параметры блоков выбора Show default case, чтобы явным образом задать случай по умолчанию. |
Вы можете:
Осуществите эту проверку своих моделей библиотеки.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
Разовая редактированием Проверка. Эта проверка поддерживается разовой редактированием проверкой.
MISRA C:2012, правило 16.4
ISO/IEC TS 17961: 2013, swtchdflt
CERT C, MSC01-C
CWE, CWE-478
Аннотируйте код и скройте известные или приемлемые результаты (Polyspace Bug Finder)
ID проверки: mathworks.misra.AutosarReceiverInterface
Идентифицируйте импорт интерфейса получателя AUTOSAR, который не имеет соответствия с ошибочными портами.
В соответствии с рекомендациями этой проверки увеличивает вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений. Проверка отмечает импорт интерфейсов получателя AUTOSAR, который пропускает ошибочные порты. Следующая таблица идентифицирует типы режима доступа к данным AUTOSAR для интерфейсных портов получателя, которые отмечаются проверкой, когда соответствующий ошибочный порт отсутствует.
Тип режима доступа к данным AUTOSAR | Отмеченный проверкой? |
---|---|
ImplicitReceive | Да |
ExplicitReceive | Да |
QueuedExplicitReceive | Нет |
ErrorStatus | Нет |
ModeReceive | Нет |
IsUpdated | Нет |
EndToEndRead | Да |
ExplicitReceiveByVal | Нет |
otherwise | Нет |
Проверка не отмечает недостающие ошибочные порты, когда они выравниваются по ширине с аннотацией Polyspace. Когда вы осуществляете проверку, таблица Blocks with justification приводит недостающие ошибочные порты, которые имеют выравнивание.
Доступный с Embedded Coder и 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 Blockset)
Настройка компонента AUTOSAR (AUTOSAR Blockset)
ID проверки: mathworks.misra.BusElementNames
Идентифицируйте имена объектов шины, которые используются в качестве имен элементов шины.
Используя эти увеличения проверки вероятность генерации кодирует для встраиваемых приложений, который совместим с MISRA C:2012. Проверка отмечает экземпляры где Simulink. Имя объекта шины используется в качестве Simulink. Соедините шиной имя элемента.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Имя объекта шины используется в качестве имени элемента шины. | Поменяйте или отмеченное имя объекта шины или имя элемента шины так, чтобы они не были идентичны. |
MISRA C:2012, правило 5.6
AGC AC MISRA, правило 5.3
ID проверки: mathworks.security.CodeGenSettings
Идентифицируйте параметры конфигурации, которые могут повлиять на податливость с безопасными стандартами кодирования.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации кодирует, который выполняет CERT C, CWE, ISO/IEC TS 17961 безопасные стандарты кодирования.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Diagnostics | |
Параметр конфигурации Inf or NaN block output установлен в Параметр конфигурации Inf or NaN block output установлен в | Когда Support non-finite numbers:
|
Параметр конфигурации Model Verification block enabling установлен в Use local settings или Enable All . | Установите Model Verification block enabling на Disable All . |
Параметр конфигурации Undirected event broadcasts установлен в none или warning . | Установите Undirected event broadcasts на error . |
Параметр конфигурации Wrap on overflow установлен в none . | Установите Wrap on overflow на warning или error . |
Hardware Implementation | |
Параметр конфигурации Production hardware signed integer division rounds to установлен в Undefined . | Установите Production hardware signed integer division rounds to на Zero или Floor . |
Параметр конфигурации Shift right on a signed integer as arithmetic shift выбран. | Очистите Shift right on a signed integer as arithmetic shift . |
Simulation Target | |
Параметр конфигурации Compile-time recursion limit for MATLAB functions установлен в значение кроме 0 . | Установите Compile-time recursion limit for MATLAB functions на 0 . |
Параметр конфигурации Dynamic memory allocation in MATLAB functions выбран. | Очистите Dynamic memory allocation in MATLAB functions. |
Параметр конфигурации Enable run-time recursion for MATLAB functions выбран. | Очистите Enable run-time recursion for MATLAB functions. |
Code Generation | |
Параметр конфигурации Code replacement library не установлен в None или AUTOSAR 4.0 . | Установите Code replacement library на None или AUTOSAR 4.0 . |
Параметр конфигурации External mode выбран. | Очистите External mode. |
Параметр конфигурации Include comments очищен. | Выберите Include comments. |
Параметр конфигурации MAT-file logging выбран. | Очистите MAT-file logging. |
Для основанных на ERT целевых систем параметр конфигурации очищен MATLAB user comments. | Выберите MATLAB user comments. |
Параметр конфигурации Replace multiplications by powers of two with signed bitwise shifts выбран. | Очистите Replace multiplications by powers of two with signed bitwise shifts. |
Для основанных на ERT целевых систем параметр конфигурации выбран Support continuous time | Очистите Support continuous time. |
Для основанных на ERT целевых систем параметр конфигурации выбран Support non-inlined S-functions | Очистите Support non-inlined S-functions. |
Параметр конфигурации System target file установлен в основанную на GRT цель. | Установите System target file на основанную на ERT цель. |
Параметр конфигурации Use dynamic memory allocation for model initialization выбран. | Очистите Use dynamic memory allocation for model initialization.ПримечаниеВыберите только, когда Code Interface Packaging будет установлен в |
Нажатие на Modify All изменяет значения параметров в рекомендуемые значения.
Когда вы нажимаете Modify All для моделей с основанной на GRT целью, Model Advisor не обновляет параметр конфигурации System target file к основанной на ERT системе.
Подпроверки параметра зависят от результатов параметра, отмеченного с D в таблице результатов. Когда результатом является D-предупреждение, столбец Current Value в таблице результатов утверждает Необходимое как условие ограничение, которому не соответствуют для подпроверок. После того, как вы изменяете параметр, повторно выполняете проверку.
Некоторые подпроверки характерны для параметров конфигурации для основанных на ERT систем. Эти параметры не обновляются, когда вы нажимаете Modify All, если вы не изменяете модель в основанную на ERT систему.
ID проверки: mathworks.security.BlockSupport
Идентифицируйте блоки, не рекомендуемые для податливости с безопасными стандартами кодирования.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации кодирует, который выполняет CERT C, CWE, ISO/IEC TS 17961 безопасные стандарты кодирования.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Блоки Интерполяционной таблицы с помощью интерполяции кубическим сплайном или методов экстраполяции были найдены в модели или подсистеме. Определенные блоки:
| Рассмотрите другие методы интерполяции и экстраполяции для блоков Интерполяционной таблицы. |
Блоки Интерполяционной таблицы устаревшие были найдены в модели или подсистеме. Определенные блоки:
| Рассмотрите заменяющий блоки Интерполяционной таблицы устаревшие. |
Блоки S-Function Builder были найдены в модели или подсистеме. | Рассмотрите заменяющий Разработчика S-функции блоки на блоки рекомендуемый для производства. |
Блоки From Workspace были найдены в модели или подсистеме | Рассмотрите заменяющий От блоков Рабочей области с блоками рекомендуемый для производства. |
Блоки строки были найдены в модели или подсистеме. Определенные блоки:
| Рассмотрите заменяющий блоки Строки на блоки рекомендуемый для производства. |
Вы можете:
Осуществите эту проверку своих моделей библиотеки.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
Разовая редактированием Проверка. Эта проверка поддерживается разовой редактированием проверкой.
ID проверки: mathworks.codegen.QuestionableSubsysSetting
Идентифицируйте сомнительные настройки блока подсистемы.
Блоки Subsystem, реализованные как пустота пустоты, функционируют в глобальной памяти использования сгенерированного кода, чтобы сохранить ввод-вывод подсистемы.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Блоки Subsystem имеют Subsystem Parameters> набор опции Function packaging к Nonreusable function . | Установите Subsystem Parameters> параметр Function packaging к Auto . |
Блоки Subsystem имеют Subsystem Parameters> набор опции Function packaging к Reusable function . | Установите Subsystem Parameters> параметр Function packaging к Auto . |
Если у вас есть лицензия Simulink Check, можно исключить блоки и графики от этой проверки.
Блок Subsystem
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.codegen.RowMajorCodeGenSupport
Проверяйте на блоки, не поддержанные для упорядоченной по строкам генерации кода.
Эта проверка идентифицирует блоки, которые не поддержаны для упорядоченной по строкам генерации кода.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Интерфейсы модели с внешними данными, которые находятся в упорядоченном по строкам размещении массивов. | Установите параметр конфигурации Array layout (Simulink Coder) к Row-major . |
Анализирует содержимое в подсистемах маскированных.
ID проверки: mathworks.codegen.RowMajorUnsetSFunction
Идентифицируйте S-функции TLC с размещением сброса массивов.
Эта проверка идентифицирует S-функции, которые имеют SSArrayLayout
установите на SS_UNSET
. По умолчанию каждая S-функция имеет SSArrayLayout
набор свойств к SS_UNSET
. Эта установка отключает S-функцию для упорядоченной по строкам генерации кода. Когда параметр конфигурации Array layout (Simulink Coder) установлен в Row-major
, Embedded Coder сообщает об ошибке. Можно выключить ошибку путем изменения External functions compatibility for row-major code generation (Simulink Coder) в warning
или none
.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Параметр конфигурации Array layout установлен в Column-major для упорядоченной по столбцам генерации кода. | Установите SSArrayLayout свойство к Column-major . |
Параметр конфигурации Array layout установлен в Row-major для упорядоченной по строкам генерации кода. | Установите SSArrayLayout свойство к Row-major . |
Анализирует содержимое во всех подсистемах маскированных.
ID проверки: mathworks.codegen.BlockSpecificQuestionableFxptOperations
Идентифицируйте операции фиксированной точки, которые могут привести к неоптимальным результатам.
Определенные настройки блока могут привести к дорогой фиксированной точке и коду насыщения.
Условия | Рекомендуемое действие |
---|---|
Блоки генерируют дорогой код насыщения. | Проверяйте, требует ли ваше приложение установки Function Block Parameters> Signal Attributes> Saturate on integer overflow. В противном случае очистите параметр Saturate on integer overflow для наиболее эффективного внедрения блока в сгенерированном коде. |
Блоки Product умножают сигналы с несовпадающими наклонными поправочными коэффициентами. Сетевой наклонный расчет использует умножение, сопровождаемое сдвигами, который неэффективен для некоторого целевого компьютера. | Установите Optimization> параметр Use division for fixed-point net slope computation к ПримечаниеЭта оптимизация происходит, только если соблюдают определенные условия простоты и точности. Для получения дополнительной информации смотрите Указатель Сетевой Наклонный Расчет (Fixed-Point Designer). |
Блоки Product сконфигурированы с операцией деления для первого входа и умножить операцией для второго входа. | Инвертируйте входные параметры, таким образом, умножить операция происходит сначала, и операция деления происходит вторая. |
Блоки Product сконфигурированы, чтобы сделать несколько операций деления. | Умножьте все условия знаменателя вместе, и затем сделайте одно использование деления, располагающее каскадом блоки Product. |
Блоки Product сконфигурированы, чтобы сделать многих умножение или операции деления. | Разделите операции через несколько блоков с каждым блоком, выполняющим одно умножение или одну операцию деления. |
Код защиты, сгенерированный как часть операции деления, избыточен. | Проверьте, что ваша модель не может вызвать исключения в операциях деления и затем удалить избыточный код защиты путем установки Optimization> Remove code that protects against division arithmetic exceptions (Simulink Coder) параметр в диалоговом окне Configuration Parameters. |
Область значений типа данных входных параметров блоков Sum превышает область значений типа данных выхода, который может вызвать переполнение или насыщение. | Измените выход и типы данных аккумулятора, таким образом, область значений равняется или превышает все входные диапазоны. Например, если модель имеет два входных параметров
Область значений типа данных выхода и аккумулятора должна равняться или превысить –128 к 255. |
Блок Sum имеет вход с наклонным поправочным коэффициентом, который не равняется наклонному поправочному коэффициенту выхода. | Измените типы данных так входные параметры, выходные параметры, и аккумулятор имеет тот же наклонный поправочный коэффициент. |
Сетевая сумма входных смещений блока Sum не равняется смещению выхода. | Измените смещение выходного масштабирования, делая сетевой нуль корректировки смещения. |
Ввод и вывод блока MinMax имеет различные типы данных. | Измените тип данных ввода или вывода. |
Вход блока MinMax имеет различный наклонный поправочный коэффициент, чем выход. | Измените масштабирование входа или выход. |
Начальное условие блока Discrete-Time Integrator используется, чтобы инициализировать и состояние и выход. | Установите 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, можно исключить блоки и графики от этой проверки.
Идентифицируйте Блоки, которые Генерируют Дорогой Код Фиксированной точки и Насыщения (Fixed-Point Designer)
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.misra.ModelFunctionInterface
Идентифицируйте недостающие спецификаторы const в указателях входных данных.
В соответствии с рекомендациями этой проверки увеличивает вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений. Проверка отмечает указатели входных данных, которые не имеют спецификатора const.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Спецификатор const не задан для указателя входных данных. | Рассмотрите добавление спецификатора const к указателю входных данных. |
MISRA C:2012, правило 8.13
ID проверки: mathworks.codegen.QuestionableFxptOperations
Идентифицируйте операции фиксированной точки, которые могут привести к неоптимальным результатам.
Менее эффективный код может следовать из блоков, которые генерируют громоздкое умножение и операции деления, дорогой код преобразования, неэффективность в блоках интерполяционной таблицы и дорогой код сравнения.
Условия | Рекомендуемое действие |
---|---|
Сгенерированный код целочисленного деления является большим. | В диалоговом окне Configuration Parameters, на панели Hardware Implementation, устанавливает параметр Production hardware signed integer division rounds to на рекомендуемое значение. |
Вектор Интерполяционной таблицы входных значений равномерно не расположен с интервалами. | Если данные о точке останова являются ненастраиваемыми, настройте данные, чтобы иметь даже, степень 2 интервалов. Смотрите fixpt_look1_func_approx . |
Вектор Интерполяционной таблицы входных значений равномерно не расположен с интервалами, когда квантовано, но это очень близко к тому, чтобы быть равномерно расположенным с интервалами. | Если данные о точке останова являются ненастраиваемыми, настройте данные, чтобы иметь даже, степень 2 интервалов. Смотрите fixpt_evenspace_cleanup . |
Вектор Интерполяционной таблицы входных значений равномерно расположен с интервалами, но интервал не является степенью 2. | Если данные о точке останова являются ненастраиваемыми, настройте данные, чтобы иметь даже, степень 2 интервалов. Смотрите fixpt_look1_func_approx . |
Для Предварительного поиска или n-D блока Lookup Table, Index search method является Evenly spaced points . Данные о точке останова не имеют силы 2 интервалов. | Если данные о точке останова являются ненастраиваемыми, настройте данные, чтобы иметь даже, степень 2 интервалов. В противном случае, в диалоговом окне параметров блоков, задайте различный Index search method, чтобы избежать интенсивной расчетом операции деления. |
данные о точке останова Интерполяционной таблицы n-D равномерно не расположены с интервалами, и Index search method не является Evenly spaced points . | Если данные о точке останова являются ненастраиваемыми, настройте данные, чтобы иметь даже, степень 2 интервалов и затем установить Index search method на Evenly spaced points . |
данные о точке останова Интерполяционной таблицы n-D равномерно расположены с интервалами, и Index search method является Evenly spaced points . Но интервал не является степенью 2. | Если данные о точке останова являются ненастраиваемыми, настройте данные, чтобы иметь даже, степень 2 интервалов. Смотрите fixpt_look1_func_approx . |
данные о точке останова Интерполяционной таблицы n-D равномерно расположены с интервалами, но интервал не является степенью 2. Кроме того, Index search method не является Evenly spaced points . | Установите Index search method на Evenly spaced points . Кроме того, если данные являются ненастраиваемыми, рассмотрите даже, степень 2 интервалов. |
данные о точке останова Интерполяционной таблицы n-D равномерно расположены с интервалами, и интервал является степенью 2. Но Index search method не является Evenly spaced points . | Установите Index search method на Evenly spaced points . |
Блоки требуют операций многословных в сгенерированном коде. | Настройте размеры слова входных параметров к операциям так, чтобы они не превышали самый большой размер слова вашего процессора. Для получения дополнительной информации смотрите Фиксированную точку Операции Многословные В Сгенерированном коде (Fixed-Point Designer). |
Блоки требуют громоздкого умножения. |
Ограничьте операции умножения:
|
Блоки Product умножают сигналы с несовпадающими наклонными поправочными коэффициентами. | Измените масштабирование выхода так, чтобы его наклонным поправочным коэффициентом был продукт входных поправочных коэффициентов наклона. |
Блоки умножают сигналы с ненулевым смещением. | Вставьте блок Data Type Conversion до и после блока, содержащего операцию умножения. |
Входные параметры блока Relational Operator имеют различные типы данных. |
|
Входные параметры блока Relational Operator имеют различные наклонные поправочные коэффициенты. | Измените масштабирование любого входа. |
Выход блока Relational Operator является постоянным. Этот результат силы в мертвом коде, который будет устранен Simulink Coder. | Рассмотрите свой проект модели и или удалите блок Relational Operator или замените его на константу. |
Лицензия Fixed-Point Designer требуется, чтобы генерировать фиксированную точку.
Если у вас есть лицензия Simulink Check, можно исключить блоки и графики от этой проверки.
Идентифицируйте сомнительные операции фиксированной точки (Fixed-Point Designer)
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.codegen.ExpensiveSaturationRoundingCode
Проверяйте на блоки, которые генерируют дорогой код округления.
Сгенерированный код округления неэффективен из-за установки параметра Integer rounding mode.
Доступный с Embedded Coder.
Условие | Рекомендуемое действие |
---|---|
Сгенерированный код неэффективен. | Установите Function Block Parameters> параметр Integer rounding mode к рекомендуемому значению. |
Если у вас есть лицензия Simulink Check, можно исключить блоки и графики от этой проверки.
Идентифицируйте Блоки, которые Генерируют Дорогое Округление Кода (Fixed-Point Designer)
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.misra.CompliantCGIRConstructions
Идентифицируйте блоки Simulink, которые содержат битовые операции на целых числах со знаком.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений, а также код, который выполняет CERT C и стандарты CWE.
Доступный с Embedded Coder и Simulink Check.
Эта проверка требует лицензии Stateflow, когда Stateflow используется в модели.
Условие | Рекомендуемое действие |
---|---|
Модель имеет блоки, которые содержат битовые операции на целых числах со знаком. | Рассмотрите использование беззнакового целого для битовых операций. |
Вы можете:
Проверка принимает, что код сгенерирован для целой модели. Когда код сгенерирован сборкой подсистемы или экспортами функций, проверка может продукт неправильные результаты.
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, правило 10.1
CERT C, INT13-C
CWE, CWE-682
hisl_0060: Параметры конфигурации, которые улучшают податливость MISRA C:2012 (Simulink)
Факторы податливости MISRA C:2012 (Simulink)
ID проверки: mathworks.misra.RecursionCompliance
Идентифицируйте вызовы рекурсивной функции в диаграммах Stateflow.
В соответствии с рекомендациями этой проверки увеличивает вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений. Проверка отмечает графики, которые имеют вызовы рекурсивной функции.
Доступный с Embedded Coder и Simulink Check.
Эта проверка требует лицензии Stateflow.
Условие | Рекомендуемое действие |
---|---|
График имеет вызов рекурсивной функции. | Удалите вызов рекурсивной функции. |
MISRA C:2012, Dir 17.2
Избегайте нежелательной рекурсии в графике (Stateflow)
ID проверки: mathworks.misra.CompareFloatEquality
Идентифицируйте операции равенства и неравенства на значениях с плавающей точкой.
Проверка отмечает источники, вызывающие равенство или операции неравенства на значениях с плавающей точкой.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений, а также код, который выполняет CERT C и стандарты CWE.
Проверка не отмечает блоки с помощью операций равенства или неравенства на значениях с плавающей точкой, если они выравниваются по ширине с аннотацией Polyspace. Когда вы осуществляете проверку, блоки списков таблиц Blocks with justification с операциями равенства или неравенства, которые имеют выравнивание.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Объект модели начинает операцию равенства или неравенства на значении с плавающей точкой. | Рассмотрите использование значений нес плавающей точкой для операций равенства или неравенства. |
Вы можете:
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, Dir 1.1
CERT C, FLP00-C
CWE, CWE-697
Аннотируйте код и скройте известные или приемлемые результаты (Polyspace Bug Finder)
ID проверки: mathworks.misra.IntegerWordLengths
Идентифицируйте целочисленные размеры слова, которые не выполняют настройки аппаратной реализации
Проверка отмечает целые числа, размеры слова которых превышают количество битов, разрешенных через настройки аппаратной реализации.
В соответствии с рекомендациями этих увеличений проверки вероятность генерации MISRA C:2012 совместимый код для встраиваемых приложений, а также код, который выполняет CERT C и стандарты CWE.
Доступный с Embedded Coder и Simulink Check.
Условие | Рекомендуемое действие |
---|---|
Объект модели содержит целочисленные размеры слова, которые несовместимы с настройками аппаратной реализации. |
Обновите целое число, таким образом, его длина не превышает разрешенное количество битов. Можно просмотреть разрешенное количество битов в диалоговом окне Configuration Parameters на the Hardware Implementation> панель Device details. |
Вы можете:
Исключите блоки и графики от этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, правило 10.1
CERT C, INT13-C
CWE, CWE-682
Обзор исключения Model Advisor (Simulink Check)
ID проверки: mathworks.codegen.BlockNames
Проверки, включают ли имена блока в панели Code Perspective недопустимые символы.
Эта разовая редактированием проверка оценивает имена блока в панели Code Perspective. Проверка сообщает о недопустимых символах в именах блока, за исключением:
Блоки, которые проигнорированы или не рекомендованы для генерации кода
Виртуальные блоки Subsystem
Проверка проверяет, что имена блока выполняют эти инструкции:
Форма:
имя:
Не запускается с номера
Не включает пробелы в начале имени блока
Не использует двухбайтовые символы
Возвраты каретки позволены
Допустимые символы:
имя:
b c d e f g h i j k l m n o p q r s t u v w x y z
B C D E F G H I J K 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 _
Условие | Рекомендуемое действие |
---|---|
Имя блока в панели Code Perspective не соответствует инструкциям. | Обновите имя блока, чтобы выполнить инструкции. |
Работает на моделях библиотеки.
Анализирует содержимое соединенных библиотекой блоков.
Анализирует содержимое в подсистемах маскированных.
Позволяет исключения блоков и графиков.