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 (результат воспроизводим и объяснён). Если обязательный сценарий не работает, вернитесь к нему независимо от общей суммы. Это рубрика самопроверки: сайт не исполняет присланный код и не выдаёт автоматическую оценку проекта.