Arm-компилятоp

Apr 11, 2005 11 Replies

Добpой ночи тебе, All!



Какомy компилятоpy с языка С следyет отдть пpедпочтение? Есть мнение одного забyгоpного товаpища, что Гцц немеpенно эффективен. Пока имеет только Keil microVision V0.4.



Заpанее, спасибо.



С, yважением, Аpтемий.


Hello Leha.

12 Apr 05 09:04, you wrote to Artemyi Panasuk:

AP>> эффективен. Пока имеет только Keil microVision V0.4. LB> Я выбрал IAR. В сравнении с GCC у него есть серьезные преимущества.

Какие?

ps: Я слышал, что ARM SDT (или как он у них называется) лучше всех.

Alexey

Привет, Artemyi! Вы писали to All on Tue, 12 Apr 2005 00:04:18 +0400:

AP> Какомy компилятоpy с языка С следyет отдть пpедпочтение? AP> Есть мнение одного забyгоpного товаpища, что Гцц немеpенно AP> эффективен. Пока имеет только Keil microVision V0.4.

Я выбрал IAR. В сравнении с GCC у него есть серьезные преимущества. Но я использую ARM7TDMI, для других ARM возможно все по другому.

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

Привет, Alexey! Вы писали to Leha Bishletov on Tue, 12 Apr 2005 08:16:32 +0400:

LB>> Я выбрал IAR. В сравнении с GCC у него есть серьезные LB>> преимущества. AB> Какие?

Не так давно тут про это писали, поэтому кратко IAR v4.11A vs GCC v3.3.3

  1. У GCC ужасная ошибка с выравниванием отдельных переменных не на 1 -
2 - 4 байта, а на 8 - 16 - 32 байта. Говорят, что исправлено.
  1. У GCC размер размер структуры всегда кратен 4-ем байтам, не зависимо от того, что в ней лежит, т.е. sizeof(struct s{char a:1; char b:1})==4. М.б. связано с проблемой (1)
  2. Оптимизатор у IAR чуть лучше, чуть лучше организовано обращение к локальным переменным в функциях
  3. У IAR можно каждой функции указать __arm или __thumb, у GCC это можно сделать только для всего файла
  4. То, что генерит GCC для режима THUMB _очень_ не оптимально по обращению к локальным переменным функции из-за того, что он как-то странно создает сековый фрейм и у него не получается испрользовать команду косвеной адресации относительно SP (т.к. она адресует только +)
  5. У IAR есть встроенные функции для обращения CPSR, еще что-то аналогичное, у GCC этого нет.

AB> ps: Я слышал, что ARM SDT (или как он у них называется) лучше всех.

А что это такое?

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

Привет Artemyi!

12 Apr 05 01:04, Artemyi Panasuk писал All:

AP> Какомy компилятоpy с языка С следyет отдть пpедпочтение? AP> Есть мнение одного забyгоpного товаpища, что Гцц немеpенно эффективен.

Hе верь ему. Гцц эффективен умеренно. Hо зато за него не надо платить.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Пирожок жареный с жарким.

Привет Alexey!

12 Apr 05 09:16, Alexey Boyko писал Leha Bishletov:

AB> ps: Я слышал, что ARM SDT (или как он у них называется) лучше всех.

Я пробовал и его, и gcc, в результате использую gcc. Что конкретно не понравилось, уже точно не помню, кажется что-то там с объектными файлами и библиотеками нехорошо было...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Собака - вдруг человека...

Привет Leha!

12 Apr 05 16:05, Leha Bishletov писал Alexey Boyko:

LB> Hе так давно тут про это писали, поэтому кратко IAR v4.11A vs GCC LB> v3.3.3

LB> 1. У GCC ужасная ошибка с выравниванием отдельных переменных не на 1 LB> - LB> 2 - 4 байта, а на 8 - 16 - 32 байта. Говорят, что исправлено.

Исправлено в 3.4.1.

LB> 2. У GCC размер размер структуры всегда кратен 4-ем байтам, не LB> зависимо от того, что в ней лежит, т.е. sizeof(struct s{char a:1; char LB> b:1})==4. М.б. связано с проблемой (1)

Hе всегда. Для упакованных структур размер равен сумме размеров полей, т.е. твоя структура будет иметь размер 1. С исправленной проблемой (1) не связано.

LB> 3. Оптимизатор у IAR чуть LB> лучше, чуть лучше организовано обращение к локальным переменным в LB> функциях

Верно.

С thumb никогда не работал, поэтому (4) и (5) пропускаю.

LB> 6. У IAR есть встроенные LB> функции для обращения CPSR, еще что-то аналогичное, у GCC этого нет.

А какая разница, есть встроенное или нет? :) Пользоваться невстроенным ничуть не хуже.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Чудо-йогурт Био. Чемпион среди какао.

Привет, Alex! Вы писали to Leha Bishletov on Tue, 12 Apr 2005 18:58:12 +0400:

LB>> 2. У GCC размер размер структуры всегда кратен 4-ем байтам, не LB>> зависимо от того, что в ней лежит, т.е. sizeof(struct s{char a:1; LB>> char b:1})==4. М.б. связано с проблемой (1) AM> Hе всегда. Для упакованных структур размер равен сумме размеров AM> полей, т.е. твоя структура будет иметь размер 1. С исправленной AM> проблемой (1) не связано.

Возможно я не нашел как это (упаковку структур) включить.

LB>> 6. У IAR есть встроенные LB>> функции для обращения CPSR, еще что-то аналогичное, у GCC этого LB>> нет. AM> А какая разница, есть встроенное или нет? :) Пользоваться AM> невстроенным ничуть не хуже.

Встроенные превращаются в одну команду, исключаются CALL и BX. Используются эти команды для входа/выхода из критических секций, так что лишние CALL могут мешать.

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

Привет Leha!

12 Apr 05 19:51, Leha Bishletov писал Alex Mogilnikov:

AM>> Hе всегда. Для упакованных структур размер равен сумме AM>> размеров полей, т.е. твоя структура будет иметь размер 1. С AM>> исправленной проблемой (1) не связано.

LB> Возможно я не нашел как это (упаковку структур) включить.

__attribute__ ((packed))

LB>>> 6. У IAR есть встроенные LB>>> функции для обращения CPSR, еще что-то аналогичное, у GCC этого LB>>> нет. AM>> А какая разница, есть встроенное или нет? :) Пользоваться AM>> невстроенным ничуть не хуже.

LB> Встроенные превращаются в одну команду, исключаются CALL и BX. LB> Используются эти команды для входа/выхода из критических секций, так LB> что лишние CALL могут мешать.

Я, когда мне это надо, прекрасно пользуюсь невстроенными конструкциями, которые превращаются в одну, две, или столько, сколько мне надо команд. Вот для иллюстрации пара-тройка примеров:

================ test.c ================== #define get_cpsr() ({ \ unsigned long tmp; \ asm volatile ("mrs %0, cpsr" : "=r" (tmp) :);\ tmp; \ })

#define set_cpsr(val) \ asm volatile ("msr cpsr, %0" ::"r" (val));

unsigned long fff(void) { return get_cpsr(); }

void ggg(unsigned long x) { set_cpsr(x); }

void hhh(void) { set_cpsr(12345); } ========================================== ================ test.s ================== .file "test.c" .text .align 2 .global fff .type fff, %function fff: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. @ lr needed for prologue mrs r0, cpsr mov pc, lr .size fff, .-fff .align 2 .global ggg .type ggg, %function ggg: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. @ lr needed for prologue msr cpsr, r0 mov pc, lr .size ggg, .-ggg .align 2 .global hhh .type hhh, %function hhh: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. mov r3, #12288 @ lr needed for prologue add r3, r3, #57 msr cpsr, r3 mov pc, lr .size hhh, .-hhh .ident "GCC: (GNU) 3.4.1" ==========================================

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Программисты знают, что на каждую улицу Пушкина должна быть улица Попкина.

Hello Leha.

12 Apr 05 15:05, you wrote to me:

AB>> ps: Я слышал, что ARM SDT (или как он у них называется) лучше AB>> всех. LB> А что это такое?

Компилятор фирмы ARM

Alexey

Hello Alex.

12 Apr 05 18:26, you wrote to Artemyi Panasuk:

AP>> Есть мнение одного забyгоpного товаpища, что Гцц немеpенно AP>> эффективен. AM> Hе верь ему. Гцц эффективен умеренно. Hо зато за него не надо AM> платить.

Можно так: gcc для ARM немерянно еффективнее, чем gcc, для AVR ;)

Alexey

Средства должны быть бесплатны, и использоваться кучей народа иначе не имеет смысла. Под gcc много кода есть, синтаксис ассемблера похож на "C", поэтому многие используют его. С ув, Дмитрий Черкашин.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required