Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MISRA 2004 && IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dog Pawlowa
Попробовал скомпилировать работающий проект, включив контроль MISRA...
Результат закономерный.
Но вот вопрос. Даже если убрать мои #undef, ##, наставить скобок на каждую строку после if и проч, не могу избавиться от мысли, что все равно проект под ИАром компилироваться не будет.

Например :
IFG1 &= ~OFIFG;

вызывает
Error[Pm031]: bitwise operations shall not be performed on signed integer types (MISRA C 2004 rule 12.7) D:\Work\Type Kplus\_PCB\k_config.c 18

но константа определена как
#define OFIFG (0x02)

Если исправить родное определение на
#define OFIFG (0x02u)
ошибок нет.

Да, еще
while (IFG1 & OFIFG) ;
Error[Pm029]: this bitwise operation is in a boolean context - logical operators should not be confused with bitwise operators (MISRA C 2004 rule 12.6) D:\Work\Type Kplus\_PCB\k_config.c 23

Это как нужно написать, чтобы извратиться?

А вообще эту опцию кто-нить использует? Как средство повышения надежности программ wink.gif
mdmitry
Предпочитаю иметь максимум смысловых сообщений компилятора, поэтому MISRA 2004 включал. НО полное включение очень досаждает ошибками и предупреждениями. Пришлось убрать в настройках часть сообщений, которые на мой взгляд сильно мешали жить. С точки зрения языка и реентабельности кода MISRA 2004 вводит очень жесткие ограничения, IMHO, неоправданные.
zltigo
Цитата(Dog Pawlowa @ Mar 2 2010, 19:03) *
А вообще эту опцию кто-нить использует?

Я таких больных на всю голову не встречал и, надеюсь, не встречу.
Цитата
while (IFG1 & OFIFG) ;
Error[Pm029]: this bitwise operation is in a boolean context - logical operators should not be confused with bitwise operators (MISRA C 2004 rule 12.6) D:\Work\Type Kplus\_PCB\k_config.c 23
Это как нужно написать, чтобы извратиться?

while( ( IFG1 & OFIFG ) == OFIFG );
mdmitry
Цитата(zltigo @ Mar 2 2010, 19:22) *
Я таких больных на всю голову не встречал и, надеюсь, не встречу.
while( ( IFG1 & OFIFG ) == OFIFG );

Может я больной? biggrin.gif
Так надо сразу давить в настройках 12.6 и другие "странные" правила.
У меня убраны были для msp430 следующие правила:
1.1, 1.5, 2.2, 2.4, 3.1, 3.3, 5.1, 5.3, 5.5-5.7, 6.3, 8.5, 8.10, 10.1, 10.6, 11.3, 11.4, 12.1, 12.6, 12.7, 12.10, 12.11, 12.13, 13.2, 13.5, 14.1, 14.3, 14.7-14.9, 16.3, 16.7, 17.4, 17.5, 19.1, 19.2, 19.7, 19.13, 19.15.
Список большой, возможно, стоило и вообще отказаться от MISRA 2004.

Проект сделан, все работало, стиль программирования сохранял тот, к которому привык с gcc.
zltigo
Цитата(mdmitry @ Mar 3 2010, 16:59) *
Так надо сразу давить в настройках 12.6 и другие "странные" правила.

Ну и задавили кучу.... При этом может просто следовало просто включить все warnings и remarks у компилятора - это много полезнее. Ибо в отличие от MISRA, которая рассчитывает на неправильное понимание неким самым поганым и на самом деле уже вымершим компилятором, тут получаем предупреждения конкретного компилятора, которому виднее, что ему в написанном не совсем понятно.
Dog Pawlowa
Цитата(mdmitry @ Mar 3 2010, 17:59) *
Так надо сразу давить ...

Задавил, чтобы компилировалось, лишний контроль не помешает.
mdmitry
Цитата(zltigo @ Mar 3 2010, 18:14) *
Ну и задавили кучу.... При этом может просто следовало просто включить все warnings и remarks у компилятора - это много полезнее. Ибо в отличие от MISRA, которая рассчитывает на неправильное понимание неким самым поганым и на самом деле уже вымершим компилятором, тут получаем предупреждения конкретного компилятора, которому виднее, что ему в написанном не совсем понятно.

А кто сказал, что warnings и remarks выключены?
У MISRA патологическая любовь к суффиксам U, странным организациям циклов (хороший пример от zltigo) и многому другому. rolleyes.gif
Я с IAR работал относительно мало (только MSP430). Больше знаком с gcc и управление его системой диагностики мне понятней.
scifi
По сути правила MISRA - это сужение разрешённого для использования подмножества языка Си. Только это подмножество так сильно сужается, что на мой вкус (и не только мой) програмировать на нём становится очень неприятно.
Для статического анализа кода может подойти лучше что-то типа Lint.
_Pasha
Цитата(scifi @ Mar 4 2010, 13:44) *
По сути правила MISRA - это сужение разрешённого для использования подмножества языка Си.

Думается, что MISRA - это просто вчерашний день, готовилось это чудо достаточно долго, а до 2005 года включительно наблюдался (имхо) некоторый кризис в компиляторостроении, в результате эта газонокосилка по имени MISRA и отражает "те суровые времена"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.