Defekt im RAM Speicher?

Boah :face_with_symbols_over_mouth:, seid drei Stunden versuche ich einen Fehler in meiner Software zu finden und hab nun endlich den Übeltäter entdeckt…

Von vorne:
Ich wollte in meinen Fork die Strucktur der Eingabeerkennung ändern und habe dafür ein struct erstellt:

struct inputTrigger {
  bool pauseTrack;   
  bool next;   
  bool previous;     
  bool volumeUp;
  bool volumeDown;
#if defined ANALOG_INPUT
  bool shortCut [2 + ANALOG_INPUT_POSITIONS];
#else
  bool shortCut [2];
#endif
  bool shutDown;
};

Anstatt die Buttons im Main loop zu lesen sollen die neuen Trigger gelesen werden.
Aber immer wenn ich nextTrack gedrückt habe, stürzte die AiO ab und im Seriellen Monitor waren ein paar Echo Fetzen zu erkennen.
Warum?
Ich habe den ganzen relevanten Code durchforstet, immer wieder Zeilen und Blöcke auskommentiert.
Aber es ergab alles keinen Sinn.

Einzig das auskommentiern folgender Zeile half:
myTrigger->next = upButton.wasReleased();

Dann hatte ich eine idee und habe mein struct verändert, so:

struct inputTrigger {
  bool pauseTrack;
  bool previous;
  bool next;
  bool volumeUp;
  bool volumeDown;
#if defined ANALOG_INPUT
  bool shortCut [2 + ANALOG_INPUT_POSITIONS];
#else
  bool shortCut [2];
#endif
  bool shutDown;
};

previous und next habe ich getauscht.
Dann kam die Bestätigung, nun hat previous den Absturz verursacht.
Eine weiter Änderung des struct brachte dann einen kleinen Erfolg:

struct inputTrigger {
  bool pauseTrack;
  bool placeHolder; //Bit an dieser Stelle im Flash defekt?????
  bool previous;
  bool next;
  bool volumeUp;
  bool volumeDown;
#if defined ANALOG_INPUT
  bool shortCut [2 + ANALOG_INPUT_POSITIONS];
#else
  bool shortCut [2];
#endif
  bool shutDown;
};

Ich habe eine Dummy Variable eingefügt und da schau her der Code läuft wie erwartet.

Meine Vermutung ist folgende und dazu brauche ich eure Einschätzung/Rat:
Jedes mal wenn ich versucht habe ein true an die Stelle des Struct zu schreiben an der zuerst bool next, dann bool previous stand, stürzt der Controller ab. Meine folgerung ist, das die Speicherstelle im RAM defekt ist.
Kann das sein? Kann man das genauer prüfen?

@stephan, @Thorsten habt ihr sowas mit dem LGT8 schon mal erlebt, davon gehört.

Habe ich noch nie von gehört. Zudem, zur Laufzeit speicherst du doch nichts an der Stelle im Flash. Die Variable wird doch im RAM instanziert oder!?

Ah ja da magst du Recht haben.
Dann wäre der defekt im RAM.

Hast du mal versucht das mit einem Basic Sketch zu verifizieren? Evtl ein großes Array füllen und zurücklesen und vergleichen oder so.

Nein, habe das eben erst fest gestellt. Aber das könnte ich probieren.

In meinem Fall habe ich die Variable zyklisch im loo auf false gesetzt. Das verursachte keine Probleme.
Sobald ich sie auf true setze, kommt der Absturz.
Habe das setzen auf true über die Buttons als auch direkt einprogrammiert. Bei direktem setzen stürtz der Controller ab sobald er das erste mal versucht true zu schreiben.

Speicher vielleicht voll?

Wird mir nicht angezeigt. Ich arbeite gerade auch weiter an dem Fork und habe mittlerweil noch weitere Variablen ergänzt, die auch funktionieren.

Ich muss morgen weiter Tests machen. Ich habe ja auch den EEPROM Pull Request bei mir eingebunden, vieleicht bewirkt das eine Änderung.

Ich hab mein Problem gefunden, ich bin es…

Ich habe Pointer angelegt statt der Variablen, was wahrscheinlich dazu geführt hat, das ich mir den RAM einfach überschrieben habe.

Naja immerhin eine Erkentniss mit genommen.

1 Like