Управляем питанием по-взрослому: конечный автомат для устройств с батарейным питанием

В embedded-проектах с батарейным питанием управление энергопотреблением часто сводят к нескольким вызовам sleep() и проверке кнопки включения. Пока устройство простое — этого хватает. Но как только появляется аккумулятор, зарядка, дисплей, кнопка питания и требования к пользовательскому поведению, такой подход начинает разваливаться.
Типичные ситуации, с которыми сталкиваются на практике:
● устройство выключено, но подключили зарядку — что должно происходить?
● зарядка идёт, пользователь нажал кнопку — включаться или нет?
● батарея критически разряжена — как корректно отказать во включении?
● устройство долго не используется — когда и как его выключать?
● контроллер питания подал питание сам по себе — это включение или ошибка?
устройство вышло из Deep Sleep — это пробуждение или «холодный старт»?

















