Что происходит с микроконтроллером с момента подачи питания до попадания в main
Что проверяют
Работали ли вы со встроенным программным обеспечением на самом деле. Тестировщику эта цепочка нужна не ради теории: от того, на каком шаге всё сломалось, зависит, как воспроизводить дефект и на кого его заводить.
Как отвечать
Опишите последовательность и сразу переводите её в проверки. На типовом ядре порядок такой:
- питание нарастает, схема сброса по питанию держит ядро в сбросе, пока напряжение и тактовый генератор не стабилизируются;
- ядро читает первые слова таблицы векторов: начальное значение указателя стека и адрес обработчика сброса;
- обработчик сброса из стартового файла настраивает тактирование и задержки доступа к памяти программ, при необходимости переключается на внешний генератор;
- значения инициализированных переменных копируются из памяти программ в оперативную, секция неинициализированных обнуляется;
- вызываются конструкторы статических объектов, если проект на C++;
- управление передаётся в
main, и только там обычно поднимается периферия и разрешаются прерывания.
Дальше про своё: причину последнего старта даёт регистр статуса сброса, и его значение стоит прикладывать к дефекту. Отсюда же набор проверок: холодный старт против сброса кнопкой, просадка питания, срабатывание сторожевого таймера, повторная подача питания без паузы.
Где спотыкаются
Считают, что до main ничего не происходит, и заводят дефект «устройство не стартует» без единой детали. Разработчику нужен признак: дошло ли до main, какая причина сброса записана, мигает ли индикатор из стартового кода.
Не отличают холодный старт от тёплого. При сбросе кнопкой питание не пропадало, часть регистров и содержимое оперативной памяти сохраняются, поэтому дефект воспроизводится только после полного обесточивания. В тест-кейсе это два разных предусловия.
Полагают, что память при старте чистая. Обнуляется только своя секция и только стартовым кодом, а переменные в специальных областях и содержимое стека остаются со старыми значениями. Плавающий дефект, который пропадает после перепрошивки и возвращается через день, почти всегда отсюда.