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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Internal Error: [Post Optimize]: Any exception, почему появляется ошибка? (IAR 4.20)
GetSmart
сообщение Oct 23 2009, 08:54
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Вопрос к спецам:
почему появляется ошибка в данном коде на максимальной оптимизации? На всех остальных оптимизациях и без, код нормально компилируется.
IAR 4.20. На других не пробовал. Может есть другой вариант описания данной структуры? Но хотелось чтобы поля структуры адресовались из "корня", то есть без лишнего имени структуры.

Код
typedef union
{
    u32    data;
    struct
    {    u08    light;
        u08    red;
        u08    green;
        u08    blue;
    };
} TLIGHT_DATA;

TLIGHT_DATA LightNew, LightOld;

main()
{
    if (LightNew.light <> LightOld.light) ...
}


Добавлю. Ошибка то появляется, то исчезает когда немного код изменяю. В первой версии был большой код. Здесь я всё сократил до минимума.

Сообщение отредактировал GetSmart - Oct 23 2009, 09:41


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 23 2009, 11:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(GetSmart @ Oct 23 2009, 11:54) *
Код
...    if (LightNew.light <> LightOld.light) ...
В операторе if записано "<>" - это что? Неравно? Наверное, нужно "!="?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 23 2009, 11:12
Сообщение #3


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Палыч @ Oct 23 2009, 17:00) *
В операторе if записано "<>" - это что? Неравно? Наверное, нужно "!="?

Да, ошибся, но только в цитате здесь. В IARе было !=. Просто тут в параллель ещё на делфе пишу прогу и меня клинит иногда smile.gif

Собственно, юнион со структурой тут не причём. Даже такой код без каких-либо дополнительных файлов выдаёт ошибку:
Код
typedef unsigned long  u32;

#define T0TC    (*(volatile u32 *)0xE0004008)

u32 LightNew, LightCur;

void main()
{
    u32 LightStamp1 = T0TC;
    u32 tmp;
    while (1)
    {    tmp = T0TC - LightStamp1;
        if ((LightCur != LightNew) && (tmp >= 1000))
        {    LightStamp1 += 1000;
        }
    }
}

Если что-нить малость в нём изменить, то ошибка исчезает. Например, если удалить половину условия в if. Или вместо LightStamp1 += 1000; написать asm("NOP");

Сообщение отредактировал GetSmart - Oct 23 2009, 11:48


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 23 2009, 12:52
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



IAR EWARM 5.40.1 на последний пример не дает ошибок.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2009, 13:10
Сообщение #5


Гуру
******

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



Цитата(GetSmart @ Oct 23 2009, 11:54) *
почему появляется ошибка...

Да какая тут "ошибка" sad.gif. Полагаю, что просто в файле, например, какой-нибудь непечатный символ залетел, какой-нибудь временный/выходнлй файл битый или не доступен на запись, и подобное.... Ну максимум что-то с железом-операционкой-файрволом....
Ошибаться просто неначем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 23 2009, 21:57
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Oct 23 2009, 19:10) *
Да какая тут "ошибка" sad.gif.
1. Полагаю, что просто в файле, например, какой-нибудь непечатный символ залетел,
2. какой-нибудь временный/выходнлй файл битый или не доступен на запись, и подобное....
3. Ну максимум что-то с железом-операционкой-файрволом....
Ошибаться просто неначем.

1. Проверил. Нет. Файл прилагаю. Достаточно создать проект с одним этим файлом и выбрать любой ARM проц (других там нет smile.gif) и максимальную оптимизацию (Speed/Size без разницы). Глючит 4.20 и 4.30 оба.
2. хз как проверить, но изменяя одну мелочь как я описал ошибка исчезает и появляется снова когда восстанавливаю изменения. Так что вряд ли дело во временном файле.
3. Файрвола не стоит. Операционка ХР, стабильно работает.
Остальное без комментариев smile.gif
Прикрепленные файлы
Прикрепленный файл  main.c.rar ( 285 байт ) Кол-во скачиваний: 23
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2009, 22:23
Сообщение #7


Гуру
******

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



Цитата(GetSmart @ Oct 24 2009, 00:57) *
без комментариев smile.gif

Прикрепленные файлы
Прикрепленный файл  main.rar ( 1.19 килобайт ) Кол-во скачиваний: 18
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 23 2009, 22:23
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Еще раз подтверждаю, что в IAR EWARM 5.40.1 никаких ошибок при компиляции этого файла не возникает. Проц выбрал LPC2138. Оптимизацию ставил High->Balanced, High->Size, High-Speed. Это я к тому, что приходите на работу и возьмите последнюю версию компилятора wink.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 23 2009, 23:11
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Что я буду делать с 5-ой версией версией компилера если у меня куча проектов для 4-ой, а они несовместимы. И перелопачивать проекты у меня желания нет. В лучшем случае можно применить 5-ую для новых проектов.

Цитата(zltigo)
Прикрепленные файлы
Прикрепленный файл main.rar ( 1.19 килобайт ) Кол-во скачиваний: 3

Версия IAR 4.42 это хорошо. Меня интересует только 4.хх. Но выбран код THUMB, а надо ARM. В тумбе 4.20 и 4.30 тоже не ругаются.

Код
        if (tmp >= 1000) if (LightCur != LightNew)
так не глючит

Код
        if ((tmp >= 1000) && (LightCur != LightNew))
не глючит

Код
        if ((LightCur != LightNew) && (LightStamp1 >= 1000))
глючит

Код
        if (LightCur != LightNew) if (LightStamp1 >= 1000)
глючит

Код
        if (LightCur != LightNew) if (tmp >= 1000)
глючит

Первый и последний примеры показательны. То же самое, но в другой очерёдности.

Сообщение отредактировал GetSmart - Oct 23 2009, 23:31


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 23 2009, 23:38
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Установил 4.20a и 4.30a. Файл из сообщения №6. Target - LPC2138. Оптимизация High->Size и High->Speed. Режим ARM.
В 4.20a действительно в режиме ARM возникает ошибка, но по-моему это ошибка IDE, а не компилятора. См. скриншот.
В 4.30a ошибок нет.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 24 2009, 00:09
Сообщение #11


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Что то я в процессе кастрации не заметил когда ошибка слегка поменялась smile.gif
Вот такой код выдаёт оригинальную ошибку. В 4.20 и в 4.30A (4.30.1.537) тоже.
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 24 2009, 01:22
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может я что-то не то делаю, но в 4.20 ошибка почти такая же, а в 4.30 нет ошибок. laughing.gif Оптимизация в обоих случаях High->Size.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 24 2009, 02:16
Сообщение #13


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Да, странно. У меня в директории IAR4.30 лежит компилятор (iccarm.exe) версии 4.20. Я видно когда-то давно экспериментировал и заменил его. А двумя постами раньше по ошибке указал версию aarm.exe. Восстановил iccarm.exe версии 4.30.1.237. В нём действительно ошибка не возникает. Даже в полном проекте, на который ругался 4.20.

ЗЫ. Кто-нить знает как обойти (убрать, изменить, блокировать и тд) некоторые ключи компилятора, которые при компиляции передаются iccarm.exe ? А то я хотел сделать гибрид из 4 и 5-ой версий (линкер 4.хх, компилятор 5.хх), а компилятор ругается на параметр --stack_align. Вообще-то некоторые ключи отличаются, например оптимизация. Может можно как-то и их изменять в процессе передачи компилятору?

Сообщение отредактировал GetSmart - Oct 24 2009, 02:30
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 24 2009, 10:55
Сообщение #14


Гуру
******

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



Цитата(GetSmart @ Oct 24 2009, 02:11) *
Версия IAR 4.42 это хорошо. Меня интересует только 4.хх. Но выбран код THUMB, а надо ARM. В тумбе 4.20 и 4.30 тоже не ругаются.

Как Вы написали такк тупо и сделал. Да пофиг, какие опции - не ругается, по тому, что не может никак ругаться на простейшие коды. Кашу из IDE устроили, DLL и прочее замешали в кучу и понеслось....
Цитата
А то я хотел сделать гибрид из 4 и 5-ой версий (линкер 4.хх, компилятор 5.хх)

Вивисектор, нашелся, понимаешь - НУ РАЗНЫЕ, СОВСЕМ разные форматы объектников не слиннкует старый линкер ничего. А если V5 НЕ pro версия, то тот объектник вообще никто не слинкует, ибо для демо и иже с ней объектники специально модифицированы, дабы стандартные GCC binutils шли лесом.
Цитата
И перелопачивать проекты у меня желания нет. В лучшем случае можно применить 5-ую для новых проектов.

Ну офигенная работа - после того, как ОДИН раз сделал вообще никакая. А уж пляcки с 4.20 вместо финишного 4.42 это вообще ни в какие ворота не лезет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 24 2009, 11:57
Сообщение #15


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(zltigo @ Oct 24 2009, 16:55) *
Как Вы написали такк тупо и сделал. Да пофиг, какие опции - не ругается, по тому, что не может никак ругаться на простейшие коды. Кашу из IDE устроили, DLL и прочее замешали в кучу и понеслось....

Не надо так нервничать smile.gif Я работаю уже давно в 4.20. В полноценном и никак не модифицированном, ни EXE, ни DLL. В нём и возникает (стабильно!!!) ошибка на 100% корректном Си коде. Не я виноват, что 4.20 кривой (слегка, т.к. все остальные мои проекты на нём работают).

Цитата
А уж пляcки с 4.20 вместо финишного 4.42 это вообще ни в какие ворота не лезет.

Я почему не переходил на более новые - был у меня один сложный проект, на 4.20 работал замечательно. Потом я его откомпилил в 4.30 и он перестал работать. Я тогда спешил и не стал исследовать где вылез косяк. Просто в памяти отложилась эта ситуация. Теперь жалею, что не сохранил весь проект в архиве с камментом для выяснения проблемы.

А вообще, я притягиваю баги компиляторов biggrin.gif Уже не один и не два нашёл для ARMов.

Скачал ещё 4.10, 4.41, 4.42. Буду посмотреть как они компилят и что за код генерят. Появилось время для исследований.

Сообщение отредактировал GetSmart - Oct 24 2009, 12:11


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:21
Рейтинг@Mail.ru


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