MathWorks® оценивает код С, сгенерированный Embedded Coder® из Simulink® и Stateflow® против стандартов кодирования C:2012 MISRA. Результаты этих усилий представлены в этих сводных таблицах податливости. Эти таблицы определяют:
Методы, используемые для получения податливости:
Соответствие: Податливость правилу/директиве достигается путем соблюдения процесса генерации кода, руководств по моделированию или проверок Model Advisor. Когда это применимо, существуют пояснительные примечания, которые предоставляют информацию, относящуюся к методам податливости или действиям, которые можно выполнить, чтобы удовлетворить директиве или правилу.
Отклонение: Правило или директива не соответствует.
Является ли Polyspace® MISRA C:2012 Checker поддерживает правило или директиву.
Эти таблицы можно использовать при подготовке оператора о податливости C:2012 MISRA для проекта в соответствии с требованиями раздела 5.3 C:2012 Руководства MISRA по использованию языка C в критических системах документа. Эти таблицы соответствуют опубликованным таблицам правил и C:2012 MISRA. Они основаны только на категориях «Обязательно» и «Обязательно» (не для категорий «Консультация» и «Чтение»).
«Реализация» MISRA C:2012 директивы
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
1.1 | Необходимый |
Соответствует:
| Да, частично поддерживается |
Директивы «Компиляция и сборка» MISRA C:2012
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
2.1 | Необходимый | Соответствующий | Да |
«Трассируемость требований» MISRA C:2012 директивы
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
3.1 | Необходимый |
Соответствует:
| Нет |
Коды Design» MISRA C:2012
Директива | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
4.1 | Необходимый |
Соответствует:
| Да |
4.3 | Необходимый |
Соответствует:
| Нет |
4.6 | Необходимый |
Не применяется. | Н/Д |
4.7 | Необходимый |
Соответствует:
Отклонение:
| Да[a] |
4.10 | Необходимый | Соответствующий | Да |
4.11 | Необходимый |
Соответствует:
| Да |
4.12 | Необходимый |
Соответствует:
| Нет |
[a] Polyspace MISRA C:2012 Checker может отметить Директиву 4.7 как нарушение Правила 17.7 (Polyspace Bug Finder) для пользовательских функций, когда нет информации о том, содержит ли возвращаемое значение информацию об ошибке. |
«Стандартное окружение C» MISRA C:2012 Правило
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
1.1 | Необходимый | Соответствующий | Да |
1.3 | Необходимый | Соответствующий | Да |
Правила C:2012 «Неиспользованный код» MISRA
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
2.1 | Необходимый |
Соответствует:
| Да |
2.2 | Необходимый | Соответствующий | Да |
«Комментарии» Правила C:2012 MISRA
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
3.1 | Необходимый |
Соответствует:
| Да |
3.2 | Необходимый | Соответствующий | Да |
Правила C:2012 MISRA «Наборы символов и лексические соглашения»
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
4.1 | Необходимый | Соответствующий | Да |
Правила C:2012 MISRA «Идентификаторы»
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
5.1 | Необходимый |
Соответствует:
| Да |
5.2 | Необходимый |
Соответствует:
| Да |
5.4 | Необходимый |
Соответствует:
| Да |
5.5 | Необходимый |
Соответствует:
| Да |
5.6 | Необходимый |
Соответствует:
| Да |
5.7 | Необходимый |
Соответствует:
| Да |
5.8 | Необходимый |
Соответствует:
| Да |
«Типы» MISRA C:2012 Правила
Правила C:2012 MISRA «Литералы и константы»
Правило | Категория | Податливость | Поддержка 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 | Необходимый | Соответствующий | Да |
Правила C:2012 «Инициализация» MISRA
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
9.1 | Обязательный |
Соответствует:
| Да |
9.4 | Необходимый | Соответствующий | Да |
9.5 | Необходимый | Соответствующий | Да |
Правила «Модель основных типов» MISRA C:2012
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
10.2 | Необходимый | Соответствующий | Да |
«Преобразование типа указателя» MISRA C:2012 Правила
Правила C:2012 MISRA «Выражения»
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
12.2 | Необходимый | Соответствующий | Да |
«Побочные эффекты» MISRA C:2012 Правила
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
13.1 | Необходимый | Соответствующий | Да |
13.2 | Необходимый |
Соответствует:
| Да |
13.5 | Необходимый |
Соответствует:
Отклонение:
| Да |
13.6 | Обязательный | Соответствующий | Да |
Правила C:2012 MISRA «Выражения оператора управления»
Правила C:2012 MISRA «Поток управления»
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
15.2 | Необходимый | Соответствующий | Да |
15.3 | Необходимый | Соответствующий | Да |
15.6 | Необходимый | Соответствующий | Да |
15.7 | Необходимый | Соответствующий | Да |
Правила C:2012 MISRA «Switch options»
«Функции» MISRA C:2012 Правила
Правила C:2012 MISRA «указатели и массивы»
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
18.1 | Необходимый | Соответствующий | Да |
18.2 | Необходимый | Соответствующий | Да |
18.3 | Необходимый | Соответствующий | Да |
18.6 | Необходимый | Соответствующий | Да |
18.7 | Необходимый | Соответствующий | Да |
18.8 | Необходимый | Соответствующий | Да |
Правила C:2012 MISRA «перекрывающегося хранилища»
Правило | Категория | Податливость | Поддержка 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 | Необходимый | Соответствующий | Да |
Правила C:2012 MISRA «Стандартные библиотеки»
Правило | Категория | Податливость | Поддержка 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 | Необходимый | Соответствующий | Да |
Правила C:2012 MISRA «Ресурсы»
Правило | Категория | Податливость | Поддержка Polyspace? |
---|---|---|---|
22.1 | Необходимый | Соответствующий | Да |
22.2 | Обязательный | Соответствующий | Да |
22.3 | Необходимый | Соответствующий | Да |
22.4 | Обязательный | Соответствующий | Да |
22.5 | Обязательный | Соответствующий | Да |
22.6 | Обязательный | Соответствующий | Да |
Эти пояснительные примечания содержатся в сводных таблицах MISRA C:2012 Compliance Information.
Информация об определяемом реализацией поведении для Embedded Coder доступна в разделе «Настройка опций окружения выполнения». Документация компилятора находится вне возможностей.
Управление кодировкой набора символов осуществляется с помощью SavedCharacterEncoding
параметр модели. Для получения дополнительной информации см. slCharacterEncoding
.
Сконфигурируйте метод целочисленного деления в диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) на панели Hardware Implementation. Для получения дополнительной информации см. Раздел «Настройка опций окружения во время выполнения»
Embedded Coder генерирует #pragma
когда пользователь:
В обоих образцах вы несете ответственность за документирование предполагаемого использования #pragma
. Для получения дополнительной информации смотрите Control Data и Function Placement in Memory путем вставки Pragmas.
Чтобы включить генерацию битовых полей:
Выберите по крайней мере один из следующих параметров конфигурации модели:
Создайте пользовательский класс памяти с определенными битовыми полями. Дополнительные сведения см. в разделе Создание классов памяти при помощи Custom Storage Class Designer.
Если ваша модель использует преобразование одного типа данных в другой, Polyspace Checker показывает нарушение Dir 1.1 из сгенерированного кода модели. В этом случае нарушение, исходящее из модели, не является проблемой, если вы документируете это явное преобразование в соответствии с руководствами MISRA.
Можно связать элементы модели требований. Эти ссылки включены в сгенерированный код C, чтобы обеспечить трассируемость из документа требований, к элементам модели и к сгенерированному коду. Для получения дополнительной информации смотрите View Simulink Requirements Links Associated with Элементы модели and Link Blocks and 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 заменяет основные типы данных типами typedefs, которые совместимы с Директивой 4.6. Руководство не требуется, так как это поведение по умолчанию в Embedded Coder. Для получения дополнительной информации смотрите Заменить и Переименовать типы данных для соответствия стандартам кодирования и Typedef.
Требования данной директивы удовлетворяются:
«Статически демонстрируйте, что входные параметры никогда не могут принимать недопустимые значения».
Можно использовать Polyspace Code Prover, чтобы проанализировать области значений параметров и доказать отсутствие ошибок времени выполнения, вызванных значениями вне области допустимого. Для получения дополнительной информации смотрите Запуск анализа Polyspace на коде, сгенерированном с помощью Embedded Coder (Polyspace Code Prover).
Embedded Coder не проверяет пользовательский код из Stateflow. Вы должны позаботиться о сообщенных нарушениях.
Embedded Coder настраивается таким образом, чтобы ограничивать количество символов, налагаемых реализацией. Для получения дополнительной информации смотрите Максимальную длину идентификатора.
Чтобы гарантировать уникальные имена для различных типов переменных (переменные локальных возможностей, переменные глобальных возможностей, макросы и так далее), реализуйте соглашение об именовании. Для получения дополнительной информации смотрите Параметры конфигурации модели: Символы генерации кода.
Embedded Coder поддерживает использование перечисленных данных. Файл, используемый для определения перечисления, может быть сгенерирован вручную или автоматически. Файлы, определяющие перечисления, сгенерированные Embedded Coder, по проекту соответствуют MISRA C:2012 правилу 8.12. Если вы вручную создаете файл определения, вы несете ответственность за обеспечение податливости. Для получения дополнительной информации смотрите Использование перечисленных данных в моделях Simulink.
Embedded Coder не создает непосредственно данные типа char. Данные типа char могут быть введены пользовательскими S-функциями, библиотеками замещения кода и пользовательскими классами памяти. В этом случае ограничьте использование простого char:
Простой тип char для значений символов
Подписанный и беззнаковый тип char для числовых значений