Сводные таблицы информации о соответствии MISRA C:2012 определяют рекомендации по моделированию, которые имеют отношение к соответствию сгенерированного кода C стандартам кодирования MISRA C:2012. Список этих руководств и соответствующую проверку Model Advisor см. в разделе Рекомендации по моделированию систем с высокой целостностью для MISRA C:2012 Compliance. Для получения информации об объяснении MISRA для Образцовых проверок Советника посмотрите Объяснение MISRA C:2012 для Образцового советника Чекса.
В дополнение к рекомендациям по моделированию, разработанным Консультативным советом MathWorks (MAB), компания MathWorks ® опубликовала ряд рекомендаций по моделированию, посвященных приложениям с высокой целостностью .
Во многих руководствах по моделированию с высокой целостностью имеются проверки Model Advisor, которые можно использовать для проверки соответствия модели этой рекомендации. Эта таблица определяет рекомендации по моделированию с высокой степенью целостности и предоставляет соответствующую проверку Model Advisor. Не все рекомендации по моделированию имеют соответствующую проверку Model Advisor.
В этой таблице приводится обоснование MISRA C:2012 для проверок Model Advisor.
| Проверка помощника по модели | MISRA C:2012 Правило или Директива | |
|---|---|---|
| Проверка параметров конфигурации для MISRA C:2012 (Simulink Check) | ||
Задать для параметра «Использовать деление» для расчета чистого уклона с фиксированной точкой значение On или Use division for reciprocals of integers only. | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа. | |
Установить выход блока Inf или NaN в warning или error. | MISRA C:2012 Директива 4.1: Отказы во время работы должны быть сведены к минимуму | |
Установка блока проверки модели, позволяющего Disable All. | Общая рекомендация для встраиваемых систем. | |
Установка для широковещательных передач неориентированных событий значения error. | MISRA C:2012 Правило 17.2: Функции не должны называть себя прямо или косвенно | |
Задайте для параметра конфигурации Wrap on overflow значение warning или error. | MISRA C:2012 Директива 4.1: Отказы во время работы должны быть сведены к минимуму | |
Установить для производственного оборудования, подписанного целочисленными раундами деления, значение Zero или Floor. | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа. | |
| Снимите флажок «Сдвиг справа от целого числа со знаком» в качестве арифметического сдвига. | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа. | |
Установить предел рекурсии времени компиляции для функций MATLAB в 0 . | MISRA C:2012 Правило 17.2: Функции не должны называть себя прямо или косвенно | |
| Снимите флажок Динамическое выделение памяти в функциях MATLAB. | Директива MISRA C:2012 4.12: Динамическое выделение памяти не должно использоваться. MISRA C:2012 Правило 21.3: Функции выделения и освобождения памяти < stdlib.h > не используются. | |
| Снимите флажок Включить рекурсию во время выполнения для функций MATLAB. | MISRA C:2012 Правило 17.2: Функции не должны называть себя прямо или косвенно | |
Установить спецификатор типа декларатора Bitfield в значение uint_T. | MISRA C:2012 Правило 6.1: Битовые поля должны объявляться только с соответствующим типом MISRA C:2012 Правило 6.2: Одноразрядные именованные битовые поля не должны быть подписанного типа | |
Задать для режимов литья значение Standards Compliant. | MISRA C:2012 Правила 10.x: Модель основного типа | |
Задать для библиотеки замены кода значение | Общая рекомендация для встраиваемых систем. | |
| Снимите флажок Внешний режим. | Общая рекомендация для встраиваемых систем. Директива MISRA C:2012 4.12 Динамическое выделение памяти не должно использоваться MISRA C:2012 Правило 21.3 Функции выделения и освобождения памяти < stdlib.h > не должны использоваться MISRA C:2012 Правило 21.6 Функции ввода/вывода стандартной библиотеки не должны использоваться | |
| Снимите флажок «Генерировать общие константы». | Правило MISRA 8.5: Внешний объект или функция должны быть объявлены один раз в одном и только в одном файле | |
Очистка журнала файлов MAT | Общая рекомендация для встраиваемых систем. | |
Установите для параметра Максимальная длина идентификатора предел, зависящий от реализации. Значение по умолчанию: 31. | MISRA C:2012 Правила 5.1-9: Идентификаторы | |
Установить уровень «Круглые скобки» в значение Maximum (Specify precedence with parentheses). | MISRA C:2012 Правило 12.1: Приоритет операторов в выражениях должен быть явным | |
| Выберите Сохранить статическое ключевое слово в объявлениях функций. | MISRA Правило 8.7: Функции и объекты не должны определяться с внешней связью, если на них имеются ссылки только в одной единице перевода MISRA Правило 8.8: Спецификатор статического класса хранения должен использоваться во всех объявлениях объектов и функций, имеющих внутреннюю связь | |
| Clear Заменить умножение на степени двух со знаком побитовых сдвигов. | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа | |
Задать для параметра Размещение общего кода значение | Обязательное условие параметра конфигурации Создание общих констант | |
| Очистить время непрерывной поддержки. | Общая рекомендация для встраиваемых систем. | |
Очистить Поддержку неграничных чисел | MISRA C:2012 Директива 4.1: Отказы во время работы должны быть сведены к минимуму | |
| Снимите флажок Поддерживать неинлинированные S-функции. | Общая рекомендация для встраиваемых систем. | |
Установите системные идентификаторы в значение Shortened. | MISRA C:2012 5.1: Внешние идентификаторы должны быть различными MISRA C:2012 5.2: Идентификаторы, объявленные в одном объеме и пространстве имен, должны быть различными MISRA C:2012 5.4: Идентификаторы макросов должны быть различными MISRA C:2012 5,5: идентификаторы должны отличаться от имен макросов | |
| Установите системный целевой файл в целевой файл на основе ERT. | Общая рекомендация для встраиваемых систем. | |
Снимите флажок Использовать динамическое выделение памяти для инициализации модели. Выбор осуществляется только в том случае, если для параметра «Упаковка интерфейса кода» установлено значение | Директива MISRA C:2012 4.12: Динамическое выделение памяти не должно использоваться. MISRA C:2012 Правило 21.3: Функции выделения и освобождения памяти < stdlib.h > не используются. | |
EnableSignedLeftShifts - выкл. | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа | |
| Проверка блоков, не рекомендованных для развертывания производственного кода C/C + + | Общая рекомендация для встраиваемых систем. | |
| Проверить наличие блоков, не рекомендованных для MISRA C:2012 | ||
Поиск блоков таблицы с использованием методов интерполяции или экстраполяции кубических сплайнов. Конкретными блоками являются:
| MISRA C:2012 Правило 11.3: Приведение не должно выполняться между указателем на тип объекта и указателем на другой тип объекта. MISRA C:2012 Правило 11.5: Преобразование из указателя в пустоту в указатель на объект не должно выполняться. MISRA C:2012 Правило 11.8: Отливка не должна исключать никаких противоречий или изменчивых квалификаций из типа, на который указывает указатель. MISRA C:2012 Правило 11.9: Макрос NULL должен быть единственной разрешенной формой целочисленного нулевого указателя константы. MISRA C:2012 Правило 12.1: Приоритет операторов в выражениях должен быть явным. | |
Устаревшие блоки таблицы подстановки. Конкретными блоками являются:
| MISRA C:2012 Правило 11.3: Приведение не должно выполняться между указателем на тип объекта и указателем на другой тип объекта. MISRA C:2012 Правило 11.5: Преобразование из указателя в пустоту в указатель на объект не должно выполняться. MISRA C:2012 Правило 11.8: Отливка не должна исключать никаких противоречий или изменчивых квалификаций из типа, на который указывает указатель. MISRA C:2012 Правило 11.9: Макрос NULL должен быть единственной разрешенной формой целочисленного нулевого указателя константы. MISRA C:2012 Правило 12.1: Приоритет операторов в выражениях должен быть явным. MISRA C:2012 Правило 12.2: Операнд правой руки оператора переключения должен находиться в диапазоне от нуля до единицы меньше ширины в битах существенного типа операнда левой руки. | |
| Блоки построителя S-функций | MISRA C:2012 Правило 8.4: Совместимое объявление должно быть видимым при определении объекта или функции с внешней связью. MISRA C:2012 Правило 8.5: Внешний объект или функция объявляются один раз в одном и только в одном файле. | |
| Из блоков рабочей области | MISRA C:2012 Правило 18.4: Операторы +, -, + = и - = не должны применяться к выражению типа указателя. | |
Строковые блоки найдены в модели или подсистеме. Конкретными блоками являются:
| MISRA C:2012 Директива 4.7: Если функция возвращает информацию об ошибке, то эта информация об ошибке должна быть протестирована MISRA C:2012 Правило 17.7: Должно использоваться значение, возвращаемое функцией, не имеющей пустого типа возврата MISRA C:2012 Правило 21.6: Стандартные функции ввода/вывода библиотеки не должны использоваться | |
| Проверка неподдерживаемых имен блоков (Simulink Check) | MISRA C:2012 Правило 3.1: Символьные последовательности/* и//не должны использоваться в комментарии. | |
| Проверка использования блоков назначения (Simulink Check) | MISRA C:2012 Правило 9.1: Значение объекта с автоматической длительностью хранения не должно считываться до его установки. | |
| Проверка выражений вариантов переключения без варианта по умолчанию (Simulink Check) | MISRA C:2012 Правило 16.4: Каждый оператор коммутатора должен иметь метку по умолчанию. | |
| Проверка отсутствия портов ошибок для интерфейсов приемника AUTOSAR (Simulink Check) | MISRA C:2012 Директива 4.7 Если функция возвращает информацию об ошибке, то эта информация об ошибке должна быть протестирована. MISRA C:2012 Rule 17.7: Должно использоваться значение, возвращаемое функцией, тип возврата которой не является недействительным. | |
| Проверка побитовых операций со подписанными целыми числами (Simulink Check) | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа. | |
| Проверка рекурсивных вызовов функций (Simulink Check) | MISRA C:2012 Правило 17.2: Функции не должны называть себя прямо или косвенно. | |
| Проверка операций равенства и неравенства для значений с плавающей запятой (Simulink Check) | MISRA C:2012 Директива 1.1: Любое поведение, определяемое реализацией, от которого зависит результат программы, должно быть задокументировано и понято. | |
| Проверка отсутствующих квалификаторов const в функциях модели (Simulink Check) | MISRA C:2012 Правило 8.13: Указатель должен указывать на конст-квалифицированный тип, когда это возможно. | |
| Проверка длины целого слова (Simulink Check) | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа. | |
| Проверка имен объектов шины, используемых в качестве имен элементов шины (Simulink Check) | MISRA C:2012 Правило 10.1: Операнды не должны быть ненадлежащего существенного типа. MISRA C:2012 Правило 5.6: Имя typedef должно быть уникальным идентификатором. | |