[edit 3.6. 18:20: Nur Betreff angepasst]
[edit 3.6. 22:30: Das lässt sich auch mit einer vollkommenden anderen Herangehensweise nachstellen - Danke an J-M-L - Der Code hier im Ausgangspost läuft ggfls. durch. Das nachzubauen geht ab #6 mit dem Code dort. bzw. ab J-M-L in #17 - Letzter Stand für UNO/MEGA sowohl als Sender und Empfänger in #34]
[edit 4.6. 19:25: Unter Windows wird ein anderes Binary erstellt als unter Ubuntu. Auch die Debugausgaben sind ganz anders - getestet mit einem Sketch in #46 ff.]
Hat jemand ne Erklärung dafür, das ein sprintf irgendwo im Code den MEGA abschiesst?
Kurzsketch in #6 oder ab #25:
Verwendete lib:
Das einkommentieren von neueFunktion() macht jeder selber für sich...
Ich gehe mal davon aus, dass "den MEGA abschiessen" (was auch immer da passiert) nur in genau dieser Kombination bei dir zu beobachten ist. Um @J-M-L 's Hinweis zu verwerten, könntest du deinen Test mit sprintf(zeige, "%i", 1);
machen.
Ohne RF24 radio kann ich übrigens kein Problem feststellen.
Sorry fürs späte antworten - musst emich erstmal sammeln und das nochmal runterbrechen.
Bei der Benutzung von sprintf führt radio.begin() zum Reeboot des MEGA. Der Bootloader ist dann zerschossen.
Nein tut es auch nicht.
Ja, das ist das Problem...
Der Sketch war eine minimalistische Zusammenfassung, da muss irgendwas anders bei gewesen sein - hab jetzt mal Eure Tipps mit eingearbeitet und noch weiter runtergekürzt und auf einem Ubuntu mit einer 1.8.13, einer 1.8.15 sowie einer 1.8.8 am laufen gehabt.
Mittlerweile bin ich schneller im Bootloader flashen, als im Code hochladen
Wenn ich bei delay(100) und s(n)sprintf kommentiere, läuft es wie Biene. (so wie jetzt im code)
Wenn ich bei delay(100) den Kommentar entferne, läuft es auch - nur eben langsamer aber auch stundenlang.
Setze ich den wieder ein und entferne jetzt bei snprintf den Kommentar, öffne den Seriellen Monitor und dann den Sketch hochlade:
13:37:46.757 -> Start...
13:37:47.686 -> RadioStart...
13:37:47.686 -> tik
[SELBER INHALT NOCH 22X] (Jeweils mit gleicher Zeitangabe...)
13:37:47.719 -> tik
[SELBER INHALT NOCH 44X]
13:37:47.796 -> tik
[SELBER INHALT NOCH 101X]
13:37:47.818 -> tik
[SELBER INHALT NOCH 25X]
13:37:47.852 -> tik
[SELBER INHALT NOCH 44X]
13:37:47.885 -> tik
[SELBER INHALT NOCH 44X]
13:37:47.918 -> tik
[SELBER INHALT NOCH 44X]
13:37:47.951 -> tik
[SELBER INHALT NOCH 44X]
13:37:47.984 -> tik
[SELBER INHALT NOCH 37X]
13:37:48.017 -> tik
[SELBER INHALT NOCH 44X]
13:37:48.050 -> tik
[SELBER INHALT NOCH 44X]
13:37:48.083 -> tik
[SELBER INHALT NOCH 44X]
13:37:48.116 -> tik
[SELBER INHALT NOCH 44X]
13:37:48.149 -> tik
[SELBER INHALT NOCH 44X]
13:37:48.182 -> tik
[SELBER INHALT NOCH 20X]
13:37:48.182 -> tik
13:37:48.182 -> tik
13:37:48.182 -> tik
13:37:49.043 -> Start...
13:37:49.870 -> Start...
13:37:50.732 -> Start...
13:37:51.560 -> Start...
13:37:52.422 -> Start...
Kommt jetzt das delay(100) noch mit rein, wird es kürzer:
// ungekürzt
13:48:27.620 -> Start...
13:48:27.620 -> RadioStart...
13:48:27.720 -> tik
13:48:27.819 -> tik
13:48:27.918 -> tik
13:48:28.017 -> tik
13:48:28.117 -> tik
13:48:28.977 -> Start...
13:48:29.805 -> Start...
13:48:30.667 -> Start...
13:48:31.527 -> Start...
13:48:32.354 -> Start...
setze ich das delay auf 1000 nur noch einen tik bis zum Dauerrestart. Vergrößere ich das delay auf 2000 dauerst 22 Ausgaben / 44 Sekunden.
Er kommt genau bis radio.begin() - und das wars.
Vor allem muss ich jedes Mal den Bootloader neu flashen.
Und ich hab keine Compilerwarnungen und extra nachgesehen ob die richtigen .h .cpp aus den Verezichnissen geholt werden.
Ja tun sie.
Nein - es ist ein Zeichen dafür, das ich den halben Satz weggelassen habe.
Der Code funktioniert solange die nrf nicht involviert.
Das radio.write() führt nur in Verbindung mit einem irgendwo im Code stehenden s(n)printf dazu, das der Bootloader hin ist und zum Neustart führt.
Also entweder kein s(n)printf oder kein radio.
Ich denk noch drüber nach.
Und ich muss mich ja nicht beeilen....
Bei einem MEGA kann man eigentlich den Bootloader nicht zerschießen.
Jedenfalls nicht, wenn man es als normaler Sketch gar nicht vorhat.
Es könnte am ehesten der Bootloader selber sein, der aus irgendeinem Grund sich weigert, nichts zu tun und den aktuellen Sketch laufen zu lassen....