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 ответов

10 просмотров

У вас до 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, должно помочь. :)

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта