|
Версии IAR -> EWAVR 4.30A, Есть ли смысл апгрэдить? |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 35)
|
Jun 13 2007, 17:28
|

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

|
Цитата(rezident @ Jun 13 2007, 19:56)  Дык оно универсальное. Концентрацию только чуть увеличить нужно Да. Проверено. Новенькое: Код New features Improved handling of small aggregate types (structures and unions) and registers.
A new extended keyword __no_runtime_init has been added to the product. For more information, see manual corrections.
Known problems ..........................
Program corrections EW19158: struct copying, with variable clustering enabled could result in an internal error.
EW19095: On low optimization levels a MULS could be generated instead of a FMULS.
EW19066: A cast from a __generic pointer to a flash pointer could modify the __generic pointer. This has been corrected.
EW19048: The files iopwm2.h, iopwm3.h, iowm2b.h, and iopwm3b.h have been updated to match revision H of Atmel's specification of these devices.
EW18976: Nested loops with constant trip counts could be incorrectly optimized. Nested loops should now execute the correct number of iterations.
EW18966: The files lnkm644ps.xcl and cfgm644p.xcl now have a correct interrupt vector table size.
EW18847: The intrinsic __dgetexp did not generate correct code in all cases, this has now been corrected.
EW18827: The alternate bit names for UCSRnA, UCSRnB and UCSRnC when the USART is in SPI master mode has beem added to the files iom2560.h and iom2561.h.
EW18800: The erroneous transfer of a supplied memory type attribute to const parameters no longer occurrs.
EW18719: The call stack information was broken for code located above 0x4000 on the devices ATmega640, ATmega1280, and ATmega1281.
EW18047: A problem that could cause an internal error when the option --mfc was used has been corrected.
Miscellaneous The CBRA and SBRA instructions are supported. Related command line options are: --enable_cbra_sbra --set_cbra_sbra_address
__x, __z __x_z, __z_x The compiler defines the function type attributes __x, __z __x_z, and __z_x which are used by parts of the runtime library. These attributes can give very efficient code in a local perspective, but should be used with care as they change the calling convention and may have a negative effect on the size of the entire application.
Keyword Description __x The first pointer in the parameter list is placed in register X __z The first pointer in the parameter list is placed in register Z __x_z The first pointer in the parameter list is placed in register X and the second one in register Z __z_x The first pointer in the parameter list is placed in register Z and the second one in register X
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 13 2007, 18:07
|
Местный
  
Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410

|
Цитата Дык оно универсальное. Концентрацию только чуть увеличить нужно. В ридми все описано. Вместо 10_WIN видимо 11_WIN нужно. Спасибо! Пациент лекарство принял, теперь готов к подвигам (:
|
|
|
|
|
Jun 13 2007, 18:36
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Первое впечатление от теста положительное. Проект на С++ достаточно большой (выходной код ~120kB). Всё работает. Но! При том же уровне оптимизации (макс. по скорости) код увеличился ~2kB. стал анализировать и обнаружил в числе прочего, что компилятор позаменял вызов некоторых функций (в основном это короткие прологи/эпилоги) инлайновыми вставками. Таким образом получается даже немного быстрее. При открытии старого (версии 4.21) воркспейса с проектами воркбенч сказал, что они старого??? формата и перевёл их на новый, хотя я в сравнении особой разницы не заметил. Новые фичи в pdf так и не внесены, так что надо читать manuals.htm. Наконец то легализовали __x __x_z и др., но предостерегают ими злоупотреблять. Глюк с __eeput64_16 в eeprom.s90 (я уже писал о нём) так и не исправили, ему уже скоро пять лет исполнится
|
|
|
|
|
Jun 13 2007, 22:54
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Цитата(IgorKossak @ Jun 13 2007, 21:36)  Первое впечатление от теста положительное. А у меня первое впечатление отрицательное: При попытке откомпилировать старый проект (максимальная оптимизация по размеру) были получены заметно различные результаты оптимизации: Цитата Версия 4.21А:
7 747 bytes of CODE memory (+ 24 bytes shared) 667 bytes of DATA memory (+ 26 bytes shared) 25 bytes of XDATA memory
Errors: none Warnings: none
Версия 4.30A
7 821 bytes of CODE memory (+ 24 bytes shared) 667 bytes of DATA memory (+ 26 bytes shared) 25 bytes of XDATA memory
Errors: none Warnings: none Тоесть разница составляет 74 байта.... Хотя помнится мне что в версии 4.21А чтобы получить "7 747 bytes of CODE" пришлось попотеть в битве за парочку байтов.... А тут разница в 74 байта !!!
|
|
|
|
|
Jun 20 2007, 09:07
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387

|
Цитата(OLEG_BOS @ Jun 14 2007, 02:54)  А у меня первое впечатление отрицательное: При попытке откомпилировать старый проект (максимальная оптимизация по размеру) были получены заметно различные результаты оптимизации: Тоесть разница составляет 74 байта.... Хотя помнится мне что в версии 4.21А чтобы получить "7 747 bytes of CODE" пришлось попотеть в битве за парочку байтов.... А тут разница в 74 байта !!!  Может это связано с: Цитата EW18976: Nested loops with constant trip counts could be incorrectly optimized. Nested loops should now execute the correct number of iterations. Исправили глюк в оптимизации, вот код нормально стал генерироваться и как следствие стал больше.
|
|
|
|
|
Jun 20 2007, 11:40
|

Местный
  
Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639

|
Цитата(IceS @ Jun 20 2007, 12:07)  ....как следствие стал больше. Уважаемый IceS, я что- непойму: это есть хорошо или это есть плохо ? Цитата Исправили глюк в оптимизации, вот код нормально стал генерироваться А Вы думаете в Версии 4.21A у меня получился по Вашей логике "не нормальный" код ? А как же тогда устройство работает и успешно реализуется ? Цитата Может это связано с: А что тут думать и гадать - возьмите в обоих версиях включите галочку Linker -> List-> Generate linker listing и посмотрите какой код генерит одна и другая версия... Возможно у Вас еще появятся предположения и философские мысли по поводу того с какой ноги надо встать что бы IAR генерил правильный код Незнаю как Вас, Уважаемый IceS, а лично меня в первую очередь интересует конечный результат - это законченное рабочее устройство, а не диссертации на нему "Недостатки и преимущества различных версий IAR". В моем предыдущем посте я высказал сугубо мое субъективное мнение которое не является "словом в последней инстанции" - каждый волен выбирать сам что ему по душе и с чем ему работать.
|
|
|
|
|
Jun 20 2007, 13:40
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(OLEG_BOS @ Jun 20 2007, 14:40)  В моем предыдущем посте я высказал сугубо мое субъективное мнение которое не является "словом в последней инстанции" - каждый волен выбирать сам что ему по душе и с чем ему работать. Ну и чего было так волноваться? Здесь не только Вы имеете право высказывать субьективное мнение. А у IceS оно оказалось весьма правдоподобным. Что касается работоспособности и продаваемости изделий, то неоднократно приходилось видеть и исправлять подобные программы, где глюк на глюке. Ибо под работоспособностью чаще понимается удовлетворительный результат, а далеко не всегда правильный. А о том, что зачастую "продают" я вообще молчу.
|
|
|
|
|
Jun 20 2007, 15:50
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387

|
Цитата(OLEG_BOS @ Jun 20 2007, 15:40)  Незнаю как Вас, Уважаемый IceS, а лично меня в первую очередь интересует конечный результат - это законченное рабочее устройство, а не диссертации на нему "Недостатки и преимущества различных версий IAR". Если бы я не был уверен в сказанном, не стал бы вас утруждать прочтением моего поста, а глюк имел место быть  , к сожалению. Сейчас делаю проект. С включенной оптимизацией долго пытался отладить код, не мог понять что за глюки, без оптимизации все ок. Посмотрел в листинг и ужаснулся, при оптимизации часть процедуры не скомпилена  , она вообще отсутствовала! Думал дело в отсутствии лицензии на софт  , и потому не придал особого значения. А вот счас думаю дело в компиляторе, тем более что сам ИАР об этом пишет. Сейчас, к сожалению, не получается воспроизвести эту ситуацию. Так что можете считать мои высказывания бездоказательными  , либо поверить на слово, что это имело место быть.
Сообщение отредактировал IceS - Jun 20 2007, 15:51
|
|
|
|
|
Jun 20 2007, 16:26
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(IceS @ Jun 20 2007, 21:50)  С включенной оптимизацией долго пытался отладить код, не мог понять что за глюки, без оптимизации все ок. Посмотрел в листинг и ужаснулся, при оптимизации часть процедуры не скомпилена  , она вообще отсутствовала! Думал дело в отсутствии лицензии на софт  , и потому не придал особого значения. А вот счас думаю дело в компиляторе, тем более что сам ИАР об этом пишет. Сейчас, к сожалению, не получается воспроизвести эту ситуацию. Так что можете считать мои высказывания бездоказательными  , либо поверить на слово, что это имело место быть. Не думаю, что кто-то станет опровергать это  Многие с таким поведением компилятора сталкивались. Только проблема не в том, что компилятор плохой, а в том, что программисты не внимательно читают его reference guide. Компилятор совершенно формально оптимизирует написанный вами исходник. И если "видит", что в данной функции переменная не изменяется, либо изменяется, но результат ее изменения не влияет на другие переменные, то он смело выкидывает код ее обработки, который вы перед этим долгое время "вылизывали". Чтобы избежать такой ситуации нужно тоже быть формалистом и внимательно прочитать про использование квалификатора volatile.
|
|
|
|
|
Jun 22 2007, 20:30
|

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

|
Цитата(ivainc1789 @ Jun 22 2007, 23:12)  Вроде бы простой алгоритм. А если подумать, хоть чуть-чуть? Рассмотрим простейший вариант: Имеем два файла в одном подпрограмма номер1 изменяющая некую переменную. В другом файле подпрограмма номер2 раборающая с ней-же. Обе подпрограммы откуда-то вызываются. Излагайте алгоритм.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 23 2007, 00:08
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(ivainc1789 @ Jun 23 2007, 03:19)  Я рассматриваю случай, когда переменная изменяется В ПРЕРЫВАНИИ (в обработчике). Компилятор (или оптимизатор, в данном контексте - не суть) может просто не оптимизировать переменные, которые изменяют свое значение в прерываниях. А откуда компилятор должен знать, что переменная изменяется в прерывании? Для него функция обработчика прерывания это такая же функция как и другие. Отличие ее лишь в том, что адрес вызова этой функции компилятор размещает по указанному вектору и заканчивается функция оператором reti, а не ret. Цитата(ivainc1789 @ Jun 23 2007, 03:19)  Соответственно, любые вхождения данной переменной в других файлах также не оптимизируются. И как бы не вижу тут проблем. Компилятор по отношению к сорцам - внешняя программа, можно запросто получить список переменных обработчиков и передать оптимизатору указание не выкидывать эти переменные вне обработчиков. Что я не понимаю, изложите плиз... Не сочтите за грубость, но чтобы разбираться далее предлагаю небольшой ликбез. Напомню, что в Си есть четыре класса переменных: автоматические (локальные), регистровые, статические и глобальные (внешние). Регистровые можно вообще не рассматривать, т.к. обычно компиляторы для embedded приложений "чихали" на такое объявление. Они используют регистры по своему усмотрению, так как им более удобно ускорить выполнение программы. Из оставшихся трех у локальных и статических переменных ограниченная область "видимости". Локальные "видны" компилятору в пределах функции или блока (части функции). Под локальные переменные отводится область памяти на стеке или в регистрах. Глобальные переменные располагаются в основном ОЗУ. Область видимости у них весь модуль, где они объявлены. Чтобы глобальная переменная была видна в другом модуле, ее нужно объявить в нем тоже, но только обязательно указав, что она является внешней (с квалификатором extern). Иначе компилятор сделает попытку создасть еще одну переменную с таким же именем, а линковщик потом выдаст ошибку, указав на дублирование имен глобальных переменных. Статические переменные могут быть как локальными, так и глобальными, но с перечисленными выше особенностями. Отличие статической локальной переменной от обычной автоматической (локальной) в том, что для статических переменных всегда отводится память в основном ОЗУ. А статические глобальные переменные имеют область видимости ограниченную текущим модулем. Вы многомодульные программы писали когда-нибудь? Имею в виду программу (проект) состоящую из нескольких файлов. Если да, то странно, что не понимаете разницу в работе компилятора и линковщика. Компилятор содает объектные модули для кажого исходного файла отдельно, обрабатывая исходный текст в соответствии со своими алгоритмами оптимизации. Т.е. "переводит" с языка Си на язык ассемблера, а затем в объектный код. По большому счету он не "знает" о глобальных переменных, объявленных в других файлах. О всех переменных "знает" только линковщик. Но линковщик уже НЕ оптимизирует код, он только редактирует связи между объектами, подставляя и проверяя адреса для меток и переменных. Оптимизирует код компилятор, но он НЕ знает о всех переменных, расположенных во всех файлах проекта. Понимаете какой замкнутый круг получается? Поэтому-то формализация автоматического объявления переменных в тип volatile весьма неординарна и "в лоб" не решается. P.S. если я где-то ошибся в описаниях, то надеюсь более опытные товарищи меня поправят
|
|
|
|
|
Jun 25 2007, 21:08
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 17-10-06
Из: Санкт Петербург
Пользователь №: 21 387

|
Цитата(rezident @ Jun 23 2007, 04:08)  А откуда компилятор должен знать, что переменная изменяется в прерывании? Для него функция обработчика прерывания это такая же функция как и другие. Отличие ее лишь в том, что адрес вызова этой функции компилятор размещает по указанному вектору и заканчивается функция оператором reti, а не ret. ну так присвоение происходит переменной, значит она изменяется, все - таки обработчик прерывания для компилятора не такая уж и обычная функия, хотя бы даже по тому что у нее другая команда возврата! Цитата ... Область видимости у них весь модуль, где они объявлены. Чтобы глобальная переменная была видна в другом модуле, ее нужно объявить в нем тоже ... модуль 1 Код unsigned char a; #include "module2.c" void main() { while(1) { func2(); b ^= a; } } модуль 2 "module2.c" Код unsigned char b;
void func2() { a=b; } проверьте или просто поверьте, все компилится.
|
|
|
|
|
Jun 25 2007, 21:20
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(IceS @ Jun 26 2007, 03:08)  проверьте или просто поверьте, все компилится. Охотно верю  Почему это не должно комплилиться-то? Тот факт, что вы разбили исходник на два модуля (файла) совершенно нивелируется командой препроцессора include, которая ДО компиляции первого модуля просто "вставляет" в него содержимое второго. Для компилятора ваш пример эквивалентен вот такому тексту исходника. Код unsigned char a; unsigned char b;
void func2() { a=b; } void main() { while(1) { func2(); b ^= a; } }
|
|
|
|
|
Sep 7 2007, 03:49
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(aspID @ Sep 7 2007, 01:24)  Простите новичка, но кто-нибудь может подсказать по поводу версии "не -ev-"? Очень хотелось бы отладчик возыметь... Общаться приходится в основном с Tiny2313. Отлаживаюсь в AVR Studio, но хотелось бы иметь отладчик в IAR. Насколько такое возможно? Нахожу только ewavr -ev-web-XXX(a).exe варианты  Evaluation версия является вполне полноценной, единственное ее серьезное отличие от релизной (коммерческой) состоит в том, что в ней отсутствуют исходнкики библиотек, поэтому самому собрать библиотеку вы не сможете. В остальном (по функциональности) там все то же самое. Кстати, ХХХ в названии обычно указывает на несколько иной контент, нежели тулчейн для программирования МК.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Sep 8 2007, 04:16
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-06-06
Пользователь №: 18 108

|
4.30 при загрузке проекта начинает отжирать 50% ресурсов проца. У кого нить еще есть такое? Причем ладно бы при дебаге отжирал, так нет, в режиме редактирования. С чего бы это?
|
|
|
|
|
Sep 8 2007, 07:04
|

Местный
  
Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714

|
Цитата начинает отжирать 50% ресурсов проца пока не жаловался, стоит на двух машинах, на одной - в VMWare
Сообщение отредактировал aspID - Sep 8 2007, 07:05
|
|
|
|
|
Sep 10 2007, 16:25
|

Местный
  
Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714

|
Кстати, на домашней машине так и не удается распинать C-Cpy  ни в прямую на операционке, ни в VMWare. То ли из-за стоящей WinXP x64.... Запускаешь Debug, проект пересобирается и просто стоит, будто только скомпилироваться его и просили. Кстати, при отладке в AVR Studio тоже непонятно чего творится - останавливаемся на строках с комментариями и по ним шагаем...  Понять бы еще что именно "не нравится" - камень или ОС. Судя по тому, что проблема в VMWare та же самая, может быть, дело в процессоре? (Core2DUO)
Сообщение отредактировал aspID - Sep 10 2007, 16:37
|
|
|
|
|
Sep 13 2007, 11:40
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Поставил 4.30 компилю проект и... внутренняя ошибка в модуле меню  После изысканий выяснилось что ему не понравилось __generic в описании аргументов фунций откатился на старую, обидно. А еще давно достает то, что не сохраняются настройки прерываний в С-SPY, а по доке вроде как должны.
|
|
|
|
|
Oct 4 2007, 11:53
|
Группа: Новичок
Сообщений: 6
Регистрация: 16-06-06
Пользователь №: 18 108

|
Цитата Вы уверены, что именно IAR ресурсы потребляет? да, уверен. и process explorer и task manager указывают на то что IarIDEPm.exe использует порядка 50% ресурсов проца.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|