🛠 Баг длиною в год
...который был чудом пойман через другой баг 😁
Ровно год он не давал мне покоя и существовал с первого дня открытия первой локации. Проявлялось это в зависании 4 из 9 пикселей сегмента и случалось достаточно редко в случайные моменты времени, что не позволяло воспроизвести его "на столе" и отладить. Я списывал проблему на помехи в сети до тех пор, пока ситуация заметно не ухудшилась. Это дало первые зацепки, и я начал копать...
Первой зацепкой был недавно проведённый рефакторинг программного адаптера. При детальном рассмотрении я заметил, что я случайно перешёл от синхронной обработки команд для CAN шины к асинхронной, т.е теперь команда на условную дефектовку или перезагрузку могла вклиниться прямо между пакетной передачей кадров с цветом. Получается, проблема значительно усилилась при "близком" расположении двух разных команд для одного и того же сегмента.
Обладая этой информацией, я смог воспроизвести ситуацию в отладчике микроконтроллера и точно увидеть проблемное место: из-за наложения команд зависала I2C шина связи с ШИМ контроллером и сама уже не выходила из этого состояния до аппаратной перезагрузки микроконтроллера. Чтобы не прошивать все сегменты всех открытых локаций, проблему я купировал на программном уровне игрового контроллера искусственной задержкой между командами, а новая партия электроники для Иркутска и Владикавказа уже производится с новой прошивкой.
TL;DR короче говоря, с каждым днём делаем продукт чуточку качественней 🍸
Post #242
2.22K

- 👏 21
- 👍 14
- 🤯 5
- 🎉 3
- 🤓 2