Ошибка в IDE 1.8.13

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Обнаружена странная ошибка, которую в более ранних версиях не замечал.

Если монитор порта был прилично подгружен, то при перезаливке программы в него проскакивает какая-то грязь перед началом честного вывода. В дальнейшем вывод проходит нормально.

Ошибку легко увидеть на вот такой тестовой программе:

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 чисто из коробки - вообще ничего не трогал.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Женя! Любопытство - не порок! ;))) Пытливость ума - приводит к поразительным открытиям.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Влад, ты о чём? Это старинный боян или что?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

А петь при загрузке пробовали? 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Какой то мусор валится в порт 

12:18:00.837 -> А это просто тупой тест
12:18:00.837 -> А это просто тупой тест
12:18:00.837 -> 
12:18:00.837 -> А это просто тупой тест
12:18:00.837 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> 
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.875 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> 
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.921 -> А это просто тупой тест
12:18:00.969 -> А это просто тупой тест
12:18:00.969 -> А это просто тупой тест
12:18:00.969 -> А это просто тупой тест
12:18:00.969 -> А это просто тупой тест
12:18:00.969 -> А это просто тупой тест

 

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

На 9600 все ОК

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Влад, ты о чём? Это старинный боян или что?

да, и не только в 1.8.13 мусор остаётся в CH340, где-то я эту тему поднимал...

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ЕвгенийП пишет:

Влад, ты о чём? Это старинный боян или что?

Боян - твое любопытство или факт мусора? ;))

Мусор после ресета на многих контроллерах - известное дело. Это не поймать на уровне терминала, хоть в ИДЕ хоть самописного. Суть - в самой природе USB-UART. Воркэраунд - пауза перед первым выводом в сериал. Проще всего после Serial.begin().

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Rumata пишет:

А петь при загрузке пробовали? 

Нет. Только пить. Надо попробовать! Что по-Вашему лучше/перспективнее: "В лесу родилась ёлочка" или "Боже царя храни"?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

ЕвгенийП пишет:

 или "Боже царя храни"?

Если NIX-ы на компе, я бы поостерегся. Можно демонов распугать. А если православная Виндоуз, то можно и "Царя" ))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А что, Гайвер ГИМН АРДУИНЩИКА еще не написал? Удивительно )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:
Суть - в самой природе USB-UART.

ua6em пишет:
мусор остаётся в CH340

Таки да, но почему-то при перезапуске кнопкой Reset эффект не проявляется :-(

Так что фигвам, товарищи бояре, "это ж-ж-ж неспроста"!

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Я тут вчерась обновил Линух на кухне. Минт20 циннамон накатил. Заодно вот-прям-щас 1.8.13 поставил, а то старая 1.8.7 была.

Мусор в мониторе порта есть только при первом запуске, потом, что закрыть открыть монитор, что ресет нажать - больше мусора нет.

Кста, для линуксоидов: заметил, может правда уже давно, но я тока-щас заметил, что драйвер ttyUSB перестал охреневать после нажатия ресета. То есть номер на USB1 больше не меняет ;))), что приятно. Ну и, как всегда, Линух не нуждается в драйверах к чему-либо ардуиновскому.

---------------------------

сорри, Новый "икскримент" провел: выдернуть-воткнуть (Офицеры! Маа-аалчать!) - вот тогда опять есть мусор в мониторе.

Ну моооо-ожет быть, некие джава-программеры не инициализировали буфер приема у монитора при первом запуске, может, согласен!

Исходники ИДЕ есть, но искать в них - я не полезу, хоть и "upper-intermediate" в джаве ;))).

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

На OSX очень часто после загрузки вообще ничего в порт не выводится. А если выводится, то сначала пол экрана мусора. Ресет спасает.

Такое ощущение, что по окончании загрузки IDE не чистит rx/tx и эти остатки потом пополам с потоком от МК вываливаются в монитор. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

У мня на 8.13 очень часто не выводится самая первая строка после Serial.begin(...), и именно после заливки, при сбросе выводится нормально. Например 

	Serial.begin(115200);
	delay(100);
	Serial.println(F("Programm started..."));

"Programm started..." не выводится в 80% случаев.  Потом - вывод работает как ни в чём не бывало.  Я уже и delay() ставил и циклы пустые - хрен мне в сумку.  А нажимаешь Reset - выводится. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Так. Остываем. Я поставил putty, да он такой же есть на линухе, как в ваших помойных окнах ;)))).

Таким образом ИДЕ не 8.13, ни какая ысчо - ни при чём. После выдернуть/воткнуть провод - мусор в консоли.

Вопрос снят?