Fehler!!! => Arduino mag keine drei Ausrufezeichen

Nur mal als Erfahrungsbericht:

Ich arbeite grad einem größerem Projekt, schon seit einiger Zeit immer wieder mal, wenn ich Zeit habe. Als sich plötzlich der Code nicht mehr hochladen lies!

Alles läuft gut, aber beim hochladen kommt dann irgendwann ein Timeout. Andere Software geht, nur diese nicht.

Also habe ich von meinen 11 Reitern in der IDE immer einen nach den anderem auskommentiert, Funktionen auskommentiert, immer wieder getestet. Bis ich schliesslich, nach stundenlanger Suche, die Ursache auf eine Funktion eingrenzen konnte. Nun auch diese Funktion zerlegt und einen Teil nach dem anderen raus und versucht hochzuladen.

Als ich die Fehlerursache auf wenige Zeilen eingegrenzt hatte, fiel mein Blick auf eine Codezeile, und plötzlich machte es "Klick". Da hatte ich schonmal was im Forum gelesen.

Ich hatte (nur zu debug-zwecken) die Zeile ** Serial.print(" FEHLER!!! "); ** eingefügt. Und da fiel mir ein, dass es mal was mit den drei Ausrufezeichen gegeben hatte. >:(

Ein Ausrufezeichen weg, und schon lief es. Es ärgert mich, dass ich auf so einen dummen Fehler reingefallen bin.

Läst sich übrigens leicht reproduzieren. Ein Code, der nur aus der Zeile Serial.print("!!!"); besteht, läßt sich nicht hochladen.

Hehe- damit hats mich auch schon einige Male erwischt. Ich glaube, der Fehler trat auch bei einer anderen Zeichenkette reproduzierbar auf- 212121 oder so ähnlich. Das ist dann besonders ärgerlich- da kommt kein Mensch drauf.

Ich dachte, den Fehler hätte man mittlerweile beseitigt.

Gruß Tommy

Das ist ein dokumentiertes Verhalten.
Also nicht wirklich überraschend.

Ursache des Dilemmas:
Der 8U2 oder 16U2 schaltet beim Erhalt von !!! in den DFU Modus.
Damit bricht dann natürlich der Upload unbeabsichtigt ab.

Und ja, es gibt Firmware, die das nicht tut.
Aber ob sich das unter den Chinesischen Nachbauten schon rum gesprochen hat?

In diesem Fall: gut dass chinesische NAchbauten keinen 16U2 verwenden.

Ich hab aber in Erinnerung, es sei ein vergessenes Debug-Feature in einem alten Bootloader für den 2560 gewesen. Man sollte also seine 2560 und auch andere Nachbauten ansehen, welchen Uralt-Bootloader sie mitbringen.

Auch habe ich gelernt "!!!" wird heutzutage durch "einself" ersetzt.

"!!!" und eine Konstante mit dem Wert 0x212121 wirken natürlich gleich: Es wird dreimal ein Byte mit dem Wert 0x21 übertragen.

Ich hab aber in Erinnerung, es sei ein vergessenes Debug-Feature in einem alten Bootloader für den 2560 gewesen.

Habe ich das verwechselt? Ok, mag sein ....