Ошибка в IDE 1.8.13
- Войдите на сайт для отправки комментариев
Обнаружена странная ошибка, которую в более ранних версиях не замечал.
Если монитор порта был прилично подгружен, то при перезаливке программы в него проскакивает какая-то грязь перед началом честного вывода. В дальнейшем вывод проходит нормально.
Ошибку легко увидеть на вот такой тестовой программе:
const char * str = R"( А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест А это просто тупой тест )"; void setup(void) { Serial.begin(115200); Serial.print(str); Serial.print(str); Serial.print(str); Serial.print(str); } void loop(void){}
Если запускать её (кнопкой "Загрузка") несколько раз подряд, то не всегда, но достаточно часто можно увидеть вот такую картину
Если посчитать строки после грязи, то их 10 - правильное количество. Значит, грязь появляется не во время вывода, а перед ним. Сам по себе вывод идёт правильно.
Причём эта грязь - не остатки прошлого вывода, а кусок нового. Это удалось выяснить, запустив этот скетч во время работы предыдущего - совсем другого. Обратите внимание что грязь - это кусок вывода нового скетча, а не того, что работал раньше.
дальнейшие эксперименты показали, что если скетч перезапускать не "перезагрузкой", а кнопкой Reset на самой ардуине, то никакой грязи не появляется. Отсюда делается вывод, что проблема не самом скетче и не в самом окне монитора, а во взаимодействии IDE с окном монитора в момент заливки скетча.
Ну, вот, как-то так. Беда.
Кстати, IDE 1.8.13 чисто из коробки - вообще ничего не трогал.
Женя! Любопытство - не порок! ;))) Пытливость ума - приводит к поразительным открытиям.
Влад, ты о чём? Это старинный боян или что?
А петь при загрузке пробовали?
Какой то мусор валится в порт
На 9600 все ОК
Влад, ты о чём? Это старинный боян или что?
да, и не только в 1.8.13 мусор остаётся в CH340, где-то я эту тему поднимал...
Влад, ты о чём? Это старинный боян или что?
Боян - твое любопытство или факт мусора? ;))
Мусор после ресета на многих контроллерах - известное дело. Это не поймать на уровне терминала, хоть в ИДЕ хоть самописного. Суть - в самой природе USB-UART. Воркэраунд - пауза перед первым выводом в сериал. Проще всего после Serial.begin().
А петь при загрузке пробовали?
Нет. Только пить. Надо попробовать! Что по-Вашему лучше/перспективнее: "В лесу родилась ёлочка" или "Боже царя храни"?
или "Боже царя храни"?
Если NIX-ы на компе, я бы поостерегся. Можно демонов распугать. А если православная Виндоуз, то можно и "Царя" ))
А что, Гайвер ГИМН АРДУИНЩИКА еще не написал? Удивительно )))
Таки да, но почему-то при перезапуске кнопкой Reset эффект не проявляется :-(
Так что фигвам, товарищи бояре, "это ж-ж-ж неспроста"!
Я тут вчерась обновил Линух на кухне. Минт20 циннамон накатил. Заодно вот-прям-щас 1.8.13 поставил, а то старая 1.8.7 была.
Мусор в мониторе порта есть только при первом запуске, потом, что закрыть открыть монитор, что ресет нажать - больше мусора нет.
Кста, для линуксоидов: заметил, может правда уже давно, но я тока-щас заметил, что драйвер ttyUSB перестал охреневать после нажатия ресета. То есть номер на USB1 больше не меняет ;))), что приятно. Ну и, как всегда, Линух не нуждается в драйверах к чему-либо ардуиновскому.
---------------------------
сорри, Новый "икскримент" провел: выдернуть-воткнуть (Офицеры! Маа-аалчать!) - вот тогда опять есть мусор в мониторе.
Ну моооо-ожет быть, некие джава-программеры не инициализировали буфер приема у монитора при первом запуске, может, согласен!
Исходники ИДЕ есть, но искать в них - я не полезу, хоть и "upper-intermediate" в джаве ;))).
На OSX очень часто после загрузки вообще ничего в порт не выводится. А если выводится, то сначала пол экрана мусора. Ресет спасает.
Такое ощущение, что по окончании загрузки IDE не чистит rx/tx и эти остатки потом пополам с потоком от МК вываливаются в монитор.
У мня на 8.13 очень часто не выводится самая первая строка после Serial.begin(...), и именно после заливки, при сбросе выводится нормально. Например
"Programm started..." не выводится в 80% случаев. Потом - вывод работает как ни в чём не бывало. Я уже и delay() ставил и циклы пустые - хрен мне в сумку. А нажимаешь Reset - выводится.
Так. Остываем. Я поставил putty, да он такой же есть на линухе, как в ваших помойных окнах ;)))).
Таким образом ИДЕ не 8.13, ни какая ысчо - ни при чём. После выдернуть/воткнуть провод - мусор в консоли.
Вопрос снят?