Найти в Дзене
Финальная упаковка: как получить .bin и зачем это знать
От ELF до прошивки: последний шаг перед загрузкой в микроконтроллер Мы получили firmware.elf - файл, который содержит всё: код, данные, адреса, отладочную информацию. Но программатору (ST-Link, J-Link) нужен простой бинарый дамп: байты, которые нужно записать во флеш-память по порядку. Именно здесь вступает в игру утилита objcopy (в LLVM - llvm-objcopy). Команда: llvm-objcopy -O binary firmware.elf firmware.bin Флаг -O binary означает: "извлеки из ELF-файла только секци, которые должны быть во флеше (обычно .text, .data и т.д.), и запиши их подряд, как они расположены в памяти". Получается файл firmware...
3 месяца назад
Ассемблирование и линковка: собираем пазл из объектных файлов
Объектные файлы и линкер-скрипты: как микроконтроллер узнаёт, где что лежит После того как у нас есть ассемблерный код (main.s), его нужно превратить в настоящий машинный код. Это делает ассемблер (в составе LLVM). Он просто транслируеь каждую инсрукцию в байты и упаковывает их в объектный файл (main.o). Объектный файл - это контейнер с несколькими секциями: 🔴 .text - код программы. 🔴 .data - инициализированные глобальные переменные. 🔴 .bss - описание неинициализированных переменных (занимает место в памяти, но не в файле). 🔴 Таблица символов - имена функций и переменных, определённых в этом файле...
3 месяца назад
Препроцессинг и компиляция: от текста до промежуточного представления
Clang и LLVM IR: на каком языке думают компиляторы. Первый этап - препроцессинг. Это самая простая часть: компилятор берёт ваш main.c и выполняет текстовые директивы. Он выкидывает коментарии, вставляет заголовочные файлы (#include), раскрывает макросы (#define) и обрабатываеи условную компиляцию (#ifdef). В Clang остановиться после препроцессора можно флагом -E: clang -E main.c -o main.i Теперь у нас есть один большой .i-файл с чистым кодом на C. На этом этапе часто кроются проблемы с макросами или неверными путями к заголовочным файлам. Следующий шаг - собственно компиляция. Здесь Clang делает синтаксический и семантический анализ...
3 месяца назад
Компиляция для embedded: почему это не просто «нажать F5
» Как рождается прошивка: обзор пути от C-кода до микроконтроллера Вы пишете код на C, жмете "скомпилировать" и получате .hex файл, котрый заливаете в микроконтроллер. Кажется, что всё магически превращается в работающее устройство. Но за этой магией стоит строгий инженерный процесс, и для embedded-систем у него есть свои особенности. Главное отличие от разработки под ПК - кросс-компиляция. Вы работаете на мощном x86-процессоре, а код выполняется на ARM, AVR или RISC-V. Компилятор должен не только перевести C в машинные команды, но и учесть, что память микроконтроллера разделена на флеш (ROM) и RAM, а ресурсы жёстко ограничены...
3 месяца назад
Что куда ставить
? Итак, у нас есть 5 основных архитектур. Как выбрать? Давайте сравним их по ключевым критериям. По простоте и порогу входа 🟢Суперлуп - начать может любой новичок 🟢Прерывания - требуется понимание работы МК 🟢Планировщик - нужны знания таймеров и прерываний 🟢RTOS - серьезный скачок в сложности 🟢Событийно-ориентированная - самый сложный для проектирования По отзывчивости и времени отклика 🟡Прерывания - абсолютный лидер (почти мгновенно) 🟡RTOS - отличная отзывчивость для приоритетных задач 🟡Событийно-ориентированная - зависит от реализации 🟡Планировщик - задержка до следующего "тика"...
4 месяца назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала