реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> MISRA 2004 && IAR
Dog Pawlowa
сообщение Mar 2 2010, 16:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Попробовал скомпилировать работающий проект, включив контроль 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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 2 2010, 16:16
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Предпочитаю иметь максимум смысловых сообщений компилятора, поэтому MISRA 2004 включал. НО полное включение очень досаждает ошибками и предупреждениями. Пришлось убрать в настройках часть сообщений, которые на мой взгляд сильно мешали жить. С точки зрения языка и реентабельности кода MISRA 2004 вводит очень жесткие ограничения, IMHO, неоправданные.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 2 2010, 16:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(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 );


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 3 2010, 13:59
Сообщение #4


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(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.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 3 2010, 15:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Ну и задавили кучу.... При этом может просто следовало просто включить все warnings и remarks у компилятора - это много полезнее. Ибо в отличие от MISRA, которая рассчитывает на неправильное понимание неким самым поганым и на самом деле уже вымершим компилятором, тут получаем предупреждения конкретного компилятора, которому виднее, что ему в написанном не совсем понятно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 3 2010, 15:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(mdmitry @ Mar 3 2010, 17:59) *
Так надо сразу давить ...

Задавил, чтобы компилировалось, лишний контроль не помешает.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 3 2010, 15:46
Сообщение #7


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



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

А кто сказал, что warnings и remarks выключены?
У MISRA патологическая любовь к суффиксам U, странным организациям циклов (хороший пример от zltigo) и многому другому. rolleyes.gif
Я с IAR работал относительно мало (только MSP430). Больше знаком с gcc и управление его системой диагностики мне понятней.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 4 2010, 10:44
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



По сути правила MISRA - это сужение разрешённого для использования подмножества языка Си. Только это подмножество так сильно сужается, что на мой вкус (и не только мой) програмировать на нём становится очень неприятно.
Для статического анализа кода может подойти лучше что-то типа Lint.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 5 2010, 06:51
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(scifi @ Mar 4 2010, 13:44) *
По сути правила MISRA - это сужение разрешённого для использования подмножества языка Си.

Думается, что MISRA - это просто вчерашний день, готовилось это чудо достаточно долго, а до 2005 года включительно наблюдался (имхо) некоторый кризис в компиляторостроении, в результате эта газонокосилка по имени MISRA и отражает "те суровые времена"
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 01:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016