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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Подскажите софт, Софт для ARM (LPC2478)
VslavX
сообщение Aug 30 2010, 21:00
Сообщение #46


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Посмеяться хотите?
Потратил пару часов - скачал расхваливаемый в данной ветке Keil 4.12, и провел сравнение с IAR 5.41 и гонимым GCC 4.4.3, компилируя Dhrystone 2.1 для платы на LPC1768 (Cortex-M3).
Результаты такие:

Максимальная оптимизация по размеру:
Keil: -O3 -Ospace, 1816 байт, 95066 dps
IAR: -Ohz, 1886 байт, 95434 dps
GCC: -Os, 1966 байт, 108931 dps

В прошивку входит много чего HAL, операционка, и прочее, это все я компилировал IAR, менял только один объектник собственно с dhrystone, размер приведен именно для тестовой функции+ее константные данные. Итого: разницы в размере и скорости почти нет - в пределах зависимости от выравнивания кода во флеш.

Максимальная оптимизация по скорости:
Keil: -O3 -Otime, 2132 байт, 122243 dps
IAR: -Ohs, 1974 байт, 123734 dps
GCC: -O3, 2506 байт, 128803 dps
Итого: тожe практически паритет

А вот с GCC все было весело - для Кортекса я им не пользуюсь - последний у меня 4.1.1 для ARM. Cначала скачал готовую сборку от Macraigor 4.4.3 - я всегда оттуда беру. Установил - компилятор молча не работает. После получаса разборок выяснилось что ему не хватает некоторых библиотек - Цигвин у меня староват оказался для него, скачал, поковырялся, нашел нехватающее (почти гиг скачать пришлось), поставил, заработало, с матюками. И общий итог печальный - файл хоть компилируется и линкуется, но работать на плате оно не хочет - выходит с произвольным результатом. По итогам разбирательств - похоже проблема в сборке, она не поддерживает генерацию нового EABI от ARM-а, во всяком случае ключик -meabi=4 не жрется, а при компиляции без него IAR-овский линкер выдает варнинг - после потерянных двух часов мне уже дальше разбираться, искать другие сборки (не факт что совместимые) итд итп, стало лень. Для сравнения - на Кейл никогда не виданный в глаза было потрачено 15 минут. На GCC которым я пользуюсь лет 8 - более 2 часов и результата все еще нет, зато фана - полные штаны.

Утренний upd: частично разобрался с проблемой - почему-то линкер считал что последняя глобальная переменная объявленная в объектнике GCC свободна и лепил туда первую подходящую из IAR-овских объектников. Крупно не повезло что это была переменная обновляемая раз в 128 мс в прерывании значением прошедших тиков (профайлер) - быстро такое не обнаружить sad.gif. Кто там виноват в совмещении переменных уже на разбирался - добавил еще одну липовую переменную в файле теста и все заработало. А вот результаты уже интересные - GCC проигрывает по размеру кода и немного выигрывает по скорости. Так что - не так уж оно мрачно все, после некоторых усилий GCC вполне юзабелен.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2010, 21:43
Сообщение #47


Гуру
******

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



QUOTE (VslavX @ Aug 31 2010, 00:00) *
Посмеяться хотите?

Да все совершенно ожидаемы. Когда-то (последний раз вскоре по появлению IAR V5) гонял эту-же троицу для ARM7 (и на Whetstone тоже). Результаты сходны. Собирал под заказчика и реальный проект под GCC после IAR V4. По размеру (компилировалось под производительность) отличия минимальны, производительность, правда, не оценивал - там было по любому с большим запасом.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
yes
сообщение Aug 31 2010, 13:24
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



например, IAR - который супер пупер и за деньги очень хреново работает с FPU в ARM9 - то есть у него поддержка (либы эксепшены кривая) и с кодогенератором надо как-то хитрить, то есть программисты обплевались
с GCC, когда раньше брал в руки шашки самостоятельно, никаких проблем с поддержкой плавучки не испытывал

также вопрос к пользователям кортексов - а NEON хоть как-то поддерживается в коммерческих компилерах? прежде всего IAR, ну и RVDS интересны???

ну то есть я знаю, что GCC и RVDS поддерживают, но вопрос как? вроде как GCC сам умеет "векторизовать"
ну а IAR и Keil вроде как и не собираются поддерживать

btw: сейчас прет arm-gcc-llvm (вроде им Джобс пользуется) кто-нибудь пробовал???
Go to the top of the page
 
+Quote Post
igorsk
сообщение Aug 31 2010, 21:46
Сообщение #49


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 22-03-10
Пользователь №: 56 131



Цитата(VslavX @ Aug 30 2010, 23:00) *
А вот с GCC все было весело - для Кортекса я им не пользуюсь - последний у меня 4.1.1 для ARM. Cначала скачал готовую сборку от Macraigor 4.4.3 - я всегда оттуда беру.

Готовый GCC лучше брать от CodeSourcery - там люди над ним за деньги работают, и поддержка новых фич появляется раньше майнлайна. Кстати я слыхал IAR вроде тоже на GCC перешёл.
Цитата(yes @ Aug 31 2010, 15:24) *
также вопрос к пользователям кортексов - а NEON хоть как-то поддерживается в коммерческих компилерах? прежде всего IAR, ну и RVDS интересны???
ну то есть я знаю, что GCC и RVDS поддерживают, но вопрос как? вроде как GCC сам умеет "векторизовать"
ну а IAR и Keil вроде как и не собираются поддерживать

Keil сейчас юзает фирменный армовский компилятор, но т.к. сама среда заточена под младшие модели, поддержки Cortex-A и соответственно неона нету.
RVCT неон поддерживает давно, и авто-векторизацию тоже умеет.

Сообщение отредактировал igorsk - Aug 31 2010, 21:46
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 1 2010, 06:47
Сообщение #50


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(igorsk @ Sep 1 2010, 00:46) *
Готовый GCC лучше брать от CodeSourcery - там люди над ним за деньги работают, и поддержка новых фич появляется раньше майнлайна.

Да, спасибо, глянул - мне понравилось, вроде даже Cygwin не нужен (у меня вечно с ним всякие траблы), скачаю - попробую. А в Lite-версии у них компилятор никак не урезанный? Командной строки мне полностью достаточно.
Цитата(igorsk @ Sep 1 2010, 00:46) *
Кстати я слыхал IAR вроде тоже на GCC перешёл.

По меньшей мере заюзали binutils-ы. Но как-то криво - я линкер-ом 5.x до сих на грабли наступаю при пересборке старых проектов. Причем я четко понимал преимущества и особенности IAR-овского UBROF и старался ими не злоупотреблять - именно для лучшей переносимости.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 1 2010, 07:32
Сообщение #51


Шаман
******

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



QUOTE (VslavX @ Sep 1 2010, 09:47) *
А в Lite-версии у них компилятор никак не урезанный?

Слегка урезанный. Поддерживается только Little-Endian и Soft-Float в отличие от платных.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2010, 07:56
Сообщение #52


Гуру
******

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



QUOTE (VslavX @ Sep 1 2010, 09:47) *
Но как-то криво - я линкер-ом 5.x до сих на грабли наступаю при пересборке старых проектов.

У них в не pro версии специально внесена несовместимость в объектники. С pro версией проблем не замечал (но много не пользовал) - хоть с GCC хоть с их интерпретацией инструментария.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 1 2010, 08:54
Сообщение #53


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(zltigo @ Sep 1 2010, 10:56) *
У них в не pro версии специально внесена несовместимость в объектники. С pro версией проблем не замечал (но много не пользовал) - хоть с GCC хоть с их интерпретацией инструментария.

Что понимается под "Pro" - это Full который?
У меня грабли были с некоторыми relocations (есть часть кода который написан на асме и должен быть позиционно-независимым, там это и вылезло), то есть в формате ELF-ARM они четко документированы и должны быть поддержаны, но линкер их "в упор" не понимал.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2010, 09:01
Сообщение #54


Гуру
******

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



QUOTE (VslavX @ Sep 1 2010, 11:54) *
Что понимается под "Pro" - это Full который?

Да.
QUOTE (VslavX @ Sep 1 2010, 11:54) *
но линкер их "в упор" не понимал.

Какой из двух (GCC/IAR) возможных?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 1 2010, 09:41
Сообщение #55


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(zltigo @ Sep 1 2010, 12:01) *
Какой из двух (GCC/IAR) возможных?

IAR-овский (для GCC лень было скрипт переписывать - выкрутился коррекцией кода), еще была пара случаев когда он просто падал с internal error. Сам IAR C-компилятор при разрешенной максимальной оптимизации тоже иногда глючит - и падает (internal error) и лажу выдает. Я сейчас вообще особого смысла держаться за IAR для ARM-ов не вижу, на AVR-ках - да, там ИАР по компактности вне конкуренции, а для ARM - выбор широкий. Попробую сборку GCC от CodeSourcery - вроде на первый взгляд ничего так и рискну прикладникам предложить (моя часть изначально многопортовая - GCC/IAR/MSVC, мне почти все равно).
Go to the top of the page
 
+Quote Post
sonycman
сообщение Sep 1 2010, 10:14
Сообщение #56


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(VslavX @ Sep 1 2010, 13:41) *
IAR-овский (для GCC лень было скрипт переписывать - выкрутился коррекцией кода), еще была пара случаев когда он просто падал с internal error. Сам IAR C-компилятор при разрешенной максимальной оптимизации тоже иногда глючит - и падает (internal error) и лажу выдает.

С кейлом у меня никогда не было проблем по части глюков, а ИАР - да, ассемблер при компиляции стартапа для кортекса запарил своими внутренними ошибками.
Поставишь лишний комментарий\впишешь строчку кода - и падает.
И это 5.50.5 версия!

Слава богу, си компилер пока не глючил smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2010, 10:18
Сообщение #57


Гуру
******

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



QUOTE (sonycman @ Sep 1 2010, 13:14) *
ИАР - да, ассемблер при компиляции стартапа для кортекса запарил своими внутренними ошибками.

Для Cortex? Для Cortex, зараза, даже startup на 'C' пишется совершенно естественно. Дожили smile.gif. Падений компилятора давно уже не встечал, на каком-то из первых - было. Документировали и пофиксили.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 1 2010, 11:09
Сообщение #58


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(zltigo @ Sep 1 2010, 13:18) *
Падений компилятора давно уже не встечал, на каком-то из первых - было. Документировали и пофиксили.

Держите, свеженькое - две недели назад наступил, версия 5.41, ключики такие:
Код
CFLAGS        = --cpu=Cortex-M3 -e --silent --endian little -Ohz    
          --no_path_in_file_macros
          --no_mem_idioms
          --no_unaligned_access

При -Ohz - падает, при -Oh работает, так и живем sad.gif

Сам код:
CODE
typedef unsigned long DWORD, *PDWORD;

#pragma swi_number=0x00
__swi DWORD hal_swi_call1(
DWORD agr0);

#pragma swi_number=0x00
__swi DWORD hal_swi_call2(
DWORD arg0,
DWORD arg1);

#define hal_lock_interrupt() hal_swi_call1(0)
#define hal_unlock_interrupt(sr) hal_swi_call2(1, sr)

DWORD
hal_interlocked_inc(
PDWORD var)
{
DWORD lock, ret;
lock = hal_lock_interrupt();
ret = *var + 1;
*var = ret;
hal_unlock_interrupt(lock);
return ret;
}

DWORD
hal_interlocked_dec(
PDWORD var)
{
DWORD lock, ret;
lock = hal_lock_interrupt();
ret = *var - 1;
*var = ret;
hal_unlock_interrupt(lock);
return ret;
}

DWORD
hal_interlocked_set(
PDWORD var,
DWORD mask)
{
DWORD lock, ret;
lock = hal_lock_interrupt();
ret = *var;
ret |= mask;
*var = ret;
hal_unlock_interrupt(lock);
return ret;
}

DWORD
hal_interlocked_clr(
PDWORD var,
DWORD mask)
{
DWORD lock, ret;
lock = hal_lock_interrupt();
ret = *var;
ret &= ~mask;
*var = ret;
hal_unlock_interrupt(lock);
return ret;
}

DWORD
hal_interlocked_xchg(
PDWORD var,
DWORD value)
{
DWORD lock, ret;
lock = hal_lock_interrupt();
ret = *var;
*var = value;
hal_unlock_interrupt(lock);
return ret;
}


Про глюки библиотек при --no_unaligned_access вообще молчу
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 1 2010, 14:20
Сообщение #59


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(IgorKossak @ Sep 1 2010, 10:32) *
Слегка урезанный. Поддерживается только Little-Endian и Soft-Float в отличие от платных.



А разве платная версия у них не отличается от бесплатной только тем что платна IDE ?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 1 2010, 20:12
Сообщение #60


Шаман
******

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



QUOTE (sasamy @ Sep 1 2010, 17:20) *
А разве платная версия у них не отличается от бесплатной только тем что платна IDE ?

1. И IDE тоже, но вопросе речь была о командной строке.
2. Об остальных отличиях можно узнать пройдясь по приведённым мною ссылкам.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 10:43
Рейтинг@Mail.ru


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