2010-11-05 11 views
5

Ребята, У меня есть проект, который я скомпилировал для процессора ARM Cortex-A8. Я использую GCC для этого. В настоящее время размер моего исполняемого файла составляет 220,1 КБ. Теперь я могу изменить мой Makefile, и я добавьте флаг -mthumb, Makefile, строка выглядит примерно так -ARM Режим большого пальца: Размер кода не уменьшается

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon 

Я делаю это изменения во всех моих Makefiles и я строю свой проект, но исполняемый файл я наконец-то все еще продолжает от 220,1 КБ.

Я сделал еще одно изменение в моей командной строки, я добавил -mthumb-Interwork вариант

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon 

Еще раз я получаю то же размера исполняемого 220,1 KB. Я что-то пропустил, когда делаю это?

Я написал небольшую программу, чтобы найти наименьшее из двух чисел, и я скомпилирован с помощью следующей командной строки

gcc main.c -o main 

я получаю 8,5 KB исполняемый

Далее я делаю

gcc -mthumb main.c -o main 

У меня все еще есть исполняемый файл 8.5 KB.

Неправильный телефон?

Я сделал cat /proc/cpuinfo, чтобы увидеть, действительно ли большой палец поддерживается моим процессором, и я вижу, что он действительно поддерживается. я -

Processor: ARMv7 Processor rev 5 (v7l) 
Features: swp half thumb fastmult vfp edsp neon vfpv3 
.... 
.... 
+0

'-marm' является счетчиком' -mthumb' и 'gcc' принимает последний вариант; Вот почему * ответ dwelch * работает. –

ответ

6

Я думаю -marm означает, что у вас есть рука без пальца, попробуйте удалить -marm.

+1

Я думаю, что это так, это довольно легко продемонстрировать, попробуйте -S -mthumb -marm в крошечном файле с небольшой функцией и увидите, что он генерирует код руки, потому что -marm последнее, что вы просили его сделать. затем измените его на -marm -mthumb, с -mthumb last, он генерирует код большого пальца.Таким образом, имея -marm последние козыри все вещи пальца, которые вы пытаетесь сделать. –

+1

Если вы сомневаетесь, используйте «gcc -save-temps» для сохранения asm-файла или «objdump -d» в объектном коде для разборки. Разницу между ARM и Thumb довольно легко определить на основе ширины команд (ARM всегда 4 байта, Thumb - 2 байта, Thumb2 - 2 или 4). Я видел случаи, когда Thumb fadden

+0

+1 для управления рукой без пальца. –

0

С некоторыми компиляторами, большой палец по умолчанию при компиляции для ARMv7. Вы уверены, что ваш оригинальный исполняемый файл не был создан для большого пальца?

Попробуйте построить с -mno-thumb и посмотреть, увеличивается ли размер кода.

+0

Stephen Я сделал это, это снова 220.1 KB. Без изменений! – HaggarTheHorrible

2

Трудно сказать, без фактического кода, но у меня есть несколько предложений.

  1. Включить оптимизацию. (например, -O3 -function-sections -fdata-sections)
  2. Разделите исполняемый файл, чтобы убедиться, что информация об отладке не подсчитывается.
  3. Проверьте фактический размер кода (.text), а не размер файла. Может быть, происходит некоторое заполнение. Вы можете использовать objdump для этого.
  4. Сбросьте код сборки (ключ -S) и убедитесь, что он на самом деле создает инструкции ARM в одном случае, а Thumb - в другом.