kurioser Reset durch Leerzeichen oder Funktionsaufruf

OP #2635444
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.
OP
@katombo: Wenn ich es richtig verstanden habe, dann hat der Atmega328 3 
verschieden Speicher Typen:

SRAM: 2 Kbyte - hier das laufende Programm ausgeführt, dieser Teil wird 
von availableMemory() gecheckt. Hier habe ich aber wie gesagt noch 1,4 
Kbyte.

EEPROM: 1 Kbyte - für Settings,vom Programm erzeugte Daten usw. nutze 
ich momentan nicht

Flash: 32 Kbyte ist das ausführbare Programm abgelegt. Bei mir momentan 
knapp 8 Kbyte.

Ich denke die Menge an Speicher ist nicht das Problem, ich denke eher an 
ein Fehler im Code.

@Klaus Wachtler: ich weiß nicht was availableMemory()tut, sollte kein 
freien speicher mehr vorhanden sein, ich weiß auf dem Weg nur, dass ich 
tendenziell noch genug haben sollte.  (Bit sind falsch, ich wollte Byte 
geschrieben haben. :) )

@µC-Bastler: Simulator kling gut, ich habe bis lang immer direkt auf dem 
board debugt, im dem ich mir der Serieller Schnittstelle bestimmte 
Positionen im Ablauf überprüft habe. Was ist denn das Tool der Wahl zum 
simulieren? Werde mir mal  AVR Studio 5 anschauen, da ist alles mit an 
Board, richtig? Habt ihr Erfahrung mit Arduino und AVR Studio 5?

Netter Gruß,

Alex.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.