никаких stm32cubemx ни в каком виде.
Итак, я скачал cmsis с сайта st.com под stm32f100rb, перекинул себе нужные файлы, компилирую файл с пустой функцией main такой командой:
$ arm-none-eabi-gcc -Wall -std=gnu99 -fdata-sections -ffunction-sections -Os -DSTM32F100xB -Iinclude/cmsis/core -Iinclude/cmsis/device -mthumb -mcpu=cortex-m3 --specs=nosys.specs src/main.c src/cmsis/system_stm32f1xx.c src/cmsis/startup_stm32f100xb.s -Tsrc/cmsis/linker/STM32F100XB_FLASH.ld && arm-none-eabi-objcopy -O binary -S a.out a.bin && arm-none-eabi-size a.out
На выходе получаю:
text: 1672
data: 1096
bss: 1604
Как-то многовато-то для пустого файла...
Окей, решил попробовать libopencm3, чисто для эксперимента, сделал точно такой же проект с пустой функцией main:
text: 492
В три раза меньше!
Но использовать libopencm3 я не хочу, я хочу минимум абстракций и сторонних библиотек (в идеале достаточно cmsis), что я делаю не так, почему мой бинарник получается таким большим?
Предположение: структуры cmsis лежат в хедерах, system_blablabla их инклудит, из-за этого?
У вас до main ещё стратап вызов есть
Да, заметил. Но как так получается, что добавив одну строчку в libopencm3 для настройки частоты тактирования я получаю .bin около 980 байт, в то время как только на регистрах код вырастает до 1800 байт?
Ну вот так вот, по разному реализованы, делают разные расчёты и проверки
Так смотрите в .map файле, что и сколько занимает.
дизассемблер вам в помощь
> src/main.c src/cmsis/system_stm32f1xx.c src/cmsis/startup_stm32f100xb.s на каких "только регистрах"?
С использованием варианта cmsis
Гуру программирования на такие мелочи не обращают внимания. Так же как и на vector table
Добавьте при сборке проекта дефайн __NO_SYSTEM_INIT, должно помочь. :)
Обсуждают сегодня