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

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

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

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

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

Reply to
Artemyi Panasuk
Loading thread data ...

Hello Leha.

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

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

Какие?

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

Alexey

Reply to
Alexey Boyko

Привет, 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

Reply to
Leha Bishletov

Привет, 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

Reply to
Leha Bishletov

Привет Artemyi!

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

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

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

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

Reply to
Alex Mogilnikov

Привет Alexey!

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

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

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

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

Reply to
Alex Mogilnikov

Привет 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] Алексей М. ... Чудо-йогурт Био. Чемпион среди какао.

Reply to
Alex Mogilnikov

Привет, 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

Reply to
Leha Bishletov

Привет 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] Алексей М. ... Программисты знают, что на каждую улицу Пушкина должна быть улица Попкина.

Reply to
Alex Mogilnikov

Hello Leha.

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

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

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

Alexey

Reply to
Alexey Boyko

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

Reply to
Alexey Boyko

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

Reply to
Dmitriy Cherkashin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.