[Программирование микроконтроллеров] Сравнение компиляторов ARMCC, IAR и GCC

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
13-Ноя-2020 01:31

Я работаю над одним проектом, который с большим трудом вмещается в 64к памяти микроконтроллера. И подумалось мне, что возможно, пора взглянуть на разные компиляторы, чтобы выбрать какой более агрессивно может уменьшить размер программы.
Представляю вашему вниманию небольшое сравнение.
Для теста я сделал проект в Cube MX, который включает в себя USB_DEVICE и Mass Storage Class. Это довольно большие библиотеки для теста.
Получившийся main.c выглядит примерно так:
int main()
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
}

Дефайн USBD_DEBUG_LEVEL установлен в 0, чтобы отладочные сообщения USB стека не требовали наличия printf
Подопытные компиляторы:
  • IAR EWARM 8.32.1
  • arm-none-eab-gcc 7-2018-q2-update (среда STM32 Cube IDE 1.4.2)
  • ARMCC v5.06 update 7 (среда Keil uVision 5.32)
  • ARMCC v6.14.1 (среда Keil uVision 5.32)

Настройки IAR:
  • Оптимизация по размеру
  • Run-time библиотека NORMAL
  • Без low level IO (отключен printf)
  • Включены оптимизации линкера: Inline small routines, merge duplicate sections

Настройки GCC:
  • Reduced runtime library --specs=nano.specs
  • Optimize for size -Os
  • Place functions in their own sections --ffunction-sections
  • Place data in their own sections --ffdata-sections
  • Discard unused sections -Wl, --gc-sections

Настройки armcc5:
  • Use micro lib
  • Use cross module optimization
  • Optimization -O3
  • One ELF section per function --split_sections

Настройки armcc6:
  • Use micro lib
  • Optimization image size -Oz
  • One ELF section per function --split_sections

GCC
armcc5
IAR
armcc6
Размер прошивки
14036
13548
12997
12984
Как видно, armcc6 на самую малость лучше IAR. За ним идет armcc5 с отставанием на 4%, а gcc отстает от лидера на 8%.
Надо отметить, что опция KEIL «Use cross module optimization» Значительно увеличила время компиляции, но ни чуть не уменьшила размер кода.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_arm, #_keil, #_iar, #_ewarm, #_gcc, #_armcc, #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 13-Май 04:00
Часовой пояс: UTC + 5