|
|
  |
Подскажите софт, Софт для ARM (LPC2478) |
|
|
|
Aug 30 2010, 21:00
|

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 мс в прерывании значением прошедших тиков (профайлер) - быстро такое не обнаружить  . Кто там виноват в совмещении переменных уже на разбирался - добавил еще одну липовую переменную в файле теста и все заработало. А вот результаты уже интересные - GCC проигрывает по размеру кода и немного выигрывает по скорости. Так что - не так уж оно мрачно все, после некоторых усилий GCC вполне юзабелен.
|
|
|
|
|
Aug 31 2010, 21:46
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 1 2010, 06:47
|

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 и старался ими не злоупотреблять - именно для лучшей переносимости.
|
|
|
|
|
Sep 1 2010, 09:01
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 1 2010, 10:14
|

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

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

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 работает, так и живем  Сам код: 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 вообще молчу
|
|
|
|
|
Sep 1 2010, 14:20
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

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