Использование Embedded Coder® Model Advisor проверяет, чтобы сконфигурировать модель для генерации кода.
Проверяйте идентификатор: mathworks.codegen.PCGSupport
Идентифицируйте блоки, не поддерживаемые генерацией кода или не рекомендуемые для развертывания производственного кода C/C + +.
Эта проверка частично идентифицирует конструкции модели, которые не рекомендованы для генерации производственного кода C/C + +. Для Simulink® Coder™ и Embedded Coder, эти конструкции модели тождеств появиться в таблицах Блока Simulink Поддержки.
В некоторых случаях эта проверка флагов блоков, поддерживаемых для генерации кода. Для этих блоков необходимо просмотреть информацию о сноске, содержащуюся в примечаниях к поддержке, и придерживаться рекомендуемого действия, предоставленного Model Advisor.
Следование рекомендациям этой проверки увеличивает вероятность генерации кода, соответствующего стандартам CERT C, CWE и ISO/IEC TS 17961.
Доступно с Embedded Coder и Simulink Check™.
Состояние | Рекомендуемое действие |
---|---|
Модель или подсистема содержит блоки, которые не должны использоваться для развертывания производственного кода. | Рассмотрите замену блоков, перечисленных в результатах. Щелкните элемент из списка сомнительных элементов, чтобы найти условие. |
Модель или подсистема содержит блоки, которые поддерживаются, но не рекомендованы для генерации производственного кода. | Проверьте примечания к поддержке и придерживайтесь рекомендуемого действия, предоставленного Model Advisor. |
Вы можете:
Запустите эту проверку на своих моделях библиотеки.
Анализируйте содержимое библиотечно связанных блоков.
Анализируйте содержимое в маскированных подсистемах.
Исключайте блоки и графики, если у вас есть лицензия Simulink Check.
Эта проверка поддерживается проверкой во время редактирования.
Проверяйте идентификатор: mathworks.codegen.EfficientTunableParamExpr
Проверьте строение модели на оптимизацию, которая может улучшить эффективность кода.
Эта проверка идентифицирует параметры конфигурации модели, которые рекомендованы для генерации производственного кода C/C + +. Для Embedded Coder эти параметры конфигурации модели улучшают эффективность кода.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Оптимизация подавляет генерацию кода, чтобы защитить от целочисленного переполнения для настраиваемого выражения параметра, которое вы выбираете. Выберите удаление кода насыщения. | Если у вас есть Embedded Coder и вы используете системный целевой файл на основе ERT, выберите Параметр Конфигурации Remove Code из настраиваемых выражений параметров, которые насыщают значения вне области допустимого или установите параметр EfficientTunableParamExpr на on . |
Оптимизация подавляет генерацию кода, которая обрабатывает результаты преобразования с плавающей точкой в целое число для NaN значения. Выберите исключение кода преобразования. | Если у вас есть Embedded Coder и вы используете системный целевой файл на основе ERT, выберите Параметр конфигурации Удалить код из плавающей точки в целочисленные преобразования с насыщением, которое сопоставляет NaN с нулем или установите параметр 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.
Не работает на библиотечных моделях.
Не допускает исключения блоков или графиков.
Проверяйте идентификатор: mathworks.codegen.LUTRangeCheckCode
Идентифицируйте блоки интерполяционной таблицы, которые генерируют код для защиты от входов вне области допустимого значения для значений точек по оси Х или индексов.
Эта проверка проверяет, что следующие блоки не генерируют код для защиты от входов, которые выходят за пределы области значений допустимых значений точек по оси Х:
Эта проверка также проверяет, что блоки Interpolation Using Prelookup не генерируют код для защиты от входов, которые выходят за пределы области значений допустимых значений индекса.
Следование рекомендуемым действиям повышает как выполнение, так и эффективность ПЗУ сгенерированного кода.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Блок интерполяционной таблицы генерирует код проверки вне области допустимого. | Измените настройку в диалоговом окне блока, чтобы не генерировать код проверки вне области допустимого.
|
Вы можете:
Запустите эту проверку на своих моделях библиотеки.
Исключить блоки и графики из этой проверки, если у вас есть лицензия Simulink Check.
Нажатие Modify препятствует генерации блоков интерполяционной таблицы вне области допустимого значения, что делает сгенерированный код более эффективным.
Эта проверка поддерживается проверкой во время редактирования.
Проверяйте идентификатор: mathworks.codegen.LogicBlockUseNonBooleanOutput
Идентифицируйте логические блоки, которые не используют boolean
для типа выходных данных.
Эта проверка проверяет, что тип выходных данных следующих блоков boolean
:
Сравнение с константой
Сравнение с нулем
Обнаружение изменений
Обнаружение уменьшения
Обнаружение отрицательного падения
Обнаружение падения непозитивно
Увеличение обнаружения
Обнаружение подъёма неотрицательной функции
Обнаружение положительного подъёма
Интервальный тест
Динамический интервальный тест
Логический оператор
Реляционный оператор
Использование типа выходных данных boolean
увеличения эффективности выполнения сгенерированного кода.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Тип выходных данных логического блока не boolean . | В диалоговом окне блока установите Output data type равным boolean . |
Вы можете:
Запустите эту проверку на своих моделях библиотеки.
Исключить блоки и графики из этой проверки, если у вас есть лицензия Simulink Check.
Обзор исключения Model Advisor (Simulink Check)
Клик Modify заставляет логические блоки использовать boolean
как тип выходных данных. Если логический блок использует uint8
для типа выхода, нажатие кнопки Modify изменяет тип выхода на boolean
.
Проверяйте идентификатор: mathworks.codegen.HWImplementation
Идентифицируйте несогласованные или недоопределенные параметры аппаратной реализации
Программное обеспечение Simulink и Simulink Coder требует двух наборов целевых спецификаций. Первый набор описывает конечную целевую производственную платформу. Второй набор описывает текущую выбранную цель. Если строения не совпадают, генератор кода создает дополнительный код, чтобы эмулировать поведение производственной платформы. Несогласованность или недоопределенность атрибутов оборудования могут привести к неэффективной или неправильной генерации кода для целевого компьютера.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Параметры аппаратной реализации не заданы в рекомендуемых значениях. | В диалоговом окне Параметры конфигурации на панели Аппаратная реализация задайте следующие параметры:
В диалоговом окне Параметров конфигурации задайте следующие параметры:
|
Настройки Production hardware аппаратной реализации не совпадают с настройками Test hardware. | В диалоговом окне Параметров конфигурации рассмотрите выбор Test hardware is the same as production hardware (ProdEqTarget ) или измените соответствующие настройки. |
Проверяйте идентификатор: mathworks.codegen.SWEnvironmentSpec
Идентифицируйте сомнительные настройки окружения программного обеспечения.
Поддержка некоторых настроек программного окружения может привести к неэффективной генерации кода и неоптимальным результатам.
Промышленные стандарты для C, такие как ISO® и MISRA®, требовать, чтобы идентификаторы были уникальными в пределах первых 31 символов.
Stateflow® графики со слабыми типами данных ввода-вывода Simulink приводят к неэффективному коду.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Максимальная длина идентификатора не соответствует отраслевым стандартам для C. | В диалоговом окне Параметров конфигурации на панели Code Generation > Identifiers установите значение параметра Maximum identifier length 31 персонажи. |
В диалоговом окне Configuration Parameters параметры на панели Code Generation > Interface не заданы рекомендуемые значения. | В диалоговом окне Параметров конфигурации на панели Code Generation > Interface очистите следующие параметры:
В диалоговом окне Параметров конфигурации снимите Support non-inlined S-functions. |
В диалоговом окне Configuration Parameters параметры на панели Code Generation > Identifiers не заданы рекомендуемые значения. | В диалоговом окне Configuration Parameters на панели Code Generation > Identifiers установите значение параметра Generate scalar inlined parameters as Literals . |
В диалоговом окне Параметров конфигурации на панели Code Generation > Interface выбран Support: variable-size signals. Это может привести к неэффективному коду. | Если вы не намерены поддерживать сигналы переменного размера, в диалоговом окне Параметров конфигурации, на панели Code Generation > Interface, очистите Support: variable-size signals. |
Модель содержит диаграммы Stateflow со слабыми спецификациями типа данных ввода-вывода Simulink. | Выберите свойство диаграммы Stateflow Use Strong Data Typing with Simulink I/O. Вам, возможно, потребуется настроить типы данных в модели после выбора свойства. |
Лицензия Stateflow требуется при использовании диаграмм Stateflow.
Сильное типирование данных с входами и выходами Simulink (Stateflow)
Проверяйте идентификатор: mathworks.codegen.CodeInstrumentation
Идентифицируйте сомнительные отладки кода.
Инструментирование сгенерированного кода может вызвать неоптимальные результаты.
Тестовые точки требуют глобальной памяти и не оптимальны для генерации производственного кода.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Параметры интерфейса не заданы в рекомендуемых значениях. | В диалоговом окне Параметров конфигурации на панели Code Generation > Interface установите рекомендуемые значения параметров. |
Блоки генерируют код типа «assertion». | В диалоговом окне Параметров конфигурации установите Model Verification block enabling равным Disable All на блоке за блоком базиса или глобально. |
Сигналы выхода блоков имеют одну или несколько тестовых точек, и, если у вас есть лицензия Embedded Coder, флажок Ignore test point signals снимается в диалоговом окне Параметров конфигурации. | Удалите тестовые точки из указанных выходных сигналов блока. Для каждого сигнала в диалоговом окне Свойства снимите флажок Test point. Кроме того, если модель использует системный целевой файл на основе ERT, установите флажок Ignore test point signals в диалоговом окне Параметры конфигурации, чтобы игнорировать тестовые точки во время генерации кода. |
Если у вас есть лицензия Simulink Check, можно исключить блоки и графики из этой проверки.
Обзор исключения Model Advisor (Simulink Check)
Проверяйте идентификатор: mathworks.codegen.UseRowMajorAlgorithm
Идентифицируйте блоки, генерирующие неэффективные алгоритмы.
Эта проверка идентифицирует блоки, которые генерируют неэффективные алгоритмы в сгенерированном коде на основе размещения массива модели.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Column-major для генерации кода основного столбца. | Отключите параметр конфигурации <reservedrangesplaceholder0>. |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Row-major для генерации кода основной строки. | Выберите Use algorithms optimized for row-major array layout параметра конфигурации. |
Анализирует содержимое маскированных подсистем.
Проверяйте идентификатор: mathworks.misra.CodeGenSettings
Идентифицируйте параметры конфигурации, которые могут повлиять на генерацию кода C:2012 совместимой с MISRA.
Следование рекомендациям этой проверки увеличивает вероятность генерации 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 . |
Значение параметра конфигурации <reservedrangesplaceholder1> Значение параметра конфигурации <reservedrangesplaceholder1> | Когда Support non-finite numbers есть:
|
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Use local settings или Enable All . | Установите Model Verification block enabling значение Disable All . |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным none или warning . | Установите Undirected event broadcasts значение error . |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным None | Установите значение параметра конфигурации Wrap on overflow равным warning или error . |
Hardware Implementation | |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Undefined
| Установите Production hardware signed integer division rounds to значение Zero или Floor . |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Shift right on a signed integer as arithmetic shift. |
Simulation Target | |
Параметр конфигурации <reservedrangesplaceholder1> задано значение, отличное от 0 . | Установите Compile-time recursion limit for MATLAB functions значение 0 . |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Dynamic memory allocation in MATLAB functions. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Enable run-time recursion for MATLAB functions. |
Code Generation | |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным
| Установите Bitfield declarator type specifier значение uint_T . |
Значение параметра конфигурации Casting Modes не установлено на Standards Compliant . | Установите Casting Modes значение Standards Compliant . |
Значение параметра конфигурации Code replacement library не установлено на None или AUTOSAR 4.0 . | Установите Code replacement library значение |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить External mode. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Generate shared constants. |
Параметр конфигурации <reservedrangesplaceholder0> сброшен. | Выберите Include comments. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить MAT-file logging |
Для целевых систем на основе ERT параметров конфигурации <reservedrangesplaceholder0> очищается. | Выберите MATLAB user comments. |
Значение для параметр конфигурации <reservedrangesplaceholder0> не задано. | Установите значение на зависимый от реализации предел. Значение по умолчанию является 31 . |
Значение параметра конфигурации Parenthesis level не установлено на Maximum (Specify precedence with parentheses) . | Установите Parentheses level значение Maximum (Specify precedence with parentheses) . |
Для целевых систем на основе ERT параметров конфигурации <reservedrangesplaceholder2> очищается, когда для File packaging format задано значение Compact | Выберите Preserve static keyword in function declarations. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Replace multiplications by powers of two with signed bitwise shifts. |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Auto . | Установите Shared code placement значение |
Для целевых систем на основе ERT выбирается параметр конфигурации <reservedrangesplaceholder0> | Очистить Support continuous time. |
Для целевых систем на основе ERT выбирается параметр конфигурации <reservedrangesplaceholder0> | Очистить Support non-inlined S-functions. |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Classic . | Установите System-generated identifiers значение Shortened . |
Значение параметра конфигурации <reservedrangesplaceholder0> устанавливается на целевом устройстве на основе 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-Warning, в столбце Current Value в таблице результатов указывается, что ограничение «Предварительное условие» не соблюдается для подшеков. После изменения параметра перезапустите проверку.
Примечание
Некоторые подчеки характерны для параметров конфигурации для систем на основе ERT. Эти параметры не обновляются при нажатии кнопки мыши Modify All если вы не измените модель на систему на основе ERT.
Эта проверка не рассматривает ссылку на модели.
Проверяйте идентификатор: mathworks.misra.BlkSupport
Идентифицируйте блоки, которые не поддерживаются или не рекомендуются для генерации кода, совместимого C:2012 MISRA.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Интерполяционные таблицы блоки, использующие кубическую интерполяцию сплайн или методы экстраполяции, были найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите другие методы интерполяции и экстраполяции для блоков Интерполяционной таблицы. |
Устаревшие блоки Интерполяционной таблицы были найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите замену устаревших блоков интерполяционной таблицы. |
S-Function Builder блоки были найдены в модели или подсистеме. | Рассмотрите замену блоков S-Function Builder на блоки, рекомендуемые для производства. |
From Workspace блоки были найдены в модели или подсистеме | Рассмотрите замену блоков Из Рабочей области на блоки, рекомендуемые для производства. |
Строковые блоки были найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите замену строковых блоков на блоки, рекомендуемые для производства. |
Вы можете:
Запустите эту проверку на своих моделях библиотеки.
Анализирует содержимое библиотечно связанных блоков.
Анализирует содержимое маскированных подсистем.
Исключить блоки и графики из этой проверки, если у вас есть лицензия Simulink Check.
Проверка во время редактирования. Эта проверка поддерживается проверкой во время редактирования.
Проверяйте идентификатор: mathworks.misra.BlockNames
Идентифицируйте имена блоков, содержащие /
.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Имена блоков, содержащие / были найдены в модели или подсистеме. | Удаление / от имени блока. |
Работает на библиотечных моделях.
Анализирует содержимое библиотечно связанных блоков.
Анализирует содержимое маскированных подсистем.
Если у вас есть лицензия Simulink Check, разрешает исключения блоков и графиков.
Проверка во время редактирования. Эта проверка поддерживается проверкой во время редактирования.
MISRA C:2012, правило 3.1
Проверяйте идентификатор: 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
Проверяйте идентификатор: mathworks.misra.SwitchDefault
Идентифицируйте выражения случая switch, которые не имеют регистра по умолчанию.
Проверка флагов объектов модели, которые имеют выражения случая switch без случая по умолчанию.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений, а также кода, который соответствует стандартам CERT C, CWE, ISO/IEC TS 17961.
Проверка не помечает блоки без случаев по умолчанию, если они обоснованы Polyspace® аннотация. При запуске проверки в Blocks with justification таблице перечисляются блоки без случаев по умолчанию, которые имеют обоснование.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Объект модели имеет выражение случая switch без случая по умолчанию. | Для Switch Case блоков рассмотрите выбор < reservedrangesplaceholder0 > параметров блоков, чтобы явным образом задать случай по умолчанию. |
Вы можете:
Запустите эту проверку на своих моделях библиотеки.
Исключить блоки и графики из этой проверки, если у вас есть лицензия 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 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)
Проверяйте идентификатор: mathworks.misra.BusElementNames
Идентифицируйте имена объектов шины, которые используются в качестве имен элементов шины.
Использование этой проверки увеличивает вероятность генерации кода для встраиваемых приложений, который соответствует C:2012 MISRA. Флажки образцов, где Simulink имя объекта .Bus используется в качестве Simulink имени элемента .Bus.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Имя объекта шины используется в качестве имени элемента шины. | Измените имя объекта шины либо имя элемента шины так, чтобы они не совпадали. |
MISRA C:2012, правило 5.6
MISRA AC AGC, правило 5.3
Проверяйте идентификатор: mathworks.security.CodeGenSettings
Идентифицируйте параметры конфигурации, которые могут повлиять на податливость стандартам безопасного кодирования.
Следование рекомендациям этой проверки увеличивает вероятность генерации кода, который соответствует стандартам безопасного кодирования CERT C, CWE, ISO/IEC TS 17961.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Diagnostics | |
Значение параметра конфигурации <reservedrangesplaceholder1> Значение параметра конфигурации <reservedrangesplaceholder1> | Когда Support non-finite numbers есть:
|
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Use local settings или Enable All . | Установите Model Verification block enabling значение Disable All . |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным none или warning . | Установите Undirected event broadcasts значение error . |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным none . | Установите Wrap on overflow значение warning или error . |
Hardware Implementation | |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Undefined . | Установите Production hardware signed integer division rounds to значение Zero или Floor . |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Shift right on a signed integer as arithmetic shift. |
Simulation Target | |
Параметр конфигурации <reservedrangesplaceholder1> задано значение, отличное от 0 . | Установите Compile-time recursion limit for MATLAB functions значение 0 . |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Dynamic memory allocation in MATLAB functions. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Enable run-time recursion for MATLAB functions. |
Code Generation | |
Значение параметра конфигурации Code replacement library не установлено на None или AUTOSAR 4.0 . | Установите Code replacement library значение None или AUTOSAR 4.0 . |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить External mode. |
Параметр конфигурации <reservedrangesplaceholder0> сброшен. | Выберите Include comments. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить MAT-file logging. |
Для целевых систем на основе ERT параметров конфигурации <reservedrangesplaceholder0> очищается. | Выберите MATLAB user comments. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Replace multiplications by powers of two with signed bitwise shifts. |
Для целевых систем на основе ERT выбирается параметр конфигурации <reservedrangesplaceholder0> | Очистить Support continuous time. |
Для целевых систем на основе ERT выбирается параметр конфигурации <reservedrangesplaceholder0> | Очистить Support non-inlined S-functions. |
Значение параметра конфигурации <reservedrangesplaceholder0> устанавливается на целевом устройстве на основе GRT. | Установите System target file в целевое устройство на основе ERT. |
Выбран параметр конфигурации <reservedrangesplaceholder0>. | Очистить Use dynamic memory allocation for model initialization. Примечание Выбирайте только, когда Code Interface Packaging установлено на |
При нажатии кнопки мыши Modify All значения параметров изменяются на рекомендуемые значения.
Примечание
При клике Modify All для моделей с целевым объектом на основе GRT, Model Advisor не обновляет параметр конфигурации System target file для системы на основе ERT.
Подчеки параметра зависят от результатов параметра, отмеченного D в таблице результатов. Когда результатом является D-Warning, в столбце Current Value в таблице результатов указывается, что ограничение «Предварительное условие» не соблюдается для подшеков. После изменения параметра перезапустите проверку.
Примечание
Некоторые подчеки характерны для параметров конфигурации для систем на основе ERT. Эти параметры не обновляются при нажатии кнопки мыши Modify All если вы не измените модель на систему на основе ERT.
Проверяйте идентификатор: mathworks.security.BlockSupport
Идентифицируйте блоки, не рекомендуемые для податливости стандартам безопасного кодирования.
Следование рекомендациям этой проверки увеличивает вероятность генерации кода, который соответствует стандартам безопасного кодирования CERT C, CWE, ISO/IEC TS 17961.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Интерполяционные таблицы блоки, использующие кубическую интерполяцию сплайн или методы экстраполяции, были найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите другие методы интерполяции и экстраполяции для блоков Интерполяционной таблицы. |
Устаревшие блоки Интерполяционной таблицы были найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите замену устаревших блоков интерполяционной таблицы. |
S-Function Builder блоки были найдены в модели или подсистеме. | Рассмотрите замену блоков S-Function Builder на блоки, рекомендуемые для производства. |
From Workspace блоки были найдены в модели или подсистеме | Рассмотрите замену блоков Из Рабочей области на блоки, рекомендуемые для производства. |
Строковые блоки были найдены в модели или подсистеме. Конкретными блоками являются:
| Рассмотрите замену строковых блоков на блоки, рекомендуемые для производства. |
Вы можете:
Запустите эту проверку на своих моделях библиотеки.
Исключить блоки и графики из этой проверки, если у вас есть лицензия Simulink Check.
Проверка во время редактирования. Эта проверка поддерживается проверкой во время редактирования.
Обзор исключения Model Advisor (Simulink Check)
Проверяйте идентификатор: mathworks.codegen.QuestionableSubsysSetting
Идентифицируйте сомнительные настройки блоков подсистемы.
Блоки Subsystem, реализованные как функции void-void в сгенерированном коде, используют глобальную память для хранения подсистемы ввода-вывода.
Доступно с 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)
Проверяйте идентификатор: mathworks.codegen.RowMajorCodeGenSupport
Проверьте наличие блоков, не поддерживаемых для генерации кода основной строки.
Эта проверка идентифицирует блоки, которые не поддерживаются для генерации кода основной строки.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Интерфейсы модели с внешними данными, который находится в основной строке размещения массива. | Установите значение параметра конфигурации Array layout равным Row-major . |
Анализирует содержимое маскированных подсистем.
Проверяйте идентификатор: mathworks.codegen.RowMajorUnsetSFunction
Идентифицируйте S-функции TLC с отмененными размещениями массива.
Эта проверка идентифицирует S-функции, которые SSArrayLayout
установлено на SS_UNSET
. По умолчанию каждая S-функция имеет SSArrayLayout
значение свойства установлено в SS_UNSET
. Эта настройка отключает S-функцию для генерации кода основной строки. Когда для параметра конфигурации Array layout задано значение Row-major
, Embedded Coder сообщает об ошибке. Можно выключить ошибку, изменив External functions compatibility for row-major code generation на warning
или none
.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Column-major для генерации кода основного столбца. | Установите SSArrayLayout свойство к Column-major . |
Значение параметра конфигурации <reservedrangesplaceholder1> установлено равным Row-major для генерации кода основной строки. | Установите SSArrayLayout свойство к Row-major . |
Анализирует содержимое во всех маскированных подсистемах.
Проверяйте идентификатор: 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 равным Примечание Эта оптимизация происходит только при соблюдении определенных условий простоты и точности. Для получения дополнительной информации смотрите Handle Net Slope Computation (Fixed-Point Designer). |
Product блоки сконфигурированы с операцией деления для первого входа и операцией умножения для второго входа. | Противоположные входы, поэтому операция умножения происходит первой, а операция деления - второй. |
Product блоки сконфигурированы для выполнения нескольких операций деления. | Умножите все условия знаменателя вместе, а затем сделайте одно деление с помощью каскадных блоков Product. |
Product блоки сконфигурированы для выполнения многих операций умножения или деления. | Разделите операции на несколько блоков, причем каждый блок выполняет одно умножение или одну операцию деления. |
Код защиты, сгенерированный в рамках операции деления, избыточен. | Проверьте, что ваша модель не может вызвать исключения в операциях деления, а затем удалите избыточный код защиты путем установки параметра Optimization > Remove code that protects against division arithmetic exceptions в диалоговом окне Параметров конфигурации. |
Область значений типов данных входов блоков Sum превышает область значений типов данных выхода, что может вызвать переполнение или насыщение. | Измените типы данных выходов и аккумулятора, чтобы область значений равнялась или превышала все входы областей значений. Для примера, если модель имеет два входов
Тип данных областей значений выхода и аккумулятора должен равняться или превышать -128 к 255. A |
Блок 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)
Проверяйте идентификатор: mathworks.misra.ModelFunctionInterface
Идентифицируйте отсутствующие проверку типа const в указателях входных данных.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений. Контрольные флаги входных данных указатели, которые не имеют const qualifier.
Доступно с Embedded Coder и Simulink Check.
Состояние | Рекомендуемое действие |
---|---|
Для указателя входных данных не определен квалификатор const. | Рассмотрите добавление квалификатора const к входным данным указателю. |
MISRA C:2012, правило 8.13
Проверяйте идентификатор: mathworks.codegen.QuestionableFxptOperations
Идентифицируйте операции с фиксированной точкой, которые могут привести к неоптимальным результатам.
Менее эффективный код может быть результатом блоков, которые генерируют громоздкие операции умножения и деления, дорогой код преобразования, неэффективности в блоках интерполяционной таблицы и дорогой код сравнения.
Условия | Рекомендуемое действие |
---|---|
Целочисленное деление сгенерированного кода большое. | В диалоговом окне Параметров конфигурации на панели Hardware Implementation установите рекомендуемое значение параметра Production hardware signed integer division rounds to. |
Интерполяционная таблица вектор входа значений не разделена равномерно. | Если данные точек по оси Х нетронуты, настройте данные так, чтобы они имели четную степень 2 интервала. Посмотрите fixpt_look1_func_approx . |
Вектор Интерполяционная Таблица входа значений не равномерно распределен при квантовании, но он очень близок к равномерному распределению. | Если данные точек по оси Х нетронуты, настройте данные так, чтобы они имели четную степень 2 интервала. Посмотрите fixpt_evenspace_cleanup . |
Вектор Интерполяционная Таблица входа значений разделен равномерно, но интервал не является степенью 2. | Если данные точек по оси Х нетронуты, настройте данные так, чтобы они имели четную степень 2 интервала. Посмотрите fixpt_look1_func_approx . |
Для блока Prelookup или n-D Интерполяционная Таблица 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)
Проверяйте идентификатор: mathworks.codegen.ExpensiveSaturationRoundingCode
Проверьте наличие блоков, которые генерируют дорогой округляющий код.
Сгенерированный округляющий код неэффективен из-за Integer rounding mode настройки параметра.
Доступно с Embedded Coder.
Состояние | Рекомендуемое действие |
---|---|
Сгенерированный код неэффективен. | Установите рекомендуемое значение параметра Function Block Parameters > Integer rounding mode. |
Если у вас есть лицензия Simulink Check, можно исключить блоки и графики из этой проверки.
Идентифицируйте блоки, которые генерируют дорогой округляющий код (Fixed-Point Designer)
Обзор исключения Model Advisor (Simulink Check)
Проверяйте идентификатор: mathworks.misra.CompliantCGIRConstructions
Идентифицируйте блоки Simulink, которые содержат побитовые операции над целыми числами со знаком.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений, а также кода, который соответствует стандартам CERT C и CWE.
Доступно с Embedded Coder и Simulink Check.
Эта проверка требует лицензии Stateflow, когда Stateflow используется в модели.
Состояние | Рекомендуемое действие |
---|---|
Модель имеет блоки, которые содержат побитовые операции над целыми числами со знаком. | Рассмотрите использование беззнаковых целых чисел для побитовых операций. |
Вы можете:
Проверка предполагает, что код генерируется для всей модели. Когда код генерируется подсистемой build или экспортов функций, проверка может продукт неправильные результаты.
Исключить блоки и графики из этой проверки, если у вас есть лицензия Simulink Check.
MISRA C:2012, правило 10.1
CERT C, INT13-C
CWE, CWE-682
hisl_0060: Параметры конфигурации, улучшающие податливость C:2012 MISRA
Проверяйте идентификатор: mathworks.misra.RecursionCompliance
Идентифицируйте рекурсивные вызовы функций в диаграммах Stateflow.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений. Чек-флаги графиков, которые имеют рекурсивные вызовы функций.
Доступно с Embedded Coder и Simulink Check.
Для этой проверки требуется лицензия Stateflow.
Состояние | Рекомендуемое действие |
---|---|
График имеет рекурсивный вызов функции. | Удалите рекурсивный вызов функции. |
MISRA C:2012, правило 17.2
Избегайте нежелательной рекурсии в графике (Stateflow)
Проверяйте идентификатор: mathworks.misra.CompareFloatEquality
Идентифицируйте операции равенства и неравенства для значений с плавающей точкой.
Источники проверочных флагов, вызывающие операции равенства или неравенства для значений с плавающей точкой.
Следование рекомендациям этой проверки увеличивает вероятность генерации MISRA C:2012 совместимого кода для встраиваемых приложений, а также кода, который соответствует стандартам CERT C и CWE.
Проверка не помечает блоки с операциями равенства или неравенства для значений с плавающей точкой, если они обоснованы аннотацией Polyspace. Когда вы запускаете проверку, в Blocks with justification таблице перечисляются блоки с операциями равенства или неравенства, которые имеют обоснование.
Доступно с Embedded Coder и 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.
Доступно с Embedded Coder и 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
Проверяет, содержат ли имена блоков на панели Code Perspective недопустимые символы.
Эта проверка во время редактирования оценивает имена блоков на панели Code Perspective. Проверка сообщает о недопустимых символах в именах блоков, за исключением:
Блоки, которые игнорируются или не рекомендуются для генерации кода
Блоки виртуальных Subsystem
Проверка проверяет, соответствуют ли имена блоков следующим рекомендациям:
Форма:
имя:
Не начинается с числа
Не включает пространства в начале имени блока
Не использует символы двойного байта
Возвраты каретки разрешены
Разрешенные символы:
имя:
a b c d f g h i j k l m n p r s u v x y z
A 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 не соответствует рекомендациям. | Обновите имя блока в соответствии с инструкциями. |
Работает на библиотечных моделях.
Анализирует содержимое связанных с библиотекой блоков.
Анализирует содержимое маскированных подсистем.
Позволяет исключения блоков и графиков.