Объектные файлы и линкер-скрипты: как микроконтроллер узнаёт, где что лежит После того как у нас есть ассемблерный код (main.s), его нужно превратить в настоящий машинный код. Это делает ассемблер (в составе LLVM). Он просто транслируеь каждую инсрукцию в байты и упаковывает их в объектный файл (main.o). Объектный файл - это контейнер с несколькими секциями: 🔴 .text - код программы. 🔴 .data - инициализированные глобальные переменные. 🔴 .bss - описание неинициализированных переменных (занимает место в памяти, но не в файле). 🔴 Таблица символов - имена функций и переменных, определённых в этом файле. 🔴 Записи релокаци - пометки о местах, куда позже нужно подставить реальные адреса. На этом этапе адреса ещё не назначены. Например, вызов функции может быть записан как "вызвать функцию по адресу 0", потому что реальное расположение функции станет известно только после зборки всех объектных файлов. Создать объектный файл в Clang можно так: clang -c main.s -o main.o Теперь у нас ес