|
|
  |
Я боюсь IARа :-), Кто глючит - я или он?!? |
|
|
|
May 27 2008, 17:59
|

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

|
Картинки какие-то, ну очень цветные... Предпочитаю листинги читать. Код 17 void main() 18 { \ main: \ 00000000 30402DE9 PUSH {R4,R5,LR} 19 init(); \ 00000004 ........ BL init 20 if (cnt >= 1024) asm("MOV R14,R15"); \ 00000008 ........ LDR R4,??DataTable2 ;; cnt \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 400E50E3 CMP R0,#+1024 \ 00000014 010000BA BLT ??main_0 \ 00000018 0FE0A0E1 MOV R14,R15 \ 0000001C 000000EA B ??main_1 21 else asm("MOV R15,R14"); \ ??main_0: \ 00000020 0EF0A0E1 MOV R15,R14 22 cnt = 1024; \ ??main_1: \ 00000024 400EA0E3 MOV R0,#+1024 \ 00000028 000084E5 STR R0,[R4, #+0] 23 stop(); \ 0000002C ........ LDR R5,??DataTable3 ;; `?<Constant "\\375\\362\\356 \\352\\356\\355\\345\\366\\` \ ??main_2: \ 00000030 0510A0E1 MOV R1,R5 \ 00000034 040084E2 ADD R0,R4,#+4 \ 00000038 ........ _BLF sprintf,??sprintf??rA \ 0000003C FBFFFFEA B ??main_2 24 } Это правда 4.42, и раритетных не коллекционирую, посему рассмотреть подробно не могу.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 27 2008, 18:02
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
А вот мой: Код \ In segment CODE, align 4, keep-with-next \ 00000000 CODE32 17 void main() 18 { \ main: \ 00000000 30402DE9 STMDB SP!,{R4,R5,LR} ;; Push 19 init(); \ 00000004 ........ BL init 20 if (cnt >= 1024) asm("MOV R14,R15"); \ 00000008 ........ LDR R4,??DataTable2 ;; cnt \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 0FE0A0E1 MOV R14,R15 21 else asm("MOV R15,R14"); \ 00000014 0EF0A0E1 MOV R15,R14 22 cnt = 1024; \ 00000018 400EA0E3 MOV R0,#+0x400 \ 0000001C 000084E5 STR R0,[R4, #+0] 23 stop(); \ 00000020 ........ LDR R5,??DataTable3 ;; `?<Constant "\\375\\362\\356 \\352\\356\\355\\345\\366\\` \ ??main_0: \ 00000024 0510A0E1 MOV R1,R5 \ 00000028 040084E2 ADD R0,R4,#+0x4 \ 0000002C ........ _BLF sprintf,sprintf??rA \ 00000030 FBFFFFEA B ??main_0 24 }
Сообщение отредактировал GetSmart - May 27 2008, 18:06
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
May 27 2008, 19:21
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Вот, что в теме "typedef" меня удивило: Код typedef float real;
const double tmp = 1.0/3;
if (*(real *)&tmp == tmp) { asm("NOP"); } else { asm("NOP"); asm("NOP"); } Это я вставил в начало процедуры (любой) в одном моём проекте. Смысл был в том, чтобы отличить тип, допустим float от double (либо на этапе компиляции, либо в рунтайме) и выполнить одно из действий. Там при приведении типа в real можно вместо него сразу float поставить. Не суть. Суть в том, что опять оба варианта в IFе выполняются на EWARM 4.20. Как-то рабочий проект из 4.20 скомпилил на 4.30 и он не заработал. Тоже на максимуме оптимизации. Мне сейчас очень интересно почему  Я тогда ещё подумал, что новые версии глючные.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
May 28 2008, 07:34
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
YAM, ну, вот, к примеру ) http://electronix.ru/forum/index.php?showtopic=44643проявляется именно при макс. оптимизации. Ещё сталкивался с неверными результатами вычислений с плавающей точкой, причём тот же код корректно работал в Keil.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
May 28 2008, 07:45
|

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

|
Цитата(vet @ May 28 2008, 09:34)  YAM, ну, вот, к примеру ) Дело не в примерах - примеров можно пачками посмотреть в списках исправленных багов в каждой новой версии IAR, дело в том, насколько стиль написания провоцирует натыкания на грабли.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
May 28 2008, 08:01
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo) Дело не в примерах ... дело в том, насколько стиль написания провоцирует натыкания на грабли. У меня в примерах что, какой-то неправильный стиль написания? Цитата(zltigo) На проблему IAR наступил однажды года три назад - буквально в слежующем релиза рна фигурировала в списке исправлений. Причем это была правка чужого кода - сам-бы я в таком стиле не написал. ИМХО надо создать FAQ по "неправильным" стилям написания  Кстати, какая версия-то IARa была?
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
May 28 2008, 08:48
|

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

|
Цитата(GetSmart @ May 28 2008, 10:01)  У меня в примерах что, какой-то неправильный стиль написания? Трудно сказать, я не имею старых IAR-ов, посему не могу глянуть, что будет, например, без столь не любимых мною asm(), что будет при более общирном коде, а не исскуственной оберточке. Цитата ИМХО надо создать FAQ по "неправильным" стилям написания Не берусь  стиль складывался стихийно с набиванием реальных шишек на многиз имногих реально еще глюковатых компиляторах начиная с середины 80x. Цитата Кстати, какая версия-то IARa была? Какая-то свежайшая трехлетней давности. Могу по списку исправленных багов найти, а нужно?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|