Closed code-complete closed 1 year ago
Спасибо за исследование проблемы. Просто заменить safe_delay на delay думаю будет не совсем безопасно. Собственно разница между ними состоит в том, что safe_delay контролирует температуру во время задержки, а delay нет. В случае, если в буфере не появится свободное место (например было отключено тактирование UART), код с delay превратится в бесконечный цикл. Если при этом был включен нагрев, то он станет бесконтрольным. Я думаю стоит переделать это место. Убрать safe_delay, но сделать какой-то timeout, по истечению которого цикл ожидания будет прерываться.
Обнаружил проблему, что при запуске команды m303 (pid autotune) через WIFI на порт 8080 стабильно выключается нагревать на полпути (и стол и хотэнд), после чего срабатывает защита. Выглядит это все след. образом:
Покопался в интернете, нашел похожую проблему в оригинальном репозитории для v1.x.x. В v2.x.x она тоже пофикшена. Суть проблемы - во время работы m303 вызывается safe_delay при логировании статуса команды через UART. В данном случае подозрение сразу же пало на WIFI-драйвер - попробовал собрать без него, запустил команду по проводу через repetier-host, заработало. После чего поискал вызов этой функции из WIFI-драйвера, критичными оказались два вызова в отправке данных WIFI-модуль. После того как перевел на delay, команда m303 стала работать штатно.