Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Версии IAR -> EWAVR 4.30A
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dog Pawlowa
Использую EW AVR 411a - не нравится, что при некорректном завершении отладки закрывается среда.
EW MSP430 321A - 1. заблокировано "Go to definition of ..." 2. Постоянно лезет в директорий другого проекта при поиске и открытии файла.

Есть ли смысл апгрэйдить, если все остальное в принципе устраивает, и на что ?
rezident
Апгрейдить есть смысл, если что-то кардинально не устраивает или глючит и есть уверенность, что в следующей верии этого не будет.
Я пользуюсь вер. 3.30А для MSP430. Хотя сейчас, когда пошли проекты на F20xx, пробую 3.42А. Для обеих версий наблюдаю некоторые глюки при работе с переменными volatile. Если такая переменная находится в структуре, то компилятор не всегда корректно ее обрабатывает - "забывает" что она volatile. Причем проявление этого глюка зависит от положения переменной в структуре. Я писал об этом в пустыне.
Кроме того в симуляторе 3.42А (в отличие от 3.30А) перестала работать "ручная" симуляция вызова прерывания. А вот макрос, созданный для этого же дела, работает.
IgorKossak
О EWAVR могу сказать, что обновляться смело можно (в плане того, что глючности не прибавилось, а уменьшилось), но в некоторых случаях придётся корректировать проект из-за нового синтаксиса.
Последнее касается только ИАРовских расширений.
Новые версии стали намного строже в части диагностики и то, что раньше не вызывало возражений компилятора, сейчас он может мягко намекнуть на возможные проблемы. Надо только не подавлять диагностику и ремарки разрешить.
zltigo
Компиляторы upgrade надо делать всегда.
IAR по каждому из компиляторов ведет историю изменений - можете ознакомиться на сайте.
OLEG_BOS
Цитата(zltigo @ Jun 13 2007, 17:42) *
Компиляторы upgrade надо делать всегда.

Кстати, для AVR сегодня появился новый релиз : EW AVR 430A.
..Будем пробовать делать upgrade smile.gif
Itch
а такскать, лекарство для него где можно найти?
rezident
Цитата(Itch @ Jun 13 2007, 22:39) *
а такскать, лекарство для него где можно найти?

Дык оно универсальное. Концентрацию только чуть увеличить нужно. В ридми все описано. Вместо 10_WIN видимо 11_WIN нужно.

Цитата(OLEG_BOS @ Jun 13 2007, 21:51) *
Кстати, для AVR сегодня появился новый релиз : EW AVR 430A.
..Будем пробовать делать upgrade smile.gif

Вот же блин, а я буквально намедни для товарища 4.21A скачал. sad.gif
zltigo
Цитата(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
Itch
Цитата
Дык оно универсальное. Концентрацию только чуть увеличить нужно. В ридми все описано. Вместо 10_WIN видимо 11_WIN нужно.

Спасибо! Пациент лекарство принял, теперь готов к подвигам (:
IgorKossak
Первое впечатление от теста положительное.
Проект на С++ достаточно большой (выходной код ~120kB). Всё работает. Но!
При том же уровне оптимизации (макс. по скорости) код увеличился ~2kB. стал анализировать и обнаружил в числе прочего, что компилятор позаменял вызов некоторых функций (в основном это короткие прологи/эпилоги) инлайновыми вставками. Таким образом получается даже немного быстрее.
При открытии старого (версии 4.21) воркспейса с проектами воркбенч сказал, что они старого??? формата и перевёл их на новый, хотя я в сравнении особой разницы не заметил.
Новые фичи в pdf так и не внесены, так что надо читать manuals.htm.
Наконец то легализовали __x __x_z и др., но предостерегают ими злоупотреблять.
Глюк с __eeput64_16 в eeprom.s90 (я уже писал о нём) так и не исправили, ему уже скоро пять лет исполнится cool.gif
OLEG_BOS
Цитата(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 байта !!! wacko.gif
zltigo
Цитата(OLEG_BOS @ Jun 14 2007, 01:54) *
чтобы получить "7 747 bytes of CODE" пришлось попотеть в битве за парочку байтов....

Позвольте не поверить о пролитом поте в трудах по экономии пары байтов в 7747 байтном коде писаном на 'C' smile.gif Ну а к к глючам оптимизации следует относиться творчески, ибо сведение их многообразия к трем IDE-шным отфонарным наборам не является хорошим подходом к делу.
IceS
Цитата(OLEG_BOS @ Jun 14 2007, 02:54) *
А у меня первое впечатление отрицательное:

При попытке откомпилировать старый проект (максимальная оптимизация по размеру) были получены заметно различные результаты оптимизации:

Тоесть разница составляет 74 байта.... Хотя помнится мне что в версии 4.21А чтобы получить "7 747 bytes of CODE" пришлось попотеть в битве за парочку байтов.... А тут разница в 74 байта !!! wacko.gif

Может это связано с:
Цитата
EW18976: Nested loops with constant trip counts could be incorrectly optimized. Nested loops should now execute the correct number of iterations.

Исправили глюк в оптимизации, вот код нормально стал генерироваться и как следствие стал больше.
OLEG_BOS
Цитата(IceS @ Jun 20 2007, 12:07) *
....как следствие стал больше.

Уважаемый IceS, я что- непойму: это есть хорошо или это есть плохо ? wink.gif

Цитата
Исправили глюк в оптимизации, вот код нормально стал генерироваться


А Вы думаете в Версии 4.21A у меня получился по Вашей логике "не нормальный" код ? А как же тогда устройство работает и успешно реализуется ? wacko.gif

Цитата
Может это связано с:


А что тут думать и гадать - возьмите в обоих версиях включите галочку Linker -> List-> Generate linker listing и посмотрите какой код генерит одна и другая версия... Возможно у Вас еще появятся предположения и философские мысли по поводу того с какой ноги надо встать что бы IAR генерил правильный код wink.gif

Незнаю как Вас, Уважаемый IceS, а лично меня в первую очередь интересует конечный результат - это законченное рабочее устройство, а не диссертации на нему "Недостатки и преимущества различных версий IAR".

В моем предыдущем посте я высказал сугубо мое субъективное мнение которое не является "словом в последней инстанции" - каждый волен выбирать сам что ему по душе и с чем ему работать.
IgorKossak
Цитата(OLEG_BOS @ Jun 20 2007, 14:40) *
В моем предыдущем посте я высказал сугубо мое субъективное мнение которое не является "словом в последней инстанции" - каждый волен выбирать сам что ему по душе и с чем ему работать.

Ну и чего было так волноваться? Здесь не только Вы имеете право высказывать субьективное мнение.
А у IceS оно оказалось весьма правдоподобным.

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

Если бы я не был уверен в сказанном, не стал бы вас утруждать прочтением моего поста, а глюк имел место быть sad.gif, к сожалению. Сейчас делаю проект. С включенной оптимизацией долго пытался отладить код, не мог понять что за глюки, без оптимизации все ок. Посмотрел в листинг и ужаснулся, при оптимизации часть процедуры не скомпилена 07.gif , она вообще отсутствовала! Думал дело в отсутствии лицензии на софт wink.gif , и потому не придал особого значения. А вот счас думаю дело в компиляторе, тем более что сам ИАР об этом пишет.

Сейчас, к сожалению, не получается воспроизвести эту ситуацию. Так что можете считать мои высказывания бездоказательными sad.gif, либо поверить на слово, что это имело место быть.
rezident
Цитата(IceS @ Jun 20 2007, 21:50) *
С включенной оптимизацией долго пытался отладить код, не мог понять что за глюки, без оптимизации все ок. Посмотрел в листинг и ужаснулся, при оптимизации часть процедуры не скомпилена 07.gif , она вообще отсутствовала! Думал дело в отсутствии лицензии на софт wink.gif , и потому не придал особого значения. А вот счас думаю дело в компиляторе, тем более что сам ИАР об этом пишет.

Сейчас, к сожалению, не получается воспроизвести эту ситуацию. Так что можете считать мои высказывания бездоказательными sad.gif, либо поверить на слово, что это имело место быть.

Не думаю, что кто-то станет опровергать это wink.gif Многие с таким поведением компилятора сталкивались. Только проблема не в том, что компилятор плохой, а в том, что программисты не внимательно читают его reference guide. Компилятор совершенно формально оптимизирует написанный вами исходник. И если "видит", что в данной функции переменная не изменяется, либо изменяется, но результат ее изменения не влияет на другие переменные, то он смело выкидывает код ее обработки, который вы перед этим долгое время "вылизывали". Чтобы избежать такой ситуации нужно тоже быть формалистом и внимательно прочитать про использование квалификатора volatile.
ivainc1789
Я конечно не эксперт в программировании, но объясните плиз почему оптимизатор не может САМ себе объявить соотв переменные прерываний, к которым есть обращение в основной программе как volatile ? Вроде бы простой алгоритм. А то тут столько народу на эти вилы попадает...
zltigo
Цитата(ivainc1789 @ Jun 22 2007, 23:12) *
Вроде бы простой алгоритм.

А если подумать, хоть чуть-чуть? Рассмотрим простейший вариант:
Имеем два файла в одном подпрограмма номер1 изменяющая некую переменную. В другом файле подпрограмма номер2 раборающая с ней-же. Обе подпрограммы откуда-то вызываются.
Излагайте алгоритм.
rezident
Цитата(ivainc1789 @ Jun 23 2007, 02:12) *
Я конечно не эксперт в программировании, но объясните плиз почему оптимизатор не может САМ себе объявить соотв переменные прерываний, к которым есть обращение в основной программе как volatile ?

Любая программа не умнее программиста, написавшего его. Это медицинский факт! laughing.gif
Если вы сможете формализировать (придумать алгоритм) правило по которому оптимизатор должен самостоятельно присваивать переменным квалификатор volatile, то сразу же напишите об этом авторам компилятора. Ни сколько не сомневаюсь, что они очень обрадуются такому подарку. Я не шучу!
ivainc1789
Цитата(zltigo @ Jun 23 2007, 00:30) *
А если подумать, хоть чуть-чуть? Рассмотрим простейший вариант:
Имеем два файла в одном подпрограмма номер1 изменяющая некую переменную. В другом файле подпрограмма номер2 раборающая с ней-же. Обе подпрограммы откуда-то вызываются.
Излагайте алгоритм.


Так я "пыталсо" думать... lol.gif Но видимо безуспешно... biggrin.gif
Я рассматриваю случай, когда переменная изменяется В ПРЕРЫВАНИИ (в обработчике). Компилятор (или оптимизатор, в данном контексте - не суть) может просто не оптимизировать переменные, которые изменяют свое значение в прерываниях. Соответственно, любые вхождения данной переменной в других файлах также не оптимизируются. И как бы не вижу тут проблем. Компилятор по отношению к сорцам - внешняя программа, можно запросто получить список переменных обработчиков и передать оптимизатору указание не выкидывать эти переменные вне обработчиков. Что я не понимаю, изложите плиз...
rezident
Цитата(ivainc1789 @ Jun 23 2007, 03:19) *
Я рассматриваю случай, когда переменная изменяется В ПРЕРЫВАНИИ (в обработчике). Компилятор (или оптимизатор, в данном контексте - не суть) может просто не оптимизировать переменные, которые изменяют свое значение в прерываниях.

А откуда компилятор должен знать, что переменная изменяется в прерывании? Для него функция обработчика прерывания это такая же функция как и другие. Отличие ее лишь в том, что адрес вызова этой функции компилятор размещает по указанному вектору и заканчивается функция оператором reti, а не ret.
Цитата(ivainc1789 @ Jun 23 2007, 03:19) *
Соответственно, любые вхождения данной переменной в других файлах также не оптимизируются. И как бы не вижу тут проблем. Компилятор по отношению к сорцам - внешняя программа, можно запросто получить список переменных обработчиков и передать оптимизатору указание не выкидывать эти переменные вне обработчиков. Что я не понимаю, изложите плиз...

Не сочтите за грубость, но чтобы разбираться далее предлагаю небольшой ликбез.
Напомню, что в Си есть четыре класса переменных: автоматические (локальные), регистровые, статические и глобальные (внешние). Регистровые можно вообще не рассматривать, т.к. обычно компиляторы для embedded приложений "чихали" на такое объявление. Они используют регистры по своему усмотрению, так как им более удобно ускорить выполнение программы.
Из оставшихся трех у локальных и статических переменных ограниченная область "видимости". Локальные "видны" компилятору в пределах функции или блока (части функции). Под локальные переменные отводится область памяти на стеке или в регистрах.
Глобальные переменные располагаются в основном ОЗУ. Область видимости у них весь модуль, где они объявлены. Чтобы глобальная переменная была видна в другом модуле, ее нужно объявить в нем тоже, но только обязательно указав, что она является внешней (с квалификатором extern). Иначе компилятор сделает попытку создасть еще одну переменную с таким же именем, а линковщик потом выдаст ошибку, указав на дублирование имен глобальных переменных.
Статические переменные могут быть как локальными, так и глобальными, но с перечисленными выше особенностями. Отличие статической локальной переменной от обычной автоматической (локальной) в том, что для статических переменных всегда отводится память в основном ОЗУ. А статические глобальные переменные имеют область видимости ограниченную текущим модулем.
Вы многомодульные программы писали когда-нибудь? Имею в виду программу (проект) состоящую из нескольких файлов. Если да, то странно, что не понимаете разницу в работе компилятора и линковщика. Компилятор содает объектные модули для кажого исходного файла отдельно, обрабатывая исходный текст в соответствии со своими алгоритмами оптимизации. Т.е. "переводит" с языка Си на язык ассемблера, а затем в объектный код. По большому счету он не "знает" о глобальных переменных, объявленных в других файлах. О всех переменных "знает" только линковщик. Но линковщик уже НЕ оптимизирует код, он только редактирует связи между объектами, подставляя и проверяя адреса для меток и переменных. Оптимизирует код компилятор, но он НЕ знает о всех переменных, расположенных во всех файлах проекта.
Понимаете какой замкнутый круг получается? Поэтому-то формализация автоматического объявления переменных в тип volatile весьма неординарна и "в лоб" не решается.
P.S. если я где-то ошибся в описаниях, то надеюсь более опытные товарищи меня поправят laughing.gif
IceS
Цитата(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;
}

проверьте или просто поверьте, все компилится.
rezident
Цитата(IceS @ Jun 26 2007, 03:08) *
проверьте или просто поверьте, все компилится.

Охотно верю smile.gif Почему это не должно комплилиться-то? Тот факт, что вы разбили исходник на два модуля (файла) совершенно нивелируется командой препроцессора include, которая ДО компиляции первого модуля просто "вставляет" в него содержимое второго. Для компилятора ваш пример эквивалентен вот такому тексту исходника.
Код
unsigned char a;
unsigned char b;

void func2()
{
  a=b;
}
void main()
{
  while(1)
  {
    func2();
    b ^= a;
  }
}
aspID
Простите новичка, но кто-нибудь может подсказать по поводу версии "не -ev-"? Очень хотелось бы отладчик возыметь... Общаться приходится в основном с Tiny2313. Отлаживаюсь в AVR Studio, но хотелось бы иметь отладчик в IAR. Насколько такое возможно? Нахожу только ewavr-ev-web-XXX(a).exe варианты sad.gif

Первый приходящий в голову нормальному человеку, не нарушающему права не предлагать smile.gif
zltigo
Цитата(aspID @ Sep 6 2007, 21:24) *
кто-нибудь может подсказать...

Попробуйте более прямо спросить - я чего-то не понял sad.gif. Ну взяли EV версию и пользуйтесь в том числе и отладчиком.
rezident
aspID, чего надо-то? cranky.gif В версии evaluation отладчик/дебаггер (C-Cpy) не только имеется, но и работает. Если же хочется купить полную версию продукта, то при наличии денег это тоже не проблема. См. прайсы у дилеров IAR в России, например, у МТ-Систем.
dxp
Цитата(aspID @ Sep 7 2007, 01:24) *
Простите новичка, но кто-нибудь может подсказать по поводу версии "не -ev-"? Очень хотелось бы отладчик возыметь... Общаться приходится в основном с Tiny2313. Отлаживаюсь в AVR Studio, но хотелось бы иметь отладчик в IAR. Насколько такое возможно? Нахожу только ewavr-ev-web-XXX(a).exe варианты sad.gif

Evaluation версия является вполне полноценной, единственное ее серьезное отличие от релизной (коммерческой) состоит в том, что в ней отсутствуют исходнкики библиотек, поэтому самому собрать библиотеку вы не сможете. В остальном (по функциональности) там все то же самое.

Кстати, ХХХ в названии обычно указывает на несколько иной контент, нежели тулчейн для программирования МК. smile.gif
aspID
Да, перечитал инфо на сайте иара. Спутал видимо "It does not include support for MISRA C." с отладчиком.
Но тогда я не понял, почему может не запускаться отладчик. При попытке запуска Debug происходит сборка проекта и.... и на этом все заканчивается. IAR C/C++ Compiler for AVR 4.30A/W32 [Evaluation] (4.30.1.3)

Удалось запустить отладчик. Спасибо отозвавшимся! Не понимаю, почему на другой машине вчера не мог запустить... Буду пробовать еще вечером.
JimBin
4.30 при загрузке проекта начинает отжирать 50% ресурсов проца. У кого нить еще есть такое? Причем ладно бы при дебаге отжирал, так нет, в режиме редактирования. С чего бы это?
aspID
Цитата
начинает отжирать 50% ресурсов проца

пока не жаловался, стоит на двух машинах, на одной - в VMWare
IgorKossak
Цитата(JimBin @ Sep 8 2007, 07:16) *
4.30 при загрузке проекта начинает отжирать 50% ресурсов проца. У кого нить еще есть такое? Причем ладно бы при дебаге отжирал, так нет, в режиме редактирования. С чего бы это?

Вы уверены, что именно IAR ресурсы потребляет?
Запустите что-нибудь вроде Process Explorer и посмотрите подробнее.
aspID
Кстати, на домашней машине так и не удается распинать C-Cpy sad.gif ни в прямую на операционке, ни в VMWare. То ли из-за стоящей WinXP x64....
Запускаешь Debug, проект пересобирается и просто стоит, будто только скомпилироваться его и просили.

Кстати, при отладке в AVR Studio тоже непонятно чего творится - останавливаемся на строках с комментариями и по ним шагаем... help.gif

Понять бы еще что именно "не нравится" - камень или ОС. Судя по тому, что проблема в VMWare та же самая, может быть, дело в процессоре? (Core2DUO) sad.gif
andrvisht
Поставил 4.30 компилю проект и... внутренняя ошибка в модуле меню sad.gif
После изысканий выяснилось что ему не понравилось __generic в описании аргументов фунций
откатился на старую, обидно.
А еще давно достает то, что не сохраняются настройки прерываний в С-SPY, а по доке вроде как должны.
JimBin
Цитата
Вы уверены, что именно IAR ресурсы потребляет?


да, уверен. и process explorer и task manager указывают на то что IarIDEPm.exe использует порядка 50% ресурсов проца.
IgorKossak
Цитата(JimBin @ Oct 4 2007, 14:53) *
да, уверен. и process explorer и task manager указывают на то что IarIDEPm.exe использует порядка 50% ресурсов проца.

Очень странно. У меня IarIDEPm.exe потребляет 0%.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.