Перейти к содержанию
    

Highlights in version 5.20

Multi-file compilation for even better code optimization

VFP support

Improved Cortex-M3 optimization

Cortex-M3 SWV/SWO debugger support

Compiler speed optimizations

Faster flash loader

Support for unlimited breakpoint in flash via J-Link (optional license needed)

Linking with references to other link images

J-Link control panel

 

Feature: EWARM-EV Version: 15_WIN

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Multi-file compilation for even better code optimization

 

Интересно, что именно он пытается оптимизировать? Ничего не пишут? Или своими наблюдениями не поделитесь?

 

Improved Cortex-M3 optimization

 

Он начал использовать регистры 8-12? Или еще нет?

 

И еще вопрос - можно ли из него вменяемый релоцируемый эльф получить (как это было на 4.42)? Или все еще надо линкер от гнуся прикручивать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще вопрос - можно ли из него вменяемый релоцируемый эльф получить...

Полагаю, что нет - это искусственное ограничение для не pro версий 5.x - не думаю, что в eval 5.20 убрали.

Или все еще надо линкер от гнуся прикручивать?

Соответственно гнусный линкер ничего не линкует в принципе, но IARовский псевдогнутый нормально линкует орпгинальные гнутые вещи.

 

 

Feature: EWARM-EV Version: 15_WIN

Будем пробовать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, что именно он пытается оптимизировать? Ничего не пишут? Или своими наблюдениями не поделитесь?

Multi-file compilation units

In addition to applying different optimizations to different source files or even functions,

you can also decide what a compilation unit consists of—one or several source code

files.

By default, a compilation unit consists of one source file, but it is also possible to make

several source files in a compilation unit by using multi-file compilation. The advantage

is that interprocedural optimizations such as inlining and cross jump have more source

code to work on. Ideally, the whole application should be compiled as one compilation

unit. However, for large applications this is not practical because of resource restrictions

on the host computer.

Проще говоря, при компиляции каждого исходного файла в проекте получаются столько же обьектных файлов, в которых есть похожие куски, прологи\эпилоги, выделенные в подпрограммы фрагменты и т. д. и т. п. Мультифайловая компиляция позволяет получить такие куски в единственном экземпляре.

 

Наблюдения:

- в С работает, действительно результирующий код получается короче, приложение осталось работоспособно B) ;

- в С++ НЕ РАБОТАЕТ если файл ioxxxxxxx.h включается прямо или косвенно более чем в одном исходнике.

Наблюдения беглые и поверхностные, так что прошу извенить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наблюдения:

Для последнего 51 они тоже такую фичу добавили - тоже немножко работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В Multi-file compilation они мелкие функции подставляют как inline ( и в итоге самостоятельная функция может быть вообще выкинута) и доступ к переменным по смещению от индексного регистра лучше получается т.к. видно сразу много файлов. Покрайней мере для АВР так было когда только появилась эта фича.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В Multi-file compilation они мелкие функции подставляют как inline

Ну не все так прямолинейно, хотя в каких-то случаях и это явно используется.

Сейчас откомпилил 5.20 лабораторный проектик под LPC2148. При тупой максимальной оптимизации по размеру размер получившегося кода сопоставим с 5.11. Однако опимизация по производительнсти дала потрясающее увеличение обьема кода на 25%. При этом Multi-file compilation заметно уменьшила размер кода - превышение стало примерно на 15%. Сейчас нет времени экспериментировать - но поближе к субботе вдумчиво покопаюсь. Правда, на основной машине я 5.11 уже снес :) посему сравнение будет с 4.42...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость MALLOY2

Мои 5 копеек в тему, произвел тестирование своего проекта на версии 5.20.

Краткое описание проекта.

 

Проц STR912FA, к нему подключено через внешнюю шину 4 DSP TMS320VC5502. STR собирает данне с ДСП и передает в локалку, поток приемущественно с девайса в комп, от компа токо всякие команды. Устройство работает без ОС. Стек LWIP 1.2.0. К устройству также подключен GSM модем. Имеется WEB сервер, FTP Сервер и Telnet.

В DSP находится специальная программа для тестирования пропускной способности девайса.

Ее то я и измерял.

 

Данные тестирования.

IAR 5.11

 

Полная оптимизация по скорости.

 

90 809 bytes of readonly code memory

9 520 bytes of readwrite code memory

30 861 bytes of readonly data memory

87 247 bytes of readwrite data memory

 

Пропускная скорость девайса 2240 кБ/с

 

Полная оптимизация по размеру.

 

81 813 bytes of readonly code memory

9 176 bytes of readwrite code memory

30 519 bytes of readonly data memory

87 247 bytes of readwrite data memory

 

Пропускная скорость девайса 2020 кБ/с

 

 

Полная сбалансированная оптимизация

 

84 261 bytes of readonly code memory

9 476 bytes of readwrite code memory

30 819 bytes of readonly data memory

87 247 bytes of readwrite data memory

 

Пропускная скорость девайса 2170 кБ/с

 

 

Iar 5.20 (Обычная компиляция)

 

Полная оптимизация по скорости.

 

89 504 bytes of readonly code memory

9 564 bytes of readwrite code memory

30 980 bytes of readonly data memory

87 246 bytes of readwrite data memory

 

Пропускная скорость девайса 2490 кБ/с

 

Полная оптимизация по размеру.

 

81 121 bytes of readonly code memory

9 256 bytes of readwrite code memory

30 667 bytes of readonly data memory

87 246 bytes of readwrite data memory

 

Пропускная скорость девайса 2050 кБ/c

 

Полная сбалансированная оптимизация

 

83 409 bytes of readonly code memory

9 468 bytes of readwrite code memory

30 887 bytes of readonly data memory

87 246 bytes of readwrite data memory

 

Пропускная скорость девайса 2360 кБ/с

 

 

 

Iar 5.20 ( Multi-file compilation ) - ДЕВАЙС ГЛЮЧИТ НЕ ПОДЕТСКИ ...

 

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

При установленом флажке Discard Unused Publics драйвер UART перестает работать на консоль сыпится муссор, при этом обмен с DSP работает, скорость по сети примерно 500 кБ/с выше не подымается, при попытке зайти на FTP или HTTP срабатывает ватчдог :). Если снять флажек Discard Unused Publics драйвер UART начинает нормально рабюотать на FTP заходит через раз, HTTP вешеат проц, скорость обмена тоже не привышает 500 кБ/с.

 

Беглый просмотр листингов не выявил ничего криминального, хотя я сильно не вникал небыло времени.

 

У меня в проекте используются функции в RAM (__ramfunc) есть подозрение что от туда все глюки и тянутся. Также есть подозрения на обработчики преываний он там тоже чего то похоже наоптимизировал.

 

Это предварительная инфа, на выходных попробую поглубже покопать и розабраться в чем дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну что, аллах воистину акбар ;) Для Cortex-M3 делает код по полной программе, с использованием всех регистров. Приятненько...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну что, аллах воистину акбар ;) Для Cortex-M3 делает код по полной программе, с использованием всех регистров. Приятненько...

А прерывания может симулировать с сохранением\восстановлением контекста? Я уж не надеюсь на переход по нужному вектору. Или может скриптом можно как то обойтись?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Однако опимизация по производительнсти дала потрясающее увеличение обьема кода на 25%.

А это было заметно еще и в 5.11 самое очевидное - раскрутка циклов по несколько итераций за раз, пока регистров хватит. В 4.xx такого не замечал. А balanced оптимизация очень похожа на ту что в 4.xx называлась speed.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

раскрутка циклов по несколько итераций за раз

 

Если стремает, снимите галочку Loop Unrolling ;)

 

 

 

Кстати, я еще часто снимаю галку кластеризации. Часто ее проще выполнить в узких местах вручную, результат лучше, особенно когда компилятору мерещится частое использование статической переменной и он под указатель на это дело занимает целый регистр, который пригодился бы для совсем других целей с куда более лучшим результатом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прерывая беседу о высоком, хочется спросить... Кто-нибудь отучал полный ИАР от усб-ключа? ИАРы (фул и евал) установливаю без сериалов и кейев, а затем патчю. Евал версия работает на 100%, а вот фул как-то непонятно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто-нибудь отучал....

Если кто-нибудь сделает Full версию 5.20 доступной, то можно посмотреть :) и полагаю получится, но без насилия...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обещались реализовать поддержку для SAM9XE, пока в разделе \ARM\PowerPac\BoardSupport\Atmel\ не нахожу такого, а все остальное было доступно и раньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...