Экземпляры, в которых сгенерированный код не выполняет инструкции MISRA C:2012, отмечены как отклонения в Сводных таблицах информации о Соответствии MISRA C:2012. В соответствии с Разделом 5.4 из инструкций MISRA C:2012, информация об отклонениях включает:
Инструкция отклонена
Обстоятельства, при которых разрешено отклонение
Выравнивание для отклонения, включая оценку степени риска
Демонстрация того, как безопасность гарантируют
Потенциальные последствия несоответствия
Отклонения к директивам MISRA C:2012 и правилам включают:
Направляющее определение
Если функция возвратит информацию об ошибке, то та информация об ошибке должна быть протестирована.
Объяснение
Эта директива нарушена только, когда цель генерации кода AUTOSAR-based используется.
Когда вызов функции предоставляет информацию, которая указывает на неудачную операцию, программа вызова должна проверять на индикацию относительно ошибки, когда функция возвращена. Вызовы функции не ограничиваются вызовами в стандартной библиотеке.
Описание
Вызовы функции интерфейса отправителя AUTOSAR, такие как Rte_Write_...
, имеют, возвращаются, вводят Std_ReturnType
, который указывает при записи, что значение было успешно. Соответствующий шаблон Simulink является выходным портом верхнего уровня, который сконфигурирован как Интерфейс Отправителя AUTOSAR.
Образцовый пример
Настройка AUTOSAR
Выборка сгенерированного кода
В примере кода отметьте использование вызова функции AUTOSAR Rte_Write_...
в
Rte_Write_OUT_DE1_OUT_DE1(rtb_TmpSignalConversionAtIN_DE1);
.
void Runnable_Step(void) { /* local block i/o variables */ real_T rtb_TmpSignalConversionAtIN_DE1; … rtb_TmpSignalConversionAtIN_D_l = Rte_Read_IN_DE1_IN_DE1 (&rtb_TmpSignalConversionAtIN_DE1); … if (rtb_TmpSignalConversionAtIN_D_l > 0) { … Rte_Write_OUT_DE1_OUT_DE1(rtb_TmpSignalConversionAtIN_DE1); } … }
Выравнивание
Отказы вызовов функции Rte_Write_...
обычно обрабатываются на стороне получателя, потому что вызов функции возвращается, не всегда включают все потенциальные ошибки.
Условия, При Которых Требуют Отклонение
Отклонение требуют для всех экземпляров портов отправителя AUTOSAR.
Последствия несоблюдения
Программа вызова не может реагировать, когда операция отправителя неудачна.
Действия, чтобы управлять созданием отчетов
Когда анализ Polyspace® вашего кода находит известные или приемлемые нарушения правила кодирования, можно подавить нарушения в последующих исследованиях путем добавления аннотаций кода (Polyspace Bug Finder) в блок Outport. В будущих исследованиях Polyspace скрывает результаты, выровненные по ширине через аннотации в панели Списка Результатов. Чтобы рассмотреть нарушения правила кодирования, смотрите Результаты Фильтра и Группы (Polyspace Bug Finder).
Если вы уже предоставили аннотации для нарушений MISRA C:2004, Polyspace импортирует эти выравнивания, когда вы проверяете свой код на нарушения MISRA C:2012. Для получения дополнительной информации смотрите Импорт Существующий MISRA C: 2 004 Выравнивания к MISRA C: 2 012 Результатов (Polyspace Bug Finder).
Для получения дополнительной информации см.:
Управляйте определением
Правый операнд логического &&
или оператора ||
не должен содержать персистентные побочные эффекты.
Объяснение
Персистентные побочные эффекты операнда правой стороны &&
и операторов ||
могут произойти в зависимости от операнда левой стороны, который противоречит ожиданиям программиста.
Термин персистентный побочный эффект задан в "Приложении J: Глоссарий" Инструкций MISRA C:2012 для Использования языка C в Критическом Системном документе.
Описание
Используя математические операции как второй вход к блокам Логического оператора, сконфигурированным как операция AND или OR.
Образцовый пример
Выборка сгенерированного кода
В примере кода отметьте использование операнда &&
в Y1 = (U1 && (sqrt(U2) <= 3.0));
.
/* Exported block signals */ boolean_T U1; /* '<Root>/U1' */ real_T U2; /* '<Root>/U2' */ boolean_T Y1; /* '<Root>/Logical Operator' */ /* Model step function */ void DEV_R1305_01main_step(void) { /* Logic: '<Root>/Logical Operator' incorporates: * Constant: '<S1>/Constant' * Inport: '<Root>/U1' * Inport: '<Root>/U2' * RelationalOperator: '<S1>/Compare' * Sqrt: '<Root>/Sqrt' */ Y1 = (U1 && (sqrt(U2) <= 3.0)); }
Выравнивание
Некоторые стандартные математические функции имеют по крайней мере один персистентный побочный эффект изменения глобальной переменной errno
, как задано в C90 или стандарте C99. Поскольку переменная errno
не используется Embedded Coder®, второй операнд может быть обработан как не наличие персистентных побочных эффектов.
Polyspace Bug Finder™ обрабатывает каждую функцию без доступного исходного кода как потенциальное наличие побочных эффектов.
Условия, При Которых Требуют Отклонение
Это отклонение требуют для всех вызовов стандартных математических функций, используемых в качестве аргумента правой стороны операторов ||
и &&
.
Последствия несоблюдения
Нет никаких последствий, сопоставленных с несоблюдением Правила 13.5 MISRA C:2012, в сложившейся ситуации описанного в этой записи отклонения. Нет никаких дополнительных требований верификации и валидации, следующих из этого отклонения.
Действия, чтобы управлять созданием отчетов
Когда анализ Polyspace вашего кода находит известные или приемлемые нарушения правила кодирования, можно подавить нарушения в последующих исследованиях путем добавления аннотаций кода (Polyspace Bug Finder) в блок Logical Operator. В будущих исследованиях Polyspace скрывает результаты, выровненные по ширине через аннотации в панели Списка Результатов. Чтобы рассмотреть нарушения правила кодирования, смотрите Результаты Фильтра и Группы (Polyspace Bug Finder).
Если вы уже предоставили аннотации для нарушений MISRA C:2004, Polyspace импортирует эти выравнивания, когда вы проверяете свой код на нарушения MISRA C:2012. Для получения дополнительной информации смотрите Импорт Существующий MISRA C: 2 004 Выравнивания к MISRA C: 2 012 Результатов (Polyspace Bug Finder).
Для получения дополнительной информации см. Сводные таблицы информации о Соответствии MISRA C:2012.