Вопросы на собеседовании: Embedded-инженер
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Embedded-инженер.
Смотреть пример резюме: Embedded-инженер →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я разделю три временных контура и явно задам владельцев оборудования.
- Задача сбора данных с периодом 1 мс будет просыпаться по уведомлению таймера или DMA, ставить метки времени и отправлять записи фиксированного размера без работы с CAN.
- Задача публикации с периодом 10 мс будет владеть передачей CAN, а задача диагностики с периодом 100 мс получит приоритет ниже обеих критичных по времени задач.
- Данные пойдут через ограниченные очереди, а у каждой периферии будет один владелец, чтобы не брать общие блокировки драйверов на пути 1 мс.
- Стеки будут рассчитаны по измеренным минимальным остаткам под худшей нагрузкой с запасом не менее 25% в пределах 128 КБ.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат превратить требования по времени и памяти в понятные границы задач FreeRTOS, а не бездумно создавать отдельную задачу для каждой функции.
Я назначу фиксированные приоритеты по дедлайнам, поставив задачу управления с периодом 2 мс выше остальных.
- FreeRTOS запускает готовую задачу с большим числовым значением приоритета, поэтому можно назначить управлению 4, телеметрии 3, а журналированию 1.
- Отложенная обработка прерываний, способная разблокировать управление, получит подходящий приоритет, но обычное журналирование не окажется выше телеметрии.
- Каждая задача в простое будет блокироваться на задержке, очереди или уведомлении, освобождая процессор задачам ниже.
- Я проверю время отклика по измеренному худшему времени выполнения и блокировкам, потому что одни номера приоритетов не доказывают дедлайн 2 мс.
Зачем это спрашивают: Интервьюер оценивает знание семантики приоритетов FreeRTOS и соответствие назначения временным требованиям, а не субъективной важности функций.
Я использую vTaskDelayUntil, чтобы запуски оставались привязаны к исходной сетке 10 мс.
- До цикла инициализирую TickType_t lastWake через xTaskGetTickCount, затем на каждой итерации вызову vTaskDelayUntil с pdMS_TO_TICKS(10).
- В отличие от vTaskDelay, это не добавляет переменное время выполнения от 1 до 3 мс к моменту следующего запуска.
- Я буду ставить метку времени на каждом старте и фиксировать перегрузку, если прошлая итерация дошла до следующего запуска или пересекла его.
- Частота тика должна достаточно точно представлять 10 мс, а для более строгой точности фазы нужно уведомление от аппаратного таймера.
Зачем это спрашивают: Интервьюер хочет увидеть понимание абсолютного периодического запуска, обработки перегрузки и ограничений времени на основе системного тика.
Расчетная загрузка по WCET равна 50%, поэтому набор задач проходит достаточный тест по загрузке, но окончательно я приму его только после анализа времени отклика.
- Загрузка равна 0,4/2 + 1/5 + 2/20 = 0,50 по худшим временам выполнения, а не по измеренной средней загрузке CPU.
- При приоритетах rate-monotonic достаточная граница Лью и Лейланда для 3 задач составляет около 0,779, поэтому 0,50 проходит этот консервативный тест.
- До окончательного решения я добавлю время прерываний, переключений контекста, jitter запуска и худшую блокировку на mutex.
- Я проверю, что рассчитанное время отклика каждой задачи меньше ее дедлайна 2 мс, 5 мс или 20 мс, и подтвержу исходные оценки на целевом устройстве.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат рассчитывать планируемость по WCET и понимает ли, что одна загрузка не учитывает блокировки и стоимость прерываний.
Я использую ограниченную очередь минимум на 12 элементов и выберу 16 элементов для измеренного запаса.
- ISR вызовет xQueueSendFromISR для 16-байтного значения или, что лучше, для индекса в заранее выделенном пуле отсчетов.
- Очередь из 16 значений займет 256 байт плюс метаданные и поглотит 16 мс входного потока.
- После паузы 12 мс потребитель выгрузит все доступные элементы, а не обработает только один за пробуждение.
- Я посчитаю случаи переполнения и заранее определю политику: отбросить новый отсчет, самый старый или поднять ошибку потери данных.
Зачем это спрашивают: Интервьюер оценивает расчет очереди по скорости производителя и длительности паузы, безопасную работу из ISR и явную политику перегрузки.
Я инициализирую счетный семафор значением 6, чтобы он представлял число свободных DMA-дескрипторов.
- Задача берет один токен перед извлечением дескриптора из защищенного списка и запускает DMA только после успеха обеих операций.
- ISR DMA отправляет индекс готового дескриптора через xQueueSendFromISR; задача драйвера возвращает его в свободный список под mutex и отдает один токен.
- Метаданные свободного списка защищает отдельный короткий mutex, потому что счетный семафор управляет количеством, а не взаимным исключением.
- Каждый запрос получает ограниченный тайм-аут из своего дедлайна, чтобы исчерпание всех 6 дескрипторов стало видимой ошибкой, а не бесконечным ожиданием.
Зачем это спрашивают: Интервьюер проверяет правильное моделирование конечного числа ресурсов и отсутствие неправильного применения счетного семафора как блокировки структуры данных.
Я применю бинарный семафор, потому что повторные фронты могут объединяться, пока одно повторное чтение уже ожидает выполнения.
- ISR отдает семафор через xSemaphoreGiveFromISR и запрашивает переключение, если готовой стала задача с более высоким приоритетом.
- Работник берет семафор, один раз читает все GPIO, выполняет подавление дребезга и снова блокируется.
- Повторная отдача уже доступного семафора не считает еще один фронт, что соответствует требованию повторного чтения.
- Если нужно сохранить каждый из 200 фронтов в секунду, я выберу счетное уведомление или очередь.
Зачем это спрашивают: Интервьюер оценивает понимание объединения сигналов бинарным семафором и умение отличать сигнализацию от подсчета событий.
Я защищу всю I2C-транзакцию mutex FreeRTOS, которым владеет контекст задачи.
- Mutex покрывает адрес, настройку передачи, завершение и восстановление, чтобы байты двух клиентов не перемешались.
- Mutex FreeRTOS поддерживает наследование приоритета, а бинарный семафор нет, поэтому для общего владения нужен именно mutex.
- Каждый вызывающий код использует тайм-аут из своего дедлайна и освобождает mutex на всех путях успеха и ошибки.
- Обратные вызовы не должны рекурсивно брать тот же mutex, а долгие задержки повторных попыток останутся вне критической секции 2 мс.
Зачем это спрашивают: Интервьюер проверяет правильную семантику mutex, ограниченную длительность блокировки и конкретное отличие наследования приоритета от бинарного семафора.
Я назначу три бита событий и буду ждать их все без очистки после успешного ожидания.
- Владельцы линка, DHCP и синхронизации времени устанавливают биты 0, 1 и 2 при готовности и немедленно очищают свой бит при потере состояния.
- Зависимая задача вызывает xEventGroupWaitBits с ожиданием всех битов и конечным тайм-аутом повторной проверки 1 с.
- Готовность является уровнем состояния, а не числом событий, поэтому группа подходит лучше трех очередей.
- После пробуждения задача повторно проверяет реальные состояния подсистем, потому что установки и переподключения могут пересечься с результатом ожидания.
Зачем это спрашивают: Интервьюер оценивает применение битов событий для совмещенных условий уровня с продуманной очисткой и обработкой гонок.
Я применю прямое уведомление задачи вместо выделения очереди или семафора.
- ISR вызывает vTaskNotifyGiveFromISR, затем portYIELD_FROM_ISR, если установлен xHigherPriorityTaskWoken.
- Задача вызывает ulTaskNotifyTake без очистки при выходе, если нужно посчитать каждое из 20 000 завершений в секунду.
- Если важно только последнее состояние буфера, я включу очистку при выходе и позволю повторным завершениям объединяться.
- Такой дизайн ограничен одним известным получателем, именно поэтому он меньше и быстрее универсальной очереди.
Зачем это спрашивают: Интервьюер проверяет выбор наименее затратного примитива FreeRTOS и правильную настройку его счетной семантики.
Я исключу неограниченное выделение памяти во время работы и сделаю бюджет 64 КБ проверяемым при сборке и запуске.
- Стеки задач, очереди, протокольные буферы и запросы драйверов будут находиться в статической памяти или пулах фиксированного размера.
- Если heap_4 остается для начального создания объектов, после инициализации выделение запрещается, а минимальный остаток heap записывается.
- Фиксированные пулы явно задают исчерпание и максимальную задержку, тогда как повторные выделения разных размеров могут фрагментировать heap за 5 лет.
- Я измерю минимальные остатки стеков под стрессом и оставлю не менее 20% запаса для худшего наблюдаемого пути.
Зачем это спрашивают: Интервьюер оценивает детерминированное владение памятью и подтвержденный измерениями расчет для долгоживущего устройства с ограниченными ресурсами.
Я предоставлю память для каждого объекта ядра и включу поддержку статического выделения FreeRTOS.
- Каждая задача получит блок управления StaticTask_t и фиксированный массив StackType_t, переданные в xTaskCreateStatic.
- Каждая очередь получит StaticQueue_t и правильно выровненный байтовый буфер, а каждый mutex будет создан через xSemaphoreCreateMutexStatic.
- Приложение предоставит статическую память для idle-задачи и задачи таймеров через обязательные callbacks FreeRTOS, если эти задачи включены.
- Все 8 стеков и 8 объектов синхронизации имеют время жизни программы, а link map подтверждает итоговый расход RAM.
Зачем это спрашивают: Интервьюер проверяет практическое знание статических API FreeRTOS, резервной памяти и памяти системных задач ядра.
При протоколе немедленного потолка приоритетов граница блокировки H за один запуск равна 700 мкс, поэтому дизайн превышает бюджет блокировки 500 мкс.
- Потолок обоих ресурсов равен приоритету H, потому что H берет и SPI, и калибровку, что исключает циклические цепочки блокировок в выбранном протоколе.
- Граница равна max(700, 300, 200) = 700 мкс, а не сумме всех критических секций задач ниже.
- Потолок устраняет неограниченную инверсию, но не сокращает 700 мкс, поэтому я разобью SPI-передачу L на безопасные для протокола части короче 500 мкс, вынесу ее из окна H или применю другой контроллер.
- Я измерю реальные времена удержания и повторю анализ времени отклика H, M и L с учетом потолка и переключений контекста.
Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат рассчитать блокировку для выбранного mutex-протокола и понять, когда потолок приоритета нужно дополнить сокращением владения ресурсом.
Я сделаю отмену кооперативной и направлю каждый исход через один структурированный путь очистки, который точно знает набор захваченных ресурсов.
- Локальное состояние операции хранит владение SPI, буфером или дескриптором, файловой системой и признак начала устойчивой записи.
- Mutex файловой системы ожидается ограниченное время; при тайм-ауте или отмене задача не начинает новую работу и освобождает только реально захваченные ресурсы в обратном порядке.
- Задачу нельзя принудительно удалить с захваченным SPI, а chip select, DMA, дескрипторы и SPI mutex возвращаются или отменяются по документированной процедуре владельца драйвера.
- Постоянные изменения используют staging и commit marker, поэтому очистка оставляет старую или новую полную запись, а fault injection проверяет каждую точку отмены.
Зачем это спрашивают: Интервьюер проверяет структурированную отмену после частичного захвата, включая ограниченные ожидания, точное владение и очистку оперативного и постоянного состояния.
Я задам каждому дескриптору состояния FREE, DMA_OWNED и WORKER_OWNED, а исчерпание пула сделаю явным overrun.
- ISR сохраняет status завершения и ID дескриптора до требуемой очистки write-one-to-clear, переводит DMA_OWNED в WORKER_OWNED и публикует ID через xQueueSendFromISR с условным yield.
- Задача проверяет ID и generation, обрабатывает данные и возвращает именно этот дескриптор в FREE через список свободных элементов владельца драйвера.
- На 10 кГц пул покрывает только 800 мкс отставания; без FREE-элемента применяется аппаратное backpressure или остановка DMA, а при отсутствии поддержки кадр отбрасывается и считается без перезаписи занятых данных.
- Под худшей нагрузкой сохраняются queue-full, максимальная занятость пула, наибольшее отставание задачи, нарушения состояний и пропуски sequence numbers.
Зачем это спрашивают: Интервьюер оценивает конечный протокол владения DMA, который делает отставание задачи и исчерпание дескрипторов видимыми, а не ограничивается ISR-safe вызовом очереди.
Только ISR с числовыми приоритетами от 5 до 15 могут вызывать разрешенные API FreeRTOS с суффиксом FromISR.
- В Cortex-M меньшее числовое значение приоритета NVIC означает большую срочность, то есть направление противоположно номерам приоритетов задач FreeRTOS.
- Приоритеты от 0 до 4 слишком срочные для входа в ядро и должны передавать аппаратное состояние разрешенной ISR или задаче для поздней обработки.
- CMSIS NVIC_SetPriority обычно принимает несдвинутое значение от 0 до 15, а configMAX_SYSCALL_INTERRUPT_PRIORITY в типичных портах использует представление со сдвигом для регистра.
- Я включу configASSERT и проверю конфигурацию порта, чтобы обнаружить случайный вызов xQueueSendFromISR из ISR с приоритетом 4.
Зачем это спрашивают: Интервьюер проверяет два противоположных направления чисел приоритетов и точную границу допуска к API FreeRTOS.
Я сохраню тик 1 кГц для активного планирования и включу tickless idle для интервалов простоя 30 с.
- Тик 1 кГц дает шаг 1 мс, но без подавления будит CPU 1000 раз в секунду.
- Tickless idle программирует малопотребляющий таймер на ближайший дедлайн и после пробуждения продвигает счетчик тиков ядра.
- Я проверю дрейф малопотребляющего таймера, максимальный подавляемый интервал и все источники пробуждения на полном сне 30 с.
- Для цикла 2 мс все равно измеряется задержка, а требование к фазе меньше тика следует реализовать аппаратным таймером, а не ускорением общего тика.
Зачем это спрашивают: Интервьюер оценивает компромиссы по времени, энергии и точности часов между периодическими тиками и их подавлением.
Я запрограммирую малопотребляющий таймер на ближайший deadline ядра или приложения, поэтому этот сон закончится не позже чем через 5 с.
- Deadline приложения регистрируется на той же монотонной шкале времени до расчета числа тиков, которые scheduler может подавить.
- Перед сном код атомарно перепроверяет готовую работу и ближайший deadline, затем применяет требуемые платформой барьеры, чтобы не потерять прерывание между проверкой и WFI.
- После пробуждения порт переводит измеренные тики low-power таймера в прошедшие тики RTOS и продвигает время ядра документированным tickless-механизмом до запуска готовой работы.
- При позднем пробуждении задача получает реальное прошедшее время, записывает опоздание, один раз обрабатывает просроченное событие и входит в заданный safe fallback при превышении допуска.
Зачем это спрашивают: Интервьюер проверяет, соблюдает ли tickless sleep ближайший программный deadline и правильно ли восстанавливается время после обычного и позднего пробуждения.
Я измерю худшее время отклика релизной сборки под намеренно тяжелой параллельной нагрузкой.
- Аппаратный захват таймера или DWT_CYCCNT запишет циклы от запуска до завершения функции при включенных прерываниях и DMA.
- Я выполню не менее 10 миллионов периодов с максимальным трафиком шин, разными состояниями cache и всеми ISR более высокого приоритета.
- Результат включает вытеснение и блокировки mutex, а не только среднее время изолированной функции.
- Я сопоставлю наблюдаемый максимум с 500 мкс, указав накладные расходы измерения и обоснованный инженерный запас.
Зачем это спрашивают: Интервьюер оценивает доказательство детерминизма по сквозному худшему времени, а не по среднему результату бенчмарка.
Я измерю реальные фронты обновления аппаратными метками и разделю джиттер запуска и выполнения.
- Переключу запасной GPIO при запуске задачи и записи регистра PWM, затем захвачу не менее 1 миллиона интервалов логическим анализатором или входным захватом таймера.
- Рассчитаю минимум, максимум и гистограмму, а приемку проведу по худшему отклонению от 1 мс, а не только по p99.
- Второй канал трассы отметит долгие ISR или блокировки планировщика, чтобы связать выбросы с маскированием прерываний.
- Если пробуждение задачи превышает 20 мкс, критичное по фазе обновление перейдет на compare таймера или DMA, а задача будет готовить следующее значение.
Зачем это спрашивают: Интервьюер проверяет измерение времени реального выхода, разделение источников джиттера и перенос точной работы в оборудование при необходимости.
Закрытые вопросы
- 21
Запись EEPROM занимает 8 мс, но у задачи управления двигателем дедлайн 1 мс; выберете ли вы блокирующий драйвер или асинхронный конечный автомат?
estimationasync - 22
UART принимает кадры по 1024 байта на скорости 3 Мбит/с каждые 4 мс, а расход CPU на прием должен быть ниже 5%; как вы совместите DMA и прерывания?
interruptsperipherals - 23
АЦП передает 8 каналов по 20 тысяч 16-битных отсчетов в секунду на канал; как вы спроектируете двойную буферизацию без гонки обработки с DMA?
designperipheralsconcurrency - 24
UART работает на 230400 бит/с, может прислать всплеск 600 байт, а парсер способен остановиться на 15 мс; как вы рассчитаете и реализуете кольцевой буфер приема?
peripherals - 25
У Ethernet MAC есть 4 приемных буфера по 1536 байт, а сетевой стек может удерживать пакет 20 мс; как вы обеспечите безопасное владение при zero-copy?
ownership - 26
В одном семействе продуктов используются 2 SPI на STM32, а в другом 2 SPI на MCU NXP; как вы спроектируете абстракцию регистров, не скрывая важные аппаратные различия?
designperipheralsoop - 27
I2C-сенсор обычно отвечает за 2 мс, но после brownout может навсегда удержать транзакцию; как вы спроектируете тайм-аут и восстановление?
designresilienceperipherals - 28
Cortex-M7 с 32-байтным write-back D-cache использует DMA для Ethernet-буферов TX и RX по 1500 байт; какие операции с cache вы выполните?
peripheralsmcucaching - 29
DMA-драйвер Cortex-M7 принимает 100-байтные пакеты в соседние буферы при размере линии cache 32 байта; как вы выровняете буферы и диапазоны операций?
peripheralsmcucaching - 30
Драйвер Cortex-M7 записывает 8 DMA-дескрипторов, а затем запускает механизм через управляющий регистр; где вы примените барьеры памяти?
peripheralsmcumemory - 31
Три клиента ставят I2C-операции в очередь, и один клиент отменяет свой запрос после тайм-аута, пока другая транзакция активна. Как спроектировать идентичность транзакций, отмену и восстановление?
designresilienceperipherals - 32
Зашумленная линия SPI на 1 МГц передает команды по 64 байта и должна обнаруживать поврежденные, пропущенные и повторные кадры; как вы спроектируете кадр?
designperipheralsevm - 33
Модуль передает UART на 921600 бит/с, а MCU может приостановить чтение на 40 мс; как вы предотвратите потери через flow control?
peripherals - 34
На шине Classical CAN 500 кбит/с работают 8 узлов, каждый отправляет 200 кадров/с по 8 байт данных; как вы оцените и ограничите загрузку шины?
estimationperipherals - 35
На CAN 500 кбит/с управляющий кадр с частотой 1 кГц использует ID 0x080, а диагностический кадр с частотой 100 Гц ID 0x600; как арбитраж влияет на дизайн?
designperipherals - 36
Сеть CAN 1 Мбит/с длиной 20 м показывает рост счетчиков ошибок и периодический bus-off узлов; как вы спроектируете физические проверки и восстановление?
design - 37
В кластере LIN 19,2 кбит/с есть 1 master, 6 slaves и цикл управления 20 мс; как вы спроектируете расписание?
design - 38
Шлюз на Cortex-M должен принимать UDP со скоростью 20 Мбит/с через 100BASE-TX с бюджетом обработки 2 мс; как вы разделите обязанности Ethernet?
gatewaynetworkingmcu - 39
Сенсор с батарейным питанием передает BLE-рекламу каждые 500 мс, а после подключения отправляет 20-байтное измерение с частотой 10 Гц; какие роли GAP и GATT вы выберете?
- 40
У устройства батарейка 220 мАч и требование работать 12 месяцев, просыпаясь на 10 мс каждые 60 с с током 8 мА; как вы построите бюджет энергии?
- 41
MCU работает на 80 МГц для вычисления длительностью 1 мс каждые 10 мс, а остальное время простаивает; как вы будете управлять тактированием для снижения энергии?
- 42
На плате установлено 6 сенсоров, но в типичном интервале измерения 30 с используются только 2; как вы безопасно отключите питание периферии?
peripherals - 43
Сигнал тревоги требует реакции за 250 мкс, но самый глубокий сон просыпается за 600 мкс, а легкий за 40 мкс при токе 120 мкА; какой режим вы выберете?
- 44
У устройства 2 МБ flash, bootloader на 128 КБ и образы прошивки до 700 КБ; как вы разметите dual-slot OTA bootloader?
firmware - 45
OTA-образ записывается страницами flash по 2 КБ, а питание может пропасть после любой страницы; как вы обеспечите безопасность загрузки и активации при потере питания?
activation - 46
Новый OTA-образ должен подтвердить исправность за 30 с и может запускаться для проверки не более 3 раз; как вы спроектируете rollback и метаданные версии через reset?
designrollback - 47
Проект прошивки на C из 80 000 строк следует MISRA C:2012 и сейчас имеет 12 отклонений от required rules; как вы будете управлять этими отклонениями?
firmware - 48
За 2 дня до релиза статический анализ показывает 300 findings, включая 4 дефекта высокой серьезности; как вы придете к обоснованному решению о релизе?
severity-prioritydefects - 49
Контроллер двигателя выполняет цикл 10 кГц, читает 8 аналоговых каналов и общается по CAN; как вы спроектируете стенд hardware-in-the-loop?
communicationdesign - 50
Firmware CI собирает 3 аппаратные цели на каждый commit; какие артефакты, данные map и доказательства тестов вы сохраните для релиза?
firmwareartifacts - 51
Задача FreeRTOS со стеком 512 байт падает только при формировании JSON с описанием ошибки. Как вы будете искать причину?
rtos - 52
Высокоприоритетная задача просыпается каждые 100 микросекунд, и низкоприоритетный логгер перестает запускаться. Что вы измените?
- 53
Высокоприоритетная задача управления ждет SPI mutex 8 мс, пока им владеет низкоприоритетная задача, а задача среднего приоритета выполняется. Что происходит?
evmconcurrencyperipherals - 54
Две задачи RTOS зависают дважды в день: одна блокирует I2C, затем буфер семплов, а другая делает это в обратном порядке. Как это исправить?
rtosperipherals - 55
Очередь RTOS на 32 элемента заполняется, когда датчик создает 2000 сообщений в секунду, а потребитель обрабатывает только 1500. Что вы сделаете?
rtosdata-structures - 56
Deadline контура управления двигателем в 1 мс нарушается раз в 20 секунд после добавления логирования. Как вы локализуете и исправите проблему?
estimationlogging - 57
Устройство ломается примерно через 49,7 дня из-за сравнения 32-битного миллисекундного тика с абсолютным таймаутом. Как это исправить?
resilience - 58
Устройство с 96 КБ RAM сообщает об ошибке выделения heap через 36 часов, хотя свободная память не падает до нуля. Как вы это исследуете?
memorydata-structures - 59
Полевое устройство перезагружается трижды за ночь, а регистр причины сброса указывает watchdog. Какие данные вы сохраните и что сделаете дальше?
reliability - 60
RTOS-устройство зависает на 200 мс каждые семь минут, но printf-логирование меняет поведение. Как вы примените trace-анализ?
loggingtracingrtos - 61
Входной фронт достигает ISR через 28 микросекунд, но требование составляет менее 10 микросекунд. Как найти источник задержки?
interruptslatency - 62
После выхода из вложенной ISR Cortex-M прерывания меньшего приоритета неожиданно остаются замаскированы из-за неверного восстановления BASEPRI. Какие данные и схему save/restore вы примените?
interruptsmcu - 63
Примерно один из 10 000 внешних импульсов не вызывает прерывание. Как определить, теряет его прошивка или железо?
firmwareinterrupts - 64
ADC DMA на Cortex-M7 иногда возвращает буфер с семплами предыдущего цикла. Какие операции с cache и раскладку буфера вы примените?
peripheralsmcucaching - 65
Вывод UART через DMA повреждается, потому что задача переиспользует TX-буфер сразу после запуска передачи. Как изменить владение?
peripheralsownership - 66
ADC на 20 тысяч семплов в секунду использует кольцевой DMA-буфер на 256 семплов, и при задержке обработки на 18 мс данные перезаписываются. Что вы сделаете?
soft-skillsconcurrencyperipherals - 67
ISR кладет байты в кольцевой буфер с частотой 10 кГц, задача их забирает, и индексы иногда становятся несогласованными. Как устранить гонку?
interrupts - 68
Второе ядро видит флаг готовности DMA-дескриптора, но иногда читает старые поля дескриптора. Какое исправление порядка памяти требуется?
peripheralsmemorydescriptors - 69
I2C-периферия зависает по таймауту 25 мс и остается неработоспособной до сброса всего MCU. Как восстановить только эту периферию?
peripherals - 70
После изменения драйвера GPIO-прерывание внезапно начинает срабатывать 40 000 раз в секунду. Что вы проверите первым?
interruptsperipherals - 71
I2C-датчик отвечает NACK примерно на одну транзакцию из 500 при 400 кГц. Как вы будете искать причину?
transactionsperipherals - 72
После 18 часов SDA остается в низком уровне на multi-master I2C-шине. Станете ли вы отправлять девять тактов восстановления?
peripherals - 73
В 10-мегагерцовом SPI-потоке приема примерно один кадр из 1000 сдвигается на один бит. Какие данные вы соберете?
evmperipherals - 74
SPI работает после холодного старта, но возвращает неверные байты после теплого сброса периферии. Как проверить неправильный режим?
peripheralsevm - 75
UART на 115200 бод показывает 2% framing errors после переключения частоты MCU. Как подтвердить причину?
peripherals - 76
UART на 921600 бод получает overrun во время burst на 4 КБ, хотя короткие сообщения работают. Что вы измените?
peripherals - 77
FIFO приема CAN переполняется на 6000 кадров/с, потому что аппаратные фильтры сейчас принимают все идентификаторы. Как сократить входной поток и доказать бюджет обслуживания?
- 78
CAN-сеть на 500 кбит/с работает на столе, но ломается на жгуте 30 м, где при выключенном питании между CANH и CANL измеряется 120 Ом. О чем это говорит?
- 79
Загрузка CAN-шины достигает 92%, и управляющий кадр с периодом 10 мс начинает нарушать deadline. Как снизить нагрузку?
estimationperipherals - 80
BLE-уведомление иногда занимает 150 мс, хотя приложение сразу ставит его в очередь при connection interval 30 мс и slave latency четыре. Как исследовать задержку?
latencydata-structures - 81
Стабилизатор переключается между режимами run и sleep, но в sleep сохраняет собственный ток 18 мкА и превышает бюджет платы 10 мкА. Как измерить переход и выбрать стабилизатор или конфигурацию?
config - 82
Устройство должно просыпаться раз в 10 минут, но после установки просыпается 120 раз в секунду. Как диагностировать wake storm?
- 83
Одно из 5000 пробуждений заканчивается fault при переключении с низкочастотного clock на PLL. Какую последовательность вы проверите?
- 84
При возобновлении частично загруженного образа в неактивном OTA-слоте возникает ECC-ошибка flash. Что должны сделать updater и bootloader?
firmware - 85
Rollback загружает старую прошивку, но новая прошивка уже перенесла постоянную конфигурацию на новую схему. Как сохранить старому образу возможность прочитать или восстановить данные?
configrollbackschema - 86
Одно поврежденное слово boot metadata не позволяет устройству выбрать ни один из двух корректных образов. Как усилить metadata?
- 87
Во время передачи радио питание от батареи падает с 3,3 до 2,7 В на 8 мс, и MCU перезагружается. Как доказать и исправить brownout?
- 88
Загрузка занимает 1,8 секунды, но продукт должен сообщить о готовности за 800 мс. Как оптимизировать это без пропуска проверок безопасности?
optimizationhealth-checks - 89
MISRA-анализ отмечает сравнение signed и unsigned значений в проверке предела датчика. Как вы это исправите?
- 90
Coverity сообщает о возможном null dereference в состоянии драйвера, которое команда считает недостижимым. Что вы сделаете?
fundamentals - 91
HIL-тест падает примерно раз в 300 ночных прогонов, но ни разу на столе разработчика. Как сделать сбой пригодным для расследования?
- 92
Erratum вендора говорит, что UART может потерять DMA request, если DMA повторно включить в течение двух тактов периферии. Как применить workaround?
peripheralsprocurement - 93
После обновления HAL вендора SPI-дисплей ломается, потому что интервал CS вырос с 2 до 14 микросекунд. Как обработать regression?
evmprocurementsoft-skills - 94
После изменения linker script ядро Cortex-M7 читает RX-буфер, но каждая попытка приема через DMA завершается ошибкой передачи. Как вы найдете и исправите причину?
peripheralsmcu - 95
Задача обработки сигнала с deadline 1 мс занимает 1,35 мс, а профилирование показывает 420 микросекунд на floating-point square root. Как ее оптимизировать?
optimizationprofilingconcurrency - 96
Развернутое устройство перезагружается примерно раз в неделю. Что вы поместите в field crash dump при наличии только 1 КБ retained storage?
deployment - 97
Ошибка возникает только на одной производственной партии железа при минус 20 градусах и исчезает при подключении debugger. Как ее воспроизвести?
debugging - 98
На review предлагают упакованные невыровненные DMA-буферы для экономии RAM. Как вы объясните риск и замените раскладку?
peripherals - 99
На code review для исправления гонки добавили глобальную критическую секцию 3 мс в системе управления с периодом 1 мс. Как вы проверите и замените изменение?
code-reviewsystem-design - 100
Новая прошивка вызывает UART timeouts на 0,7% устройств на заводской end-of-line станции. Как вы возглавите расследование?
resiliencefirmwareperipherals