189 похожих чатов

Привет, пытаюсь настроить себе окружение для программирования stm32-микроконтроллеров, сразу оговорюсь:

никаких 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 их инклудит, из-за этого?

9 ответов

12 просмотров

У вас до main ещё стратап вызов есть

Василий
У вас до main ещё стратап вызов есть

Да, заметил. Но как так получается, что добавив одну строчку в libopencm3 для настройки частоты тактирования я получаю .bin около 980 байт, в то время как только на регистрах код вырастает до 1800 байт?

Императорская Моль 🕊 \0
Да, заметил. Но как так получается, что добавив од...

Ну вот так вот, по разному реализованы, делают разные расчёты и проверки

дизассемблер вам в помощь

Императорская Моль 🕊 \0
Да, заметил. Но как так получается, что добавив од...

> src/main.c src/cmsis/system_stm32f1xx.c src/cmsis/startup_stm32f100xb.s на каких "только регистрах"?

Vyacheslav Olkhovchenkov
> src/main.c src/cmsis/system_stm32f1xx.c src/cmsi...

С использованием варианта cmsis

Vyacheslav Olkhovchenkov
> src/main.c src/cmsis/system_stm32f1xx.c src/cmsi...

Гуру программирования на такие мелочи не обращают внимания. Так же как и на vector table

Добавьте при сборке проекта дефайн __NO_SYSTEM_INIT, должно помочь. :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта