GCC для ARM и размер переменных

Hello, All!

Работаю я с Rowley Crossstutio, (gcc испльзуется в ней в качестве компилятора) и вдруг мне перестало хватать ОЗУ, хотя, по моим оценкам, до этого еще должно быть далеко. Стал я смотреть в чем дело и ужаснулся. Сделал маленький тестовый фрагмент и прошу его прокоментировать, особенно тех, кто использует gcc. Опишу, что я делаю: ================ тестовый файл ===================== unsigned char uc; unsigned short us; unsigned long ul;

int main() { return 0; } ====================================================

===== так я его компилирую - линкую ================ gcc -nostdlib -march=armv4t -mlittle-endian -S test.c gcc -nostdlib -march=armv4t -mlittle-endian -c test.c ld -nostdlib -e0 --omagic -EL -Tldscript.tmp -o test.elf -M test.o ====================================================

============= смотрю test.s ======================== ... .comm uc, 1, 8 .comm us, 2, 16 .comm ul, 4, 32 ... ====================================================

Проблема в том, что третья цифра, судя по htlp-у, это выравнивание символа в _байтах_, а здесь, похоже, на "в битах". Но линкер тоже считает, что в байтах:

============== это результат работы линкера ======= ... COMMON 0x40000360 0x29 test.o 0x0 (size before relaxing) 0x40000360 us 0x40000380 ul 0x40000388 uc ... ====================================================

gcc version 3.3.3

И главный вопрос: "Что делать?"

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

Reply to
Leha Bishletov
Loading thread data ...

Привет, Alex! Вы писали to Leha Bishletov on Mon, 21 Feb 2005 15:38:59 +0300:

LB>> gcc version 3.3.3 AM> Обнови gcc. 3.4.1 генерит вот такое:

А где ты его берешь, готовый под Win?

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

Reply to
Leha Bishletov

Hello Leha.

21 Feb 05 12:37, you wrote to all:

LB> Проблема в том, что третья цифра, судя по htlp-у, это выравнивание LB> символа в _байтах_, а здесь, похоже, на "в битах". Hо линкер тоже LB> считает, что в байтах:

Посмотрел в своем проекте - да, действительно, есть такая жопа. А я и не обратил внимания.

LB> И главный вопрос: "Что делать?"

Исправить макрос: ASM_OUTPUT_ALIGNED_COMMON в файле gcc/config/arm/elf.h по аналогу, как в других архитектурах (напрмер M68K). И перекомпилировать.

Еще можно попробовать gcc-3.4.2 В нем этого макроса нет вообще. А значит, и глюки, наверное, тоже.

Alexey

Reply to
Alexey Boyko

Привет Leha!

21 Feb 05 12:37, Leha Bishletov писал All:

LB> ============= смотрю test.s ======================== LB> ... LB> .comm uc, 1, 8 LB> .comm us, 2, 16 LB> .comm ul, 4, 32 LB> ... LB> ====================================================

LB> gcc version 3.3.3

Обнови gcc. 3.4.1 генерит вот такое:

=================================================== .comm uc,1,1 .comm us,2,2 .comm ul,4,4 ===================================================

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

Reply to
Alex Mogilnikov

Привет Leha!

21 Feb 05 15:10, Leha Bishletov писал Alex Mogilnikov:

LB>>> gcc version 3.3.3 AM>> Обнови gcc. 3.4.1 генерит вот такое:

LB> А где ты его берешь, готовый

ftp://gcc.gnu.org/pub/gcc/releases/gcc-3.4.1/

LB> под Win?

А он под что соберешь, под то и будет.

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

Reply to
Alex Mogilnikov

Hello!

Leha Bishletov писал:

[...]

Неправильное выравнивание в Crossstutio действительно имеет место быть. Я борюсь с этой гадостью принудительным заданием секции данных например так (для 16-битных переменнеых): volatile unsigned short wAdcRawData[5] __attribute__ ((aligned(2), section(".data16")));

При этом нужно создать соответствующую секцию в .xml файле линковки и определить значение Alignment.

Атрибут aligned для стандартной секции данных НЕ ДЕЙСТВУЕТ (видимо баг), поэтому обязательно нужно задавать свою секцию данных.

Еще можно абсолютно все переменные объединить в одну структуру - внутри структур данные распределяются правильно.

Reply to
Michael Kofanov

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.