IT Academy
Справочник курса

Embedded C и микроконтроллеры

Все объяснения, задачи и лабораторная в одном месте.

Можно сохранить страницу в PDF через печать браузера. Для печати разборы ответов раскрываются автоматически.

1. MCU architecture, toolchain и datasheet

Объяснение

MCU объединяет ядро, память и периферию. Datasheet описывает электрические пределы, reference manual — регистры и поведение. Программа должна соответствовать конкретной модели и схеме подключения.

Задача для самостоятельного решения

Можно ли подавать 5 В на любой вход 3,3-вольтового MCU?

Показать разбор ответа

Нет: требуется явная поддержка 5V tolerance для этого вывода и режима. Ошибка может повредить устройство; проверьте datasheet.

2. GPIO, timers, ADC и serial buses

Объяснение

GPIO требует выбора режима, подтяжки и уровня. Timer измеряет время аппаратно, ADC преобразует аналоговый сигнал в код. Разрешение ADC не равно абсолютной точности измерения.

Задача для самостоятельного решения

Идеальный 12-bit ADC, Vref=3,3 В: каков шаг?

Показать разбор ответа

Примерно 3,3/4096≈0,000806 В. Реальная погрешность также зависит от опорного напряжения, шума и характеристик ADC.

3. Interrupts, DMA и concurrency

Объяснение

ISR должна быть короткой: фиксировать событие и передавать работу задаче. DMA переносит данные без обработки каждого байта CPU. volatile не обеспечивает атомарность и взаимное исключение.

Задача для самостоятельного решения

Делает ли volatile counter++ безопасным между ISR и main?

Показать разбор ответа

Нет: это чтение–изменение–запись. Нужна атомарная операция или корректная критическая секция с учётом платформы.

4. Memory, linker script и boot

Объяснение

Linker script распределяет секции по памяти. Flash хранит код, RAM — изменяемое состояние; стек имеет ограничение. Bootloader проверяет образ и передаёт управление по определённому контракту.

Задача для самостоятельного решения

Почему большой локальный массив может вызвать сбой MCU?

Показать разбор ответа

Он занимает стек, который может быть мал. Оцените worst-case stack, размещение данных и возможность статического буфера.

5. RTOS tasks, queues и timing

Объяснение

RTOS планирует задачи по приоритетам. Queue передаёт данные и синхронизацию. Priority inversion возникает, когда высокоприоритетная задача ждёт ресурс низкоприоритетной, вытесняемой средней.

Задача для самостоятельного решения

Что помогает против priority inversion на mutex?

Показать разбор ответа

Priority inheritance при поддержке RTOS: владелец временно наследует высокий приоритет, чтобы освободить ресурс. Критические секции всё равно должны быть короткими.

6. Debug probe, tests и firmware update

Объяснение

Отладчик наблюдает состояние, но остановка CPU меняет временное поведение. Firmware update требует проверки целостности и восстановления после обрыва питания. Тестовый стенд проверяет реальные периферийные связи.

Задача для самостоятельного решения

Как не получить неработающее устройство при прерванном OTA?

Показать разбор ответа

Использовать проверяемый образ, A/B slots или иной механизм отката, подтверждение успешной загрузки и сохранённый рабочий boot path.

Практика

Лабораторная работа

Подготовка

Сначала модель конечного автомата без оборудования; блок — псевдокод.

Учебный пример

state = IDLE
on timer_tick:
    if state == IDLE: start_adc(); state = WAITING
on adc_complete(value):
    queue.push(value)
    state = IDLE
main_task:
    consume queue; format telemetry

Как работает пример и что ожидать

ISR завершения измерения передаёт короткое сообщение, форматирование выполняется вне неё. Нужно задать ёмкость очереди и поведение переполнения. Модель не привязана к регистрам конкретного MCU и не должна копироваться как готовый драйвер.

Итоговая работа

Выберите MCU и перечислите pins, напряжения и timer clock из его документации. Реализуйте неблокирующее измерение, тест переполнения и watchdog. Подготовьте обновление firmware с сохранением рабочего boot path.

Проверка результата

1. Опишите исходные данные и условия запуска, чтобы другой человек мог повторить работу.
2. Приложите результат обычного сценария и сравните его с ожидаемым.
3. Проверьте неверный вход, граничный случай и отказ зависимости, если она есть.
4. Объясните выбранное решение и известное ограничение.
5. Сохраните исправления после самопроверки вместе с примером, который раньше не работал.

Как оценить работу

По каждому пункту поставьте 0 (не выполнено), 1 (выполнено с пробелами) или 2 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.