DO-178C/DO-331 Проверки

DO-178C/DO-331 Проверки

DO-178C/DO-331 проверки упрощают разработку и поиск и устранение неисправностей моделей, из которых код сгенерирован для приложений, которые должны встретить безопасности или критически важным для миссии требованиям.

Model Advisor выполняет контроль лицензии Simulink® Check™, когда вы запускаетесь DO-178C/DO-331 проверки.

Эти проверки квалифицированы DO Qualification Kit к использованию в проектах, включающих стандарт DO-178 и связанные стандарты.

Смотрите также

Проверяйте связанные с безопасностью настройки генерации кода

ID проверки: mathworks.do178.CodeSet

Проверяйте настройку модели на настройки генерации кода, которые могут повлиять на безопасность.

Описание

Эта проверка проверяет, что образцовые параметры конфигурации для генерации кода установлены оптимально для связанного с безопасностью приложения.

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Опция, чтобы включать комментарии в сгенерированный код очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Include comments (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр GenerateComments на on.
Опция, чтобы включать комментарии, которые описывают код для блоков, очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Simulink block comments (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр SimulinkBlockComments на on.
Опция, чтобы включать комментарии, которые описывают код для блоков, устраненных из модели, очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Show eliminated blocks (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр ShowEliminatedStatement на on.
Опция, чтобы включать имена переменных параметра и исходных блоков как комментарии в описании структуры параметра модели в model_prm.h очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Verbose comments for SimulinkGlobal storage class (Simulink Coder) на Code Generation> панель Comments в диалоговом окне Configuration Parameters или установите параметр ForceParamTrailComments на on.
Опция, чтобы включать описания требования, присвоенные блокам Simulink как комментарии, очищена. Комментарии обеспечивают хорошую трассируемость между кодом и моделью. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Выберите Requirements in block comments (Simulink Coder) на Code Generation> панель Custom comments в диалоговом окне Configuration Parameters или установите параметр ReqsInCode на on.
Опция, чтобы сгенерировать неличные данные и операции выбрана. Поддержка неличных чисел является несоответствующей для встроенных систем реального времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: non-finite numbers (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SupportNonFinite на off.
Опция, чтобы сгенерировать и поддержать целочисленные счетчики в течение абсолютного и прошедшего времени выбрана. Поддержка в течение абсолютного времени является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: absolute time (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SupportAbsoluteTime на off.
Опция, чтобы сгенерировать код для блоков, которые используют непрерывное время, выбрана. Поддержка в течение непрерывного времени является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: continuous time (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SupportContinuousTime на off.
Опция, чтобы сгенерировать код для невстроенных S-функций выбрана. Эта опция требует поддержки неличных чисел, которая является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Support: non-inlined S-functions (Simulink Coder) в диалоговом окне Configuration Parameters или установите параметр SupportNonInlinedSFcns на off.
Опция, чтобы сгенерировать образцовые вызовы функции, совместимые с основным программным модулем цели pre-R2012a GRT, выбрана. Эта опция является несоответствующей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Classic call call interface (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр GRTInterface на off.
Опция, чтобы сгенерировать функцию model_update очищена. Наличие одного вызова функций вывода и обновления упрощает интерфейс до операционной системы реального времени (RTOS) и упрощает верификацию сгенерированного кода. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Выберите Single output/update function (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр CombineOutputUpdateFcns на on.
Опция, чтобы сгенерировать функцию model_terminate выбрана. Эта функция освобождает динамическую память, которая является неподходящей для связанных с безопасностью систем в реальном времени. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите Terminate function (Simulink Coder) на панели Code Generation в диалоговом окне Configuration Parameters или установите параметр IncludeMdlTerminateFcn на off.
Опция, чтобы регистрировать или состояние ошибки монитора очищена. Если вы не выбираете эту опцию, продукт Simulink Coder™ генерирует дополнительный код, который не может быть достижимым для тестирования. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Выберите Remove error status field in real-time model data structure (Simulink Coder) на Code Generation> панель Interface в диалоговом окне Configuration Parameters или установите параметр SuppressErrorStatus на on.
Журналирование MAT-файла выбрано. Эта опция добавляет дополнительный код для журналирования тестовых точек к MAT-файлу, который не поддержан целевыми процессорами. Используйте эту опцию только в тестовых обвязках. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером и DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером.)Очистите MAT-file logging (Simulink Coder) в диалоговом окне Configuration Parameters или установите параметр MatFileLogging на off.
Опция, которая задает стиль для использования круглой скобки, установлена в Minimum (Rely on C/C++ operators precedence) или в Nominal (Optimize for readability). Для связанных с безопасностью приложений явным образом задайте приоритет с круглыми скобками. (См. DO-331, Раздел MB.6.3.1.c – Требования высокого уровня совместимы с целевым компьютером, DO-331, Раздел MB.6.3.2.c – Низкоуровневые требования совместимы с целевым компьютером, и MISRA C:2012, Правилом 12.1.)Установите параметр ParenthesesLevel на Maximum (Specify precedence with parentheses).
Опция, которая задает, сохранить ли порядок операнда, очищена. Эта опция увеличивает трассируемость сгенерированного кода. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Установите параметр PreserveExpressionOrder на on.
Опция, которая задает, сохранить ли пустые первичные выражения условия в операторах if, очищена. Эта опция увеличивает трассируемость сгенерированного кода. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Установите параметр PreserveIfCondition на on.
Минимальное количество символов, заданных для генерации строк искажения имени, является меньше чем четырьмя. Можно использовать эту опцию, чтобы минимизировать вероятность, что параметр и имена сигнала изменятся во время генерации кода, когда модель изменится. Использование этой опции помогает с минимизацией различий кода между версиями файла, уменьшая усилие выполнить рассмотрения кода. (См. DO-331, Раздел MB.6.3.4.e – Исходный код прослеживаем к низкоуровневым требованиям.)Установите Minimum mangle length (Simulink Coder) на Code Generation> панель Symbols в диалоговом окне Configuration Parameters или параметре MangleLength к значению 4 или больше.

Результаты действия

Нажатие на Modify Settings конфигурирует настройки генерации типового кодекса, которые могут повлиять на безопасность.

Подпроверки зависят от результатов подпроверок, отмеченных с D в таблице результатов в окне Model Advisor.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Не позволяет исключения блоков или графиков.

Смотрите также

Проверяйте использование блоков Математических операций

ID проверки: mathworks.do178.MathOperationsBlocksUsage

Идентифицируйте использование блоков Математической операции, которые могут повлиять на безопасность.

Описание

Эта проверка осматривает использование следующих блоков:

  • Abs

  • Усиление

  • Математическая функция

    • Натуральный логарифм

    • Распространенный (базируются 10), логарифм

    • Остаток после деления

    • Обратная величина

  • “()” Присвоение

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие

Модель или подсистема содержат блок Absolute Value, который работает с одним из следующего:

  • Булевская переменная или тип входных данных без знака. Это условие результаты в недостижимых трассах симуляции через модель и может привести к недостижимому коду

  • Значение целого числа со знаком с флажком Saturate on integer overflow, не установленным. Для типов данных со знаком абсолютное значение наиболее отрицательной величины проблематично, потому что это не является представимым, по условию вводят. Это условие приводит к переполнению в сгенерированном коде.

Если идентифицированный блок Absolute Value работает с булевым или типом данных без знака, выполнить одно из следующих действий:

  • Измените вход блока Absolute Value к входному типу со знаком.

  • Удалите блок Absolute Value от модели.

Если идентифицированный блок Absolute Value работает с типом данных со знаком в диалоговом окне Block Parameters > Signal Attributes, выберите Saturate on integer overflow.

Модель или подсистема содержат блоки Усиления со значения 1 или единичная матрица.Если вы используете блоки Усиления в качестве буферов, рассматриваете заменяющий их на блоки Преобразования Сигнала.
Модель или подсистема содержат Математическую функцию - Натуральный логарифм блоки (log), которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с функцией log защитите вход к блоку от того, чтобы быть меньше чем или равным нулю. В противном случае вывод может произвести NaN или -Inf и привести к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема содержат Математическую функцию - Распространенный (базируйтесь 10), блоки (base 10 logarithm), которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с функцией log10 защитите вход к блоку от того, чтобы быть меньше чем или равным нулю. В противном случае вывод может произвести NaN или -Inf и привести к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема содержат Математическую функцию - Остаток после division(rem) блоки, которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с функцией rem защитите второй вход к блоку от равного нулю. В противном случае вывод может произвести Inf или -Inf и привести к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема содержат Математическую функцию - Обратная величина блоки (reciprocal), которые могут привести к неличным выходным сигналам. Неличные сигналы не поддержаны в режиме реального времени встраиваемые системы.

При использовании блока Math Function с функцией reciprocal защитите вход к блоку от равного нулю. В противном случае вывод может произвести Inf или -Inf и привести к ошибке времени выполнения в сгенерированном коде.

Модель или подсистема могут содержать блоки Присвоения с неполной инициализацией массивов, которые не имеют параметров блоков набором Action if any output element is not assigned к Error или Warning.

Установите параметры блоков Action if any output element is not assigned на одно из рекомендуемых значений:

  • Error, если блок Assignment не находится в подсистеме Итератора.

  • Warning, если блок Assignment находится в подсистеме Итератора.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое во всех подсистемах маскированных.

  • Позволяет исключения блоков и графиков.

Смотрите также

Проверяйте использование блоков Битовых операций и Логики

ID проверки: mathworks.do178.LogicBlockUsage

Идентифицируйте использование Логического оператора и блоков Битовых операций, которые могут повлиять на безопасность.

Описание

Эта проверка осматривает использование:

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель или подсистема содержат блок, вычисляя оператор отношения, который работает с различными типами данных. Условие может привести к непредсказуемым результатам в сгенерированном коде. Для идентифицированных блоков используйте типы общих данных в качестве входных параметров. Можно использовать блоки Преобразования типа данных, чтобы изменить типы входных данных.
Модель или подсистема содержат блок, вычисляя оператор отношения, который не имеет булева вывода. Условие может привести к непредсказуемым результатам в сгенерированном коде. Для заданных блоков, на Параметрах блоков> панель Атрибутов Сигнала, устанавливает Output data type на boolean.
Модель или подсистема содержат блок, вычисляя оператор отношения, который использует == или ~ = оператор, чтобы сравнить сигналы с плавающей точкой. Использование этих операторов на сигналах с плавающей точкой ненадежно и непредсказуемо из-за проблем точности с плавающей точкой. Эти операторы могут привести к непредсказуемым результатам в сгенерированном коде.

Для идентифицированного блока выполнить одно из следующих действий:

  • Измените тип данных сигнала.

  • Переделайте модель, чтобы устранить использование == или ~ = операторы на сигналах с плавающей точкой.

Модель или подсистема содержат блок Logical Operator, который имеет вводы или выводы, которые не являются булевыми вводами или выводами. Блок может привести к сравнениям равенства или неравенства с плавающей точкой в сгенерированном коде.
  • Измените блок Logical Operator так, чтобы все вводы и выводы были булевской переменной. На Параметрах блоков> панель Атрибутов Сигнала, рассмотрите Require all inputs to have the same data type выбора и setting Output data type к boolean.

  • В диалоговом окне Configuration Parameters рассмотрите выбор Implement logic signals as boolean data (vs. double).

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое во всех подсистемах маскированных.

  • Позволяет исключения блоков и графиков.

Смотрите также

Проверяйте использование блоков Подсистем и Портов

ID проверки: mathworks.do178.PortsSubsystemsUsage

Идентифицируйте использование Портов и блоков Подсистем, которые могут повлиять на безопасность.

Описание

Эта проверка осматривает использование этих блоков:

  • Для итератора

  • В то время как итератор

  • Если

  • Переключите случай

Проверка не делает блоков флага Switch Case, которые не используют целочисленные типы данных или перечислимые величины для входных параметров. Выполнить hisl_0011: Использование блоков Случая Переключателя и блоков Subsystem Действия (Simulink) – C, используйте целочисленный тип данных или перечислимую величину для входных параметров, чтобы Переключить блоки Случая.

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Модель или подсистема содержат блок For Iterator, который имеет переменные итерации. Это условие может привести к непредсказуемым временам выполнения или бесконечным циклам в сгенерированном коде.

Для идентифицированного Для блоков Итератора выполнить одно из следующих действий:

  • Установите the Iteration limit source параметр на internal.

  • Если параметром Iteration limit source должен быть external, используйте Константу, Тестовую, или блок Width как источник.

  • Снимите Набор следующий флажок i (iteration variable) externally.

  • Рассмотрите установку флажка Show iteration variable и наблюдайте значение итерации во время симуляции.

Модель или подсистема содержат некоторое время блок Iterator, который имеет неограниченные итерации. Это условие может привести к бесконечным циклам в сгенерированном коде.

Для идентифицированного, В то время как Итератор блокируется:

  • Установите параметр Maximum number of iterations (-1 for unlimited) на положительное целочисленное значение.

  • Рассмотрите установку флажка Show iteration number port и наблюдайте значение итерации во время симуляции.

Модель или подсистема содержат, Если блок с, Если выражение или выражения Elseif, которые могут вызвать сравнения равенства или неравенства с плавающей точкой в сгенерированном коде.Измените выражения в Если блок, чтобы избежать сравнений равенства или неравенства с плавающей точкой в сгенерированном коде.
Модель или подсистема Еще содержат Если использование блока выражения Elseif без условие.В, Если диалоговое окно блока Block Parameters, выберите Show else condition. Еще соедините получившееся выходной порт к Если блок Subsystem Действия.
Модель или подсистема содержат, Если блок с выходными портами, которые не соединяются с Если блоки Subsystem Действия.Проверьте что выходные порты Если блок connect к Если блоки Subsystem Действия.
Модель или подсистема содержат блок Switch Case без случая по умолчанию.В диалоговом окне Block Parameters блока Switch Case выберите Show default case. Соедините получившийся выходной порт по умолчанию с блоком Subsystem Действия Случая Переключателя.
Модель или подсистема содержат блок Switch Case с выходным портом, который не соединяется с блоком Subsystem Действия Случая Переключателя.Проверьте, что выходные порты блоков Случая Переключателя соединяются с блоками Subsystem Действия Случая Переключателя.

Модель или подсистема содержат один из следующих зависящих от времени блоков в Для Итератора или В то время как подсистема Итератора:

  • Дискретный фильтр

  • Дискретный КИХ-фильтр

  • Дискретное пространство состояний

  • Дискретная передача Fcn

  • Дискретный нулевой полюсный

  • Передайте первый порядок Fcn

  • Передайте вывод Fcn или задержку

  • Передайте действительный нуль Fnc

  • Дискретная производная

  • Дискретная Передача Fcn (с начальными выходными параметрами)

  • Дискретная Передача Fcn (с начальными состояниями)

  • Дискретный Нулевой полюсный (с начальными выходными параметрами)

  • Дискретный Нулевой полюсный (с начальными состояниями)

В модели или подсистеме, рассмотрите удаление зависящих от времени блоков.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Анализирует содержимое соединенных блоков библиотеки.

  • Анализирует содержимое во всех подсистемах маскированных.

  • Позволяет исключения блоков и графиков.

Смотрите также

Информация о версии модели дисплея

ID проверки: mathworks.do178.MdlChecksum

Информация о версии модели дисплея в вашем отчете.

Описание

Эта проверка отображает следующую информацию для текущей модели:

  • Номер версии

  • Автор

  • Дата

  • Образцовая контрольная сумма

Доступный с Simulink Check.

Результаты и рекомендуемые действия

УсловиеРекомендуемое действие
Невозможно получить информацию о версии и контрольной сумме модели. Эти сводные данные предоставлены для вашей информации. Никакое действие не требуется.

Возможности и ограничения

  • Не работает на моделях библиотеки.

  • Не позволяет исключения блоков или графиков.

Смотрите также