MathWorks® оценивает код С, сгенерированный Embedded Coder® от Simulink® и Stateflow® против MISRA C:2012, кодирующего стандарты. Результаты этого усилия доступны в этих сводных таблицах податливости. Эти таблицы идентифицируют:
Методы раньше получали податливость:
Совместимый: Податливость к правилу/директиве достигается через соблюдение процесса генерации кода, руководств по моделированию или проверок Model Advisor. Когда применимо, существуют пояснительные записки, которые предоставляют информацию, относящуюся к методам податливости или действиям, которые можно выполнить, чтобы удовлетворить директиве или правилу.
Отклонение: правило или директива несовместимы.
Поддерживает ли Средство проверки Polyspace® MISRA C:2012 правило или директиву.
Можно использовать эти таблицы при подготовке оператора податливости MISRA C:2012 к проекту как требуется на раздел 5.3 из Инструкций MISRA C:2012 для Использования языка C в Критическом Системном документе. Эти таблицы выравниваются с опубликованным правилом MISRA C:2012 и направляющими таблицами. Они основаны на Обязательных и Необходимых категориях только (не для категорий Консультации и Удобочитаемости).
"Реализация" директивы MISRA C:2012
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
1.1 | Необходимый |
Совместимый:
| Да, частично поддерживаемый |
"Компиляция и сборка" директивы MISRA C:2012
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
2.1 | Необходимый | Совместимый | Да |
"Трассируемость требований" директивы MISRA C:2012
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
3.1 | Необходимый |
Совместимый:
| Нет |
"Проект кода" директивы MISRA C:2012
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
4.1 | Необходимый |
Совместимый:
| Да |
4.3 | Необходимый |
Совместимый:
| Нет |
4.6 | Необходимый |
Не применяется. | Нет данных |
4.7 | Необходимый |
Совместимый:
Отклонение:
| Да |
4.10 | Необходимый | Совместимый | Да |
4.11 | Необходимый |
Совместимый:
| Да |
4.12 | Необходимый |
Совместимый:
| Нет |
[a] Средство проверки MISRA C:2012 Polyspace может отметить Директиву 4.7, как правило, 17,7 нарушений (Polyspace Bug Finder) для пользовательских функций, когда нет никакого знания о том, содержит ли возвращаемое значение информацию об ошибке. |
"Стандарт C среда" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
1.1 | Необходимый | Совместимый | Да |
1.3 | Необходимый | Совместимый | Да |
"Неиспользованный код" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
2.1 | Необходимый |
Совместимый:
| Да |
2.2 | Необходимый | Совместимый | Да |
"Комментарии" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
3.1 | Необходимый |
Совместимый:
| Да |
3.2 | Необходимый | Совместимый | Да |
"Наборы символов и лексические соглашения" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
4.1 | Необходимый | Совместимый | Да |
"Идентификаторы" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
5.1 | Необходимый |
Совместимый:
| Да |
5.2 | Необходимый |
Совместимый:
| Да |
5.4 | Необходимый |
Совместимый:
| Да |
5.5 | Необходимый |
Совместимый:
| Да |
5.6 | Необходимый |
Совместимый:
| Да |
5.7 | Необходимый |
Совместимый:
| Да |
5.8 | Необходимый |
Совместимый:
| Да |
"Типы" правила MISRA C:2012
"Литералы и константы" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
7.1 | Необходимый | Совместимый | Да |
7.2 | Необходимый | Совместимый | Да |
7.4 | Необходимый | Совместимый | Да |
"Объявления и определения" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
8.1 | Необходимый | Совместимый | Да |
8.2 | Необходимый | Совместимый | Да |
8.3 | Необходимый | Совместимый | Да |
8.6 | Необходимый | Совместимый | Да |
8.8 | Необходимый | Совместимый | Да |
8.10 | Необходимый | Совместимый | Да |
8.12 | Необходимый |
Совместимый:
| Да |
8.14 | Необходимый | Совместимый | Да |
"Инициализация" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
9.1 | Обязательный |
Совместимый:
| Да |
9.4 | Необходимый | Совместимый | Да |
9.5 | Необходимый | Совместимый | Да |
"Существенная модель типа" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
10.2 | Необходимый | Совместимый | Да |
"Преобразование типа указателя" правила MISRA C:2012
"Выражения" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
12.2 | Необходимый | Совместимый | Да |
"Побочные эффекты" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
13.1 | Необходимый | Совместимый | Да |
13.2 | Необходимый |
Совместимый:
| Да |
13.5 | Необходимый |
Совместимый:
Отклонение:
| Да |
13.6 | Обязательный | Совместимый | Да |
"Управляйте выражениями оператора" правила MISRA C:2012
"Поток управления" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
15.2 | Необходимый | Совместимый | Да |
15.3 | Необходимый | Совместимый | Да |
15.6 | Необходимый | Совместимый | Да |
15.7 | Необходимый | Совместимый | Да |
"Операторы switch" Правила MISRA C:2012
"Функции" правила MISRA C:2012
"Указатели и массивы" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
18.1 | Необходимый | Совместимый | Да |
18.2 | Необходимый | Совместимый | Да |
18.3 | Необходимый | Совместимый | Да |
18.6 | Необходимый | Совместимый | Да |
18.7 | Необходимый | Совместимый | Да |
18.8 | Необходимый | Совместимый | Да |
"Перекрывая устройство хранения данных" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
19.1 | Обязательный | Совместимый | Да |
"Предварительно обрабатывая директивы" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
20.2 | Необходимый | Совместимый | Да |
20.3 | Необходимый | Совместимый | Да |
20.4 | Необходимый | Совместимый | Да |
20.6 | Необходимый | Совместимый | Да |
20.7 | Необходимый | Совместимый | Да |
20.9 | Необходимый | Совместимый | Да |
20.11 | Необходимый | Совместимый | Да |
20.12 | Необходимый | Совместимый | Да |
20.13 | Необходимый | Совместимый | Да |
20.14 | Необходимый | Совместимый | Да |
"Стандартные библиотеки" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
21.1 | Необходимый | Совместимый | Да |
21.2 | Необходимый |
Совместимый:
| Да |
21.3 | Необходимый |
Совместимый:
| Да |
21.4 | Необходимый | Совместимый | Да |
21.5 | Необходимый | Совместимый | Да |
21.6 | Необходимый |
Совместимый:
| Да |
21.7 | Необходимый | Совместимый | Да |
21.8 | Необходимый | Совместимый | Да |
21.9 | Необходимый | Совместимый | Да |
21.10 | Необходимый | Совместимый | Да |
21.11 | Необходимый | Совместимый | Да |
21.12 | Необходимый | Совместимый | Да |
"Ресурсы" правила MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
22.1 | Необходимый | Совместимый | Да |
22.2 | Обязательный | Совместимый | Да |
22.3 | Необходимый | Совместимый | Да |
22.4 | Обязательный | Совместимый | Да |
22.5 | Обязательный | Совместимый | Да |
22.6 | Обязательный | Совместимый | Да |
На эти пояснительные записки ссылаются из Сводных таблиц информации о Податливости MISRA C:2012.
Информация о заданном реализацией поведении для Embedded Coder доступна в, Конфигурируют Опции Среды выполнения. Документация компилятора вне осциллографа.
Кодирование набора символов управляемо при помощи SavedCharacterEncoding
параметр модели. Для получения дополнительной информации смотрите slCharacterEncoding
.
Сконфигурируйте метод целочисленного деления в диалоговом окне Model Configuration Parameters на панели Hardware Implementation. Для получения дополнительной информации смотрите, Конфигурируют Опции Среды выполнения
Embedded Coder генерирует #pragma
когда пользователь:
В обоих экземплярах вы ответственны за документирование надлежащего использования #pragma
. Для получения дополнительной информации смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм.
Включить генерацию битовых полей:
Выберите по крайней мере один из этих параметров конфигурации модели:
Создайте пользовательский класс памяти с заданными битовыми полями. Смотрите Создают Классы памяти при помощи Custom Storage Class Designer для получения дополнительной информации.
Если ваше преобразование использования модели одного типа данных другому, Средство проверки Polyspace показывает нарушение Dir 1.1 от сгенерированного кода модели. В этом случае нарушение, прибывающее из модели, не является проблемой, если вы документируете это явное преобразование согласно инструкциям MISRA.
Можно соединить элементы модели требований. Эти ссылки включены в сгенерированный код C, чтобы обеспечить трассируемость из документа требований к элементам модели, и к сгенерированному коду. Для получения дополнительной информации, Ссылки Simulink Requirements вида на море, Связанные с Элементами модели и Блоками Ссылки и Требованиями (Simulink Requirements).
Можно использовать Polyspace Bug Finder™, чтобы идентифицировать ошибки времени выполнения и Polyspace Code Prover™, чтобы доказать отсутствие ошибок времени выполнения. Для получения информации см.:
Сконфигурируйте и запущенный анализ (Polyspace Code Prover)
Сконфигурируйте и запущенный анализ (Polyspace Bug Finder)
Simulink Design Verifier может использоваться, чтобы обнаружить ошибки проектирования на уровне модели. Для получения дополнительной информации смотрите Запуск Анализ Поиска ошибок проектирования (Simulink Design Verifier).
Embedded Coder непосредственно не вызывает код ассемблера. Можно добавить вызовы функций ассемблера через S-функции, заменяющие библиотеки кода, Stateflow, и в блоках MATLAB®. Эти вызовы документируются как вызовы Внешних Функций C. В этих случаях вы ответственны за инкапсуляцию.
Для получения дополнительной информации см.:
Embedded Coder заменяет типы основных данных на типы определений типов, которые совместимы с Директивой 4.6. Инструкция не требуется, потому что это поведение является поведением по умолчанию в Embedded Coder. Для получения дополнительной информации смотрите Замену и Переименуйте Типы данных, чтобы Соответствовать Кодированию Стандартов и Определений типов.
Требованиями этой директивы удовлетворяют:
“Продемонстрируйте статически, что входные параметры никогда не могут принимать недопустимые значения”.
Можно использовать Polyspace Code Prover, чтобы анализировать области значений параметра и доказать отсутствие ошибок времени выполнения, вызванных значениями из области значений. Для получения дополнительной информации смотрите Анализ Polyspace Запуска Кода, Сгенерированного с Embedded Coder (Polyspace Code Prover).
Embedded Coder не проверяет определяемый пользователем код из Stateflow. Необходимо заботиться о нарушениях, о которых сообщают.
Embedded Coder конфигурируем, чтобы ограничить количество символов, наложенных реализацией. Для получения дополнительной информации смотрите Максимальную длину идентификатора.
Гарантировать уникальные имена для различных типов переменных (локальные переменные осциллографа, переменные глобальной области видимости, макросы, и так далее), реализуют соглашение о присвоении имен. Для получения дополнительной информации смотрите Параметры конфигурации Модели: Символы Генерации кода.
Embedded Coder поддерживает использование перечислимых данных. Файл, используемый, чтобы задать перечисление, может быть или вручную или автоматически сгенерирован. Файлы, задающие перечисления, сгенерированные Embedded Coder, совместимы с Правилом 8.12 MISRA C:2012 проектом. Если вы вручную создаете файл определения, вы ответственны за обеспечение податливости. Для получения дополнительной информации смотрите Использование Перечислимые Данные в Моделях Simulink.
Embedded Coder непосредственно не создает данные char типа. Данные символьного типа могут быть введены пользовательскими S-функциями, заменяющими библиотеками кода и пользовательскими классами памяти. В этом случае ограничьте использование простого char к:
Простой символьный тип для символьных значений
Подписанный и символьный тип без знака для числовых значений