Согласно правилу 13.5 MISRA правый операнд логического && или || оператор не должен содержать стойких побочных эффектов. Наш код проверен с помощью PC-Lint, сообщение 9007 (http://gimpel-online.com/MsgRef.html#9007).
У нас есть код вида
if((GET_SIGNAL1() < CONST_1) || (GET_SIGNAL2() == CONST_2) )
{
dostuff();
}
GET_x — это макросы, получающие сигнал x с некоторой обработкой ошибок, что позже вызывает предполагаемые побочные эффекты. Дано отклонение правила к MISRA 13.5, теперь вопрос как подавить соответствующие сообщения.
Усилия до сих пор: поскольку это автоматически сгенерированный код, я не могу напрямую вставлять комментарии lint, но вставлять комментарии через генератор, хотя и, в первую очередь, трудно отследить.
--e{(9007))} в определении макроса будет работать, но у нас также есть такой код, как foo = GET_SIGNAL1();
, который вызовет деактивацию всей функции.
Про -ecall тоже думал, но он просто проверяет сам вызов, а не контекст макроса (как я надеялся).
редактировать:
Я не могу повлиять ни на модель, ни на тулчейн. Единственные части, на которые я могу повлиять, - это конфигурация ворса или «связующий код», например определения макросов.
GET_SIGNAL2
можно запустить только в том случае, еслиGET_SIGNAL1
- person Vality   schedule 21.08.2014