Экземпляры, в которых созданный код не соответствует рекомендациям MISRA C:2012, отмечены как отклонения в сводных таблицах MISRA C:2012 Compliance Information Summary Tables. В соответствии с разделом 5.4 руководящих принципов MISRA C:2012 информация об отклонениях включает в себя:
Отклоняемое руководство
Обстоятельства, при которых допускается отклонение
Обоснование отклонения, включая оценку риска
Демонстрация того, как обеспечивается безопасность
Потенциальные последствия несоответствия
Отклонения от C:2012 директив и правил MISRA включают:
Определение директивы
Если функция возвращает информацию об ошибке, то эта информация об ошибке проверяется.
Объяснение
Примечание
Эта директива нарушается только при использовании целевого объекта генерации кода на основе AUTOSAR.
Когда вызов функции предоставляет информацию, указывающую на неудачную операцию, вызывающая программа должна проверить наличие ошибки при возврате функции. Вызовы функций не ограничиваются вызовами в стандартной библиотеке.
Описание
Вызовы функции интерфейса отправителя 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 скрывает результаты, выровненные с помощью аннотаций на панели Список результатов (Results List). Сведения о проверке нарушений правил кодирования см. в разделе Фильтрация и группирование результатов в интерфейсе пользователя Polyspace Desktop (Polyspace Bug Finder).
Если аннотации для нарушений MISRA C:2004 уже предоставлены, Polyspace импортирует эти обоснования при проверке кода на наличие нарушений MISRA C:2012. Дополнительные сведения см. в разделе Импорт существующих обоснований MISRA C: 2004 в результаты MISRA C: 2012 (Polyspace Bug Finder).
Для получения дополнительной информации см.:
Определение правила
Операнд правой руки логического && или || оператор не должен содержать стойких побочных эффектов.
Объяснение
Постоянные побочные эффекты правого операнда && и || операторы могут возникать в зависимости от левого операнда, что противоречит ожиданиям программиста.
Примечание
Термин «постоянный побочный эффект» определен в «Приложении J: Глоссарий» документа «MISRA C:2012 Guidelines for the Use of C Language in Critical Systems».
Описание
Использование математических операций в качестве второго входа в блоки логических операторов, настроенные как операции 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) в блок логического оператора. В будущих анализах Polyspace скрывает результаты, выровненные с помощью аннотаций на панели Список результатов (Results List). Сведения о проверке нарушений правил кодирования см. в разделе Фильтрация и группирование результатов в интерфейсе пользователя Polyspace Desktop (Polyspace Bug Finder).
Если аннотации для нарушений MISRA C:2004 уже предоставлены, Polyspace импортирует эти обоснования при проверке кода на наличие нарушений MISRA C:2012. Дополнительные сведения см. в разделе Импорт существующих обоснований MISRA C: 2004 в результаты MISRA C: 2012 (Polyspace Bug Finder).
Дополнительные сведения см. в разделе Сводные таблицы информации о соответствии MISRA C:2012.