compilation - микроконтроллеры - arm процессоры



Режим ARM Thumb: размер кода не уменьшается (2)

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

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

Я делаю это во всех моих файлах make-файлов, и я строю свой проект, но исполняемый файл, который я получаю, по-прежнему остается 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
....
....

Answer #1

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

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


Answer #2

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

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