Hallo ihr da draußen,
ich bin vor ein paar Stunden auf einen Fehler gestoßen der mich sehr
verwunder. Folgender Aufruf wird von meinem Atmega328 normal
abgearbeitet
1 | Serial.println(" test ");
|
und dieser Aufruf, ohne Leerzeichen hinter dem "test" führt zu einem
Reset
1 | Serial.println(" test");
|
"Serial" gehört zu den Standard Arduino Funktionen.
Wenn ich an der selben Stelle in der Software eine Funktion einer
anderen Klasse aufrufe, führt auch das zu einem Reset.
Folgende Funktion sagt, das mir vor dem Aufruf noch 1400 Bit zu
Verfügung stehen.
1 | int availableMemory() {
|
2 | int size = 2048;
|
3 | byte *buf;
|
4 |
|
5 | while ((buf = (byte *) malloc(--size)) == NULL)
|
6 | ;
|
7 |
|
8 | free(buf);
|
9 |
|
10 | return size;
|
11 |
|
12 | }
|
Ich frage mich jetzt was alles zu einem Reset führen kann, bzw. wie ich
am besten auf den Fehler kommen kann. Ich habe eine Verschachtelte
Klassen Struktur. Der Aufruf befindet sich in der vierten Ebene, ich
kann mir denken das verschachtelte Klassen nicht die beste Struktur auf
einem µC sind, kann das alleine schon der Grund für den Crash sein?.
Das ganze läuft auf einem Arduino Uno. Als IDE teste ich gerade Visual
Studio mit dem Visual Micro Plugin sowie den Arduino Libraries, bin mir
aber nicht so sicher ob das der goldene Weg ist.
Gute Nacht,
Alex.