1 Mar 2026, 16:29 UTC87 views2 reactionsread 9 August 2026 Финальная упаковка: как получить .bin и зачем это знать
От ELF до прошивки: последний шаг перед загрузкой в микроконтроллер
Мы получили firmware.elf - файл, который содержит всё: код, данные, адреса, отладочную информацию. Но программатору (ST-Link, J-Link) нужен простой бинарый дамп: байты, которые нужно записать во флеш-память по порядку. Именно здесь вступает в игру утилита objcopy (в LLVM - llvm-objcopy).
Кома…
👍2
1 Mar 2026, 16:29 UTC75 views1 reactionsread 9 August 2026 Ассемблирование и линковка: собираем пазл из объектных файлов
Объектные файлы и линкер-скрипты: как микроконтроллер узнаёт, где что лежит
После того как у нас есть ассемблерный код (main.s), его нужно превратить в настоящий машинный код. Это делает ассемблер (в составе LLVM). Он просто транслируеь каждую инсрукцию в байты и упаковывает их в объектный файл (main.o).
Объектный файл - это контейнер с несколькими секц…
👍1
1 Mar 2026, 16:29 UTC59 views1 reactionsread 9 August 2026 Препроцессинг и компиляция: от текста до промежуточного представления
Clang и LLVM IR: на каком языке думают компиляторы.
Первый этап - препроцессинг. Это самая простая часть: компилятор берёт ваш main.c и выполняет текстовые директивы. Он выкидывает коментарии, вставляет заголовочные файлы (#include), раскрывает макросы (#define) и обрабатываеи условную компиляцию (#ifdef). В Clang остановиться после препроцессора…
👍1
1 Mar 2026, 16:29 UTC64 views1 reactionsread 9 August 2026 Компиляция для embedded: почему это не просто «нажать F5»
Как рождается прошивка: обзор пути от C-кода до микроконтроллера
Вы пишете код на C, жмете "скомпилировать" и получате .hex файл, котрый заливаете в микроконтроллер. Кажется, что всё магически превращается в работающее устройство. Но за этой магией стоит строгий инженерный процесс, и для embedded-систем у него есть свои особенности.
Главное отличие от разра…
👍1
Posted without readable text
18 Jan 2026, 15:24 UTC156 views5 reactionsread 9 August 2026 Что куда ставить?
Итак, у нас есть 5 основных архитектур. Как выбрать?
Давайте сравним их по ключевым критериям.
По простоте и порогу входа
🟢Суперлуп - начать может любой новичок
🟢Прерывания - требуется понимание работы МК
🟢Планировщик - нужны знания таймеров и прерываний
🟢RTOS - серьезный скачок в сложности
🟢Событийно-ориентированная - самый сложный для проектирования
По отзывчивости и времени отклика
🟡Прерывани…
❤3💯1🔥1
18 Jan 2026, 15:24 UTC119 views1 reactionsread 9 August 2026 Событийно-ориентированная архитектура - общение сообщениями
Самый высокоуровневый подход - Событийно-ориентированная архитектура (Event-Driven Architecture, EDA).
Здесь нет центрального цикла. Компоненты системы общаются через сообщения (события): одни модули их "издают" (publish), другие - "обрабатывают" (subscribe).
Часто строится поверх RTOS или как большая state-машина.
// Издатель события (например, драйвер …
👍1
18 Jan 2026, 15:23 UTC74 views1 reactionsread 9 August 2026 RTOS - мощь многозадачности
Для сложных систем требуется полноценная многозадачность.
Здесь на сцену выходит RTOS (Real-Time Operating System), например, FreeRTOS, Zephyr или Azure RTOS.
Её ядро - это вытесняющий планировщик, который на основе приоритетов решает, какую задачу (поток) выполнять прямо сейчас.
// Поток 1: Высокоприоритетный, обрабатывает прерывания
void high_priority_task(void *params) {
while(1…
👍1
18 Jan 2026, 15:23 UTC62 views1 reactionsread 9 August 2026 Планировщик на таймере - порядок во времени
Следующий шаг к структурированию - Планировщик на таймере (Timer-Based Scheduler).
Это эволюция суперлупа, где системный таймер периодически генерирует прерывание (тик), которое проверяет, каким задачам пора выполняться, и выставляет флаги.
Основной цикл проверяет эти флаги и запускает соответствующие задачи.
volatile uint32_t tick_count = 0;
#define TASK1_PERIOD 100 // …
👍1
18 Jan 2026, 15:23 UTC61 views1 reactionsread 9 August 2026 Прерывания: как заставить систему реагировать мгновенно
Чтобы система реагировала на события мгновенно, переходим к архитектуре на основе Прерываний (Interrupt-Driven).
Основная логика переносится в обработчики прерываний (ISR), которые асинхронно вызываются аппаратурой микроконтроллера.
Суперлуп часто остается для фоновых, не срочных задач.
volatile bool button_pressed = false;
void button_isr(void) {
butto…
👍1
18 Jan 2026, 15:22 UTC66 views1 reactionsread 9 August 2026 Суперлуп: первый и самый простой каркас для прошивки
Представьте, что вы учитесь готовить. Вы не начинаете со сложного торта Прага. Вы начинаете с бутерброда: взял хлеб, намазал масло, положил колбасу. Суперлуп (Super Loop) - это тот самый бутерброд в мире встраиваемого ПО. Это фундамент, на котором всё начинается.
Технически, это бесконечный цикл while(1), в котором ваши функции (задачи) вызываются строго одна за …
👍1
18 Jan 2026, 15:22 UTC75 views1 reactionsread 9 August 2026 Каркас для прошивки: почему архитектура решает все
Запустить светодиод на микроконтроллере можно и простым скетчем. Но когда ваш проект превращается в сложное устройство с дисплеем, кнопками, датчиками, связью и логикой, код без продуманной структуры становится кошмаром. Он превращается в хрупкое полотно из тысяч строк, где изменение в одном месте ломает три других.
Решение - выбрать архитектурный подход, то есть ф…
👍1
Showing the 12 most recent of 17 posts we hold for @cdeblog. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.