[Программирование микроконтроллеров] Сравнение компиляторов ARMCC, IAR и GCC
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Я работаю над одним проектом, который с большим трудом вмещается в 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
===========
Похожие новости:
- [Гаджеты, Ноутбуки, Процессоры, IT-компании] Apple представила MacBook Air, MacBook Pro 13 и Mac mini на новых ARM-процессорах M1
- [Промышленное программирование, Разработка робототехники, Программирование микроконтроллеров, Производство и разработка электроники] ModBus Slave RTU/ASCII без смс и регистрации. Версия 3
- [Программирование микроконтроллеров, Разработка на Raspberry Pi, DIY или Сделай сам, Здоровье] Затерянные в тумане, или Увлекательные приключения в мире АПР *
- [Программирование микроконтроллеров] Разбираемся с модулем ШИМ на tms320
- [Высокая производительность, Компьютерное железо, Накопители] NGD выпустила 12 ТБ SSD со встроенным 4-ядерным ARM-процессором
- [Ненормальное программирование, Assembler, Программирование микроконтроллеров] Excel как транслятор в ассемблер AVR
- [Python] PyCharm исполнилось 10 лет
- [Open source, Системное программирование, Программирование микроконтроллеров, Процессоры] О кэшах в микроконтроллерах ARM
- [Промышленное программирование, Разработка робототехники, Программирование микроконтроллеров, Разработка для интернета вещей, Производство и разработка электроники] ModBus Slave RTU/ASCII без смс и регистрации
- [Системное администрирование, IT-инфраструктура, Серверное администрирование, DevOps] Docker swarm и балансировка нагрузки по нодам
Теги для поиска: #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_arm, #_keil, #_iar, #_ewarm, #_gcc, #_armcc, #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:30
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Я работаю над одним проектом, который с большим трудом вмещается в 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:
Настройки GCC:
Настройки armcc5:
Настройки armcc6:
GCC armcc5 IAR armcc6 Размер прошивки 14036 13548 12997 12984 Как видно, armcc6 на самую малость лучше IAR. За ним идет armcc5 с отставанием на 4%, а gcc отстает от лидера на 8%. Надо отметить, что опция KEIL «Use cross module optimization» Значительно увеличила время компиляции, но ни чуть не уменьшила размер кода. =========== Источник: habr.com =========== Похожие новости:
Программирование микроконтроллеров ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 16:30
Часовой пояс: UTC + 5