|
|
  |
Internal Error: [Post Optimize]: Any exception, почему появляется ошибка? (IAR 4.20) |
|
|
|
Oct 24 2009, 12:02
|

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

|
Цитата(GetSmart @ Oct 24 2009, 14:57)  Уже не один и не два нашёл для ARMов. Возьмите IAR ну какой-нибудь 2.0 вместо 5.xx и оттягивайтесь. Лично я наступал ровно на один IAR-овский баг лет пять назад, да и тот в следующем релизе пофиксили. Наверное я чего-то делаю неправильно  , в частности всегда перехожу на текущую версию компилятора, причем неизменно без проблем. Не все проекты переведены на V5, но все V4 безусловно на последней версии V4, и все развиваемые на V5.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 24 2009, 12:49
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Провёл эксперимент. В чистом 4.20 всё работает (сразу скажу для непонятливых - в 4.20 я не менял ничто и никогда). В чистом 4.30 не работает. Если в 4.30 заменить iccarm.exe на файл из 4.20, то прошивка работает. Но. По размеру и некоторым признакам эта прошивка очень похожа на ту, которую генерит чистый 4.30, чем на ту, которую генерит чистый 4.20. Значет ещё линкер поменялся. Цитата(zltigo) Начните, наконец, с простого включения и чтения Warnings. Только, естественно, на 4.42. Варнинги у меня всегда влючены. Там всё как надо. 4.42 ещё не установил. Поставлю не раньше завтра.
Сообщение отредактировал GetSmart - Oct 24 2009, 12:51
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 24 2009, 12:57
|

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

|
Цитата(GetSmart @ Oct 24 2009, 15:49)  Варнинги у меня всегда влючены. Не верю, иначе бы Вы никогда не писали подобные вещи: Код while (1) { tmp = T0TC - LightStamp1; ...... По крайней мере в IAR...
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 24 2009, 12:59
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Oct 24 2009, 18:57)  Не верю, иначе бы Вы никогда не писали подобные вещи: Код while (1) { tmp = T0TC - LightStamp1; ...... По крайней мере в IAR... Не понимаю где тут варнинг? Дайте что ли листинг, в котором будет этот варнинг.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 24 2009, 13:05
|

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

|
Цитата(GetSmart @ Oct 24 2009, 15:59)  Не понимаю где тут варнинг? Дайте что ли листинг, в котором будет этот варнинг. Вот я и говорю, что надо их все включать  Код 7 void main() 8 { 9 u32 LightStamp1 = T0TC; \ main: \ 00000000 8E02A0E3 MOV R0,#-536870904 \ 00000004 400C80E3 ORR R0,R0,#0x4000 \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 2C109FE5 LDR R1,??main_0 ;; LightNew \ 00000010 002091E5 LDR R2,[R1, #+0] \ 00000014 041091E5 LDR R1,[R1, #+4] 10 u32 tmp; 11 while (1) ^ Remark[Pe236]: controlling expression is constant 12 { tmp = T0TC - LightStamp1; \ ??main_1: \ 00000018 8E32A0E3 MOV R3,#-536870904 \ 0000001C 403C83E3 ORR R3,R3,#0x4000 \ 00000020 003093E5 LDR R3,[R3, #+0] \ 00000024 003043E0 SUB R3,R3,R0 13 if ((LightCur != LightNew) && (tmp >= 1000))
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 24 2009, 13:10
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
А, ремарки! Это вообще бесполезная вещь, которая не влияет на генерируемый файл. Видел я эту ремарку. Она довольно глупая. Именно из-за неё я догадался почему параноидальные сишники считают что правильнее использовать for (;;) для бесконечных циклов. Я ещё могу понять, когда в дефайне ставят do {} while(0), но проблемы с while (1) выше моего понимания  Бьюсь об заклад, что скорректировав код так, чтобы исчезли все ремарки, прошивка останется 100% идентичной. Следуя такой логике следует запретить конструкции #if 0 ... #endif и им подобные, т.к. аналогично while-у используется константное условие. Хотя и в препроцессоре.
Сообщение отредактировал GetSmart - Oct 24 2009, 13:16
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 24 2009, 13:20
|

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

|
Цитата(GetSmart @ Oct 24 2009, 16:10)  Именно из-за неё я догадался почему параноидальные сишники... Странно, по-русски Вы пишете достаточно грамотно, и наверное, не считаете это извращением. По чему-бы не писать грамотно и на 'C', даже если компилятору кажется, что он Вас понимает и в результате оптимизации выдает хороший код.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 24 2009, 13:26
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Oct 24 2009, 19:20)  Странно, по-русски Вы пишете достаточно грамотно, и наверное, не считаете это извращением. По чему-бы не писать грамотно и на 'C', даже если компилятору кажется, что он Вас понимает и в результате оптимизации выдает хороший код. Ткните меня в стандарт, пожалуйста, где указано, что нельзя использовать константное условие. А иначе - всё, что не запрещено, то - разрешено. А то ведь получится, что и в дефайне ставить while(0) нельзя, и тогда получится "рыба" - без вайла будет ремарка на лишнюю точку с запятой, а с вайлом ремарка на константное условие.
Сообщение отредактировал GetSmart - Oct 24 2009, 13:29
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 24 2009, 13:33
|

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

|
Цитата(GetSmart @ Oct 24 2009, 16:26)  Ткните меня в стандарт, пожалуйста.... Ткните меня в учебник русского языка в котором прямо сказано, что нельзя писать "моя твоя не понимай". Нормальная и абсолютно однозначная запись этого for( ; ; ) без всяких начальных условий, без всяких условий, и без всяких дополнительных действий повторять кусок кода. Цитата А то ведь получится, что и в дефайне ставить while(0) нельзя, и тогда получится "рыба" Неграмотно, но поскольку в данном случае речь идет о трюке, то на то он и трюк, дабы пользоваться им в крайних случаях и со знанием дела.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 24 2009, 14:58
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Oct 24 2009, 19:20)  Странно, по-русски Вы пишете достаточно грамотно, и наверное, не считаете это извращением. По чему-бы не писать грамотно и на 'C', даже если компилятору кажется, что он Вас понимает и в результате оптимизации выдает хороший код. "По чему" - пишется вместе. "Почему бы" без дефиса. Перед "наверное" пропущена запятая. zltigo, нравится Вам такое отношение (компилятора  ) ??? - Мне тоже не нравится. Но мы с Вами прекрасно друг друга понимаем без параноидального соблюдения орфографии и пунктуации. Только не говорите, что русский не родной  Не удержался. Установил таки 4.42. Мой мега-проджект в нём... работает!  В 4.20 работает, в 4.42 работает, а в 4.30 НЕ РАБОТАЕТ!!! Щас попробую угадать - виноват конечно же я  Хотя 4.42 делает самый жирный HEX, на долю процента больше чем 4.30. А 4.20 самый компактный. Это при одинаковой оптимизации High Size.
Сообщение отредактировал GetSmart - Oct 24 2009, 15:44
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Oct 24 2009, 15:52
|

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

|
Цитата(GetSmart @ Oct 24 2009, 17:58)  zltigo, нравится Вам такое отношение (компилятора  ) Нравится! Цитата Только не говорите, что русский не родной  Просто с середины 6 класса русская школа в Будапеште сказывается, ну и жена украинка. Цитата Щас попробую угадать - виноват конечно же я  Тем не менее, на 99% да  . Список исправленных-внесенных ошибок IAR ведет и выкладывает в комплекте с компилятором - можете поискать ту, которая присутствует в Вашем исходнике не идущем на 4.30.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 26 2009, 11:25
|

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

|
Цитата Список исправленных-внесенных ошибок IAR ведет и выкладывает в комплекте с компилятором - можете поискать ту, которая присутствует в Вашем исходнике не идущем на 4.30. Цитата(GetSmart @ Oct 26 2009, 14:13)  Вы опять неправы  В чем? Вот описание этой ошибки от IAR исправленной в 4.31 Код V4.31A 2006-02-03
Program corrections ..... Nested irq functions did not return properly. [EW17032, EW17033, EW17038] .... Так в чем я виноват? В том, что Вы не читаете документацию, пользуетесь в конце 2009 года компиляторами января 2005 и после этого радостно наступаете на грабли описанные и исправленные в феврале 2006 года?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|