Образцы, в которых сгенерированный код не соответствует руководствам по C:2012 MISRA, отмечены как отклонения в сводных таблицах MISRA C:2012 информации о податливости. В соответствии с разделом 5.4 C:2012 руководства MISRA, информация об отклонениях включает:
Отклонение руководства
Обстоятельства, при которых допускается отклонение
Обоснование отклонения, включая оценку риска
Демонстрация того, как обеспечивается безопасность
Потенциальные последствия несоответствия
Отклонения от C:2012 директивы и правила MISRA включают:
Определение директивы
Если функция возвращает информацию об ошибке, эта информация об ошибке должна быть проверена.
Объяснение
Примечание
Эта директива нарушается только при использовании целевого устройства генерации кода на основе AUTOSAR.
Когда вызов функции предоставляет информацию, которая указывает на неудачную операцию, вызывающая программа должна проверить индикацию ошибки при возвращении функции. Вызовы функций не ограничиваются вызовами в стандартной библиотеке.
Описание
Вызовы функций интерфейса отправителя AUTOSAR, такие как Rte_Write_...
, имеют тип возврата Std_ReturnType
это указывает, была ли запись значения успешной. Соответствующий шаблон Simulink является выходным портом верхнего уровня, который сконфигурирован как интерфейс отправителя 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 скрывает результаты, обоснованные аннотациями на панели Список результатов (Results List). Для просмотра нарушений правил кодирования смотрите Фильтрация и Результаты группы в Polyspace Desktop User Interface (Polyspace Bug Finder).
Если вы уже предоставили аннотации для нарушений C:2004 MISRA, Polyspace импортирует эти обоснования, когда вы проверяете свой код на нарушения C:2012 MISRA. Для получения дополнительной информации смотрите Импорт существующих MISRA C: 2004 Обоснования к результатам MISRA C: 2012 (Polyspace Bug Finder).
Для получения дополнительной информации смотрите:
Определение правила
Операнд правой руки логического &&
или ||
оператор не должен содержать стойких побочных эффектов.
Объяснение
Стойкие побочные эффекты операнда правой стороны &&
и ||
операторы могут возникать в зависимости от левостороннего операнда, что противоречит ожиданиям программиста.
Примечание
Термин «стойкий побочный эффект» определен в Приложении J: Глоссарий C:2012 Руководства по использованию языка С в критических системах MISRA.
Описание
Использование математических операций в качестве второго входа в блоки Logical Operator, сконфигурированные как операция 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™ рассматривает каждую функцию без доступного исходного кода как потенциально имеющую побочные эффекты.
Условия, при которых запрашивается отклонение
Это отклонение запрашивается для всех вызовов стандартных математических функций, используемых в качестве аргумента правой стороны &&
и ||
операторы.
Последствия несоблюдения
Нет никаких последствий, связанных с несоблюдением MISRA C:2012 правила 13.5, в обстоятельствах, описанных в этой записи отклонения. В результате этого отклонения нет дополнительных требований к верификации и валидации.
Действия по управлению отчетностью
Когда анализ Polyspace вашего кода находит известные или приемлемые нарушения правил кодирования, можно подавить нарушения в последующих анализах, добавив аннотации кода (Polyspace Bug Finder) к блоку Logical Operator. В будущих анализах Polyspace скрывает результаты, обоснованные аннотациями на панели Список результатов (Results List). Для просмотра нарушений правил кодирования смотрите Фильтрация и Результаты группы в Polyspace Desktop User Interface (Polyspace Bug Finder).
Если вы уже предоставили аннотации для нарушений C:2004 MISRA, Polyspace импортирует эти обоснования, когда вы проверяете свой код на нарушения C:2012 MISRA. Для получения дополнительной информации смотрите Импорт существующих MISRA C: 2004 Обоснования к результатам MISRA C: 2012 (Polyspace Bug Finder).
Для получения дополнительной информации смотрите MISRA C:2012 Сводные таблицы информации о податливости.