Skip to content

Вопросы на собеседовании: Embedded-инженер

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Embedded-инженер.

Смотреть пример резюме: Embedded-инженер

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

rtos

Я разделю три временных контура и явно задам владельцев оборудования.

  • Задача сбора данных с периодом 1 мс будет просыпаться по уведомлению таймера или DMA, ставить метки времени и отправлять записи фиксированного размера без работы с CAN.
  • Задача публикации с периодом 10 мс будет владеть передачей CAN, а задача диагностики с периодом 100 мс получит приоритет ниже обеих критичных по времени задач.
  • Данные пойдут через ограниченные очереди, а у каждой периферии будет один владелец, чтобы не брать общие блокировки драйверов на пути 1 мс.
  • Стеки будут рассчитаны по измеренным минимальным остаткам под худшей нагрузкой с запасом не менее 25% в пределах 128 КБ.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат превратить требования по времени и памяти в понятные границы задач FreeRTOS, а не бездумно создавать отдельную задачу для каждой функции.

rtos

Я назначу фиксированные приоритеты по дедлайнам, поставив задачу управления с периодом 2 мс выше остальных.

  • FreeRTOS запускает готовую задачу с большим числовым значением приоритета, поэтому можно назначить управлению 4, телеметрии 3, а журналированию 1.
  • Отложенная обработка прерываний, способная разблокировать управление, получит подходящий приоритет, но обычное журналирование не окажется выше телеметрии.
  • Каждая задача в простое будет блокироваться на задержке, очереди или уведомлении, освобождая процессор задачам ниже.
  • Я проверю время отклика по измеренному худшему времени выполнения и блокировкам, потому что одни номера приоритетов не доказывают дедлайн 2 мс.

Зачем это спрашивают: Интервьюер оценивает знание семантики приоритетов FreeRTOS и соответствие назначения временным требованиям, а не субъективной важности функций.

rtos

Я использую vTaskDelayUntil, чтобы запуски оставались привязаны к исходной сетке 10 мс.

  • До цикла инициализирую TickType_t lastWake через xTaskGetTickCount, затем на каждой итерации вызову vTaskDelayUntil с pdMS_TO_TICKS(10).
  • В отличие от vTaskDelay, это не добавляет переменное время выполнения от 1 до 3 мс к моменту следующего запуска.
  • Я буду ставить метку времени на каждом старте и фиксировать перегрузку, если прошлая итерация дошла до следующего запуска или пересекла его.
  • Частота тика должна достаточно точно представлять 10 мс, а для более строгой точности фазы нужно уведомление от аппаратного таймера.

Зачем это спрашивают: Интервьюер хочет увидеть понимание абсолютного периодического запуска, обработки перегрузки и ограничений времени на основе системного тика.

estimationdesign

Расчетная загрузка по 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 и понимает ли, что одна загрузка не учитывает блокировки и стоимость прерываний.

designrtosinterrupts

Я использую ограниченную очередь минимум на 12 элементов и выберу 16 элементов для измеренного запаса.

  • ISR вызовет xQueueSendFromISR для 16-байтного значения или, что лучше, для индекса в заранее выделенном пуле отсчетов.
  • Очередь из 16 значений займет 256 байт плюс метаданные и поглотит 16 мс входного потока.
  • После паузы 12 мс потребитель выгрузит все доступные элементы, а не обработает только один за пробуждение.
  • Я посчитаю случаи переполнения и заранее определю политику: отбросить новый отсчет, самый старый или поднять ошибку потери данных.

Зачем это спрашивают: Интервьюер оценивает расчет очереди по скорости производителя и длительности паузы, безопасную работу из ISR и явную политику перегрузки.

transactionsdescriptorsperipherals

Я инициализирую счетный семафор значением 6, чтобы он представлял число свободных DMA-дескрипторов.

  • Задача берет один токен перед извлечением дескриптора из защищенного списка и запускает DMA только после успеха обеих операций.
  • ISR DMA отправляет индекс готового дескриптора через xQueueSendFromISR; задача драйвера возвращает его в свободный список под mutex и отдает один токен.
  • Метаданные свободного списка защищает отдельный короткий mutex, потому что счетный семафор управляет количеством, а не взаимным исключением.
  • Каждый запрос получает ограниченный тайм-аут из своего дедлайна, чтобы исчерпание всех 6 дескрипторов стало видимой ошибкой, а не бесконечным ожиданием.

Зачем это спрашивают: Интервьюер проверяет правильное моделирование конечного числа ресурсов и отсутствие неправильного применения счетного семафора как блокировки структуры данных.

interruptsperipherals

Я применю бинарный семафор, потому что повторные фронты могут объединяться, пока одно повторное чтение уже ожидает выполнения.

  • ISR отдает семафор через xSemaphoreGiveFromISR и запрашивает переключение, если готовой стала задача с более высоким приоритетом.
  • Работник берет семафор, один раз читает все GPIO, выполняет подавление дребезга и снова блокируется.
  • Повторная отдача уже доступного семафора не считает еще один фронт, что соответствует требованию повторного чтения.
  • Если нужно сохранить каждый из 200 фронтов в секунду, я выберу счетное уведомление или очередь.

Зачем это спрашивают: Интервьюер оценивает понимание объединения сигналов бинарным семафором и умение отличать сигнализацию от подсчета событий.

rtosperipheralstransactions

Я защищу всю I2C-транзакцию mutex FreeRTOS, которым владеет контекст задачи.

  • Mutex покрывает адрес, настройку передачи, завершение и восстановление, чтобы байты двух клиентов не перемешались.
  • Mutex FreeRTOS поддерживает наследование приоритета, а бинарный семафор нет, поэтому для общего владения нужен именно mutex.
  • Каждый вызывающий код использует тайм-аут из своего дедлайна и освобождает mutex на всех путях успеха и ошибки.
  • Обратные вызовы не должны рекурсивно брать тот же mutex, а долгие задержки повторных попыток останутся вне критической секции 2 мс.

Зачем это спрашивают: Интервьюер проверяет правильную семантику mutex, ограниченную длительность блокировки и конкретное отличие наследования приоритета от бинарного семафора.

rtos

Я назначу три бита событий и буду ждать их все без очистки после успешного ожидания.

  • Владельцы линка, DHCP и синхронизации времени устанавливают биты 0, 1 и 2 при готовности и немедленно очищают свой бит при потере состояния.
  • Зависимая задача вызывает xEventGroupWaitBits с ожиданием всех битов и конечным тайм-аутом повторной проверки 1 с.
  • Готовность является уровнем состояния, а не числом событий, поэтому группа подходит лучше трех очередей.
  • После пробуждения задача повторно проверяет реальные состояния подсистем, потому что установки и переподключения могут пересечься с результатом ожидания.

Зачем это спрашивают: Интервьюер оценивает применение битов событий для совмещенных условий уровня с продуманной очисткой и обработкой гонок.

rtosinterruptsperipherals

Я применю прямое уведомление задачи вместо выделения очереди или семафора.

  • ISR вызывает vTaskNotifyGiveFromISR, затем portYIELD_FROM_ISR, если установлен xHigherPriorityTaskWoken.
  • Задача вызывает ulTaskNotifyTake без очистки при выходе, если нужно посчитать каждое из 20 000 завершений в секунду.
  • Если важно только последнее состояние буфера, я включу очистку при выходе и позволю повторным завершениям объединяться.
  • Такой дизайн ограничен одним известным получателем, именно поэтому он меньше и быстрее универсальной очереди.

Зачем это спрашивают: Интервьюер проверяет выбор наименее затратного примитива FreeRTOS и правильную настройку его счетной семантики.

designrtosmemory

Я исключу неограниченное выделение памяти во время работы и сделаю бюджет 64 КБ проверяемым при сборке и запуске.

  • Стеки задач, очереди, протокольные буферы и запросы драйверов будут находиться в статической памяти или пулах фиксированного размера.
  • Если heap_4 остается для начального создания объектов, после инициализации выделение запрещается, а минимальный остаток heap записывается.
  • Фиксированные пулы явно задают исчерпание и максимальную задержку, тогда как повторные выделения разных размеров могут фрагментировать heap за 5 лет.
  • Я измерю минимальные остатки стеков под стрессом и оставлю не менее 20% запаса для худшего наблюдаемого пути.

Зачем это спрашивают: Интервьюер оценивает детерминированное владение памятью и подтвержденный измерениями расчет для долгоживущего устройства с ограниченными ресурсами.

concurrencydata-structuresrtos

Я предоставлю память для каждого объекта ядра и включу поддержку статического выделения FreeRTOS.

  • Каждая задача получит блок управления StaticTask_t и фиксированный массив StackType_t, переданные в xTaskCreateStatic.
  • Каждая очередь получит StaticQueue_t и правильно выровненный байтовый буфер, а каждый mutex будет создан через xSemaphoreCreateMutexStatic.
  • Приложение предоставит статическую память для idle-задачи и задачи таймеров через обязательные callbacks FreeRTOS, если эти задачи включены.
  • Все 8 стеков и 8 объектов синхронизации имеют время жизни программы, а link map подтверждает итоговый расход RAM.

Зачем это спрашивают: Интервьюер проверяет практическое знание статических API FreeRTOS, резервной памяти и памяти системных задач ядра.

evmconcurrencyperipherals

При протоколе немедленного потолка приоритетов граница блокировки H за один запуск равна 700 мкс, поэтому дизайн превышает бюджет блокировки 500 мкс.

  • Потолок обоих ресурсов равен приоритету H, потому что H берет и SPI, и калибровку, что исключает циклические цепочки блокировок в выбранном протоколе.
  • Граница равна max(700, 300, 200) = 700 мкс, а не сумме всех критических секций задач ниже.
  • Потолок устраняет неограниченную инверсию, но не сокращает 700 мкс, поэтому я разобью SPI-передачу L на безопасные для протокола части короче 500 мкс, вынесу ее из окна H или применю другой контроллер.
  • Я измерю реальные времена удержания и повторю анализ времени отклика H, M и L с учетом потолка и переключений контекста.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат рассчитать блокировку для выбранного mutex-протокола и понять, когда потолок приоритета нужно дополнить сокращением владения ресурсом.

resilienceperipheralsconcurrency

Я сделаю отмену кооперативной и направлю каждый исход через один структурированный путь очистки, который точно знает набор захваченных ресурсов.

  • Локальное состояние операции хранит владение SPI, буфером или дескриптором, файловой системой и признак начала устойчивой записи.
  • Mutex файловой системы ожидается ограниченное время; при тайм-ауте или отмене задача не начинает новую работу и освобождает только реально захваченные ресурсы в обратном порядке.
  • Задачу нельзя принудительно удалить с захваченным SPI, а chip select, DMA, дескрипторы и SPI mutex возвращаются или отменяются по документированной процедуре владельца драйвера.
  • Постоянные изменения используют staging и commit marker, поэтому очистка оставляет старую или новую полную запись, а fault injection проверяет каждую точку отмены.

Зачем это спрашивают: Интервьюер проверяет структурированную отмену после частичного захвата, включая ограниченные ожидания, точное владение и очистку оперативного и постоянного состояния.

designrtosinterrupts

Я задам каждому дескриптору состояния 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 вызовом очереди.

rtosmcuapi

Только 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.

rtos

Я сохраню тик 1 кГц для активного планирования и включу tickless idle для интервалов простоя 30 с.

  • Тик 1 кГц дает шаг 1 мс, но без подавления будит CPU 1000 раз в секунду.
  • Tickless idle программирует малопотребляющий таймер на ближайший дедлайн и после пробуждения продвигает счетчик тиков ядра.
  • Я проверю дрейф малопотребляющего таймера, максимальный подавляемый интервал и все источники пробуждения на полном сне 30 с.
  • Для цикла 2 мс все равно измеряется задержка, а требование к фазе меньше тика следует реализовать аппаратным таймером, а не ускорением общего тика.

Зачем это спрашивают: Интервьюер оценивает компромиссы по времени, энергии и точности часов между периодическими тиками и их подавлением.

estimation

Я запрограммирую малопотребляющий таймер на ближайший 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