Frage von Aerger9, 26

Arduino Programm bleibt bei Aufruf von virtueller Methode über einen Zeiger stehen. Warum?

Ich habe ein Programm für meinen Arduino Due geschrieben. Das Programm beinhaltet mehrere Klassen. In einer Klasse stehen zwei virtuelle Methoden:

#ifndef WORKER_H
#define WORKER_H
#include <Arduino.h>

class Worker {

public:
 virtual void work() = 0;
 virtual int intervalMicros() = 0;
};

#endif

Zusätzlich habe ich eine Klasse, die aus dieser abgeleitet wird (Ich poste hier mal nur die Header Datei):

#ifndef REDLED_H
#define REDLED_H

#include "Worker.h"

class RedLed : public Worker {

private:
  bool ledStatus = HIGH;

public:
  void work();
 int intervalMicros();
};

#endif

In einer anderen Klasse habe ich ein Array von Zeigern auf die Klasse Worker:

Worker* worker[5];

Wenn ich über dieses Array versuche die Methoder intervalMicros() aufzurufen...

worker[0]->intervalMicros()

...bleibt das Programm stehen und regt sich nie wieder.

Hat jemand eine Lösung für mien Problem?

Vielen Dank im Vorraus.

LG Aerger9

Antwort
von Doubi, 15

Ich habe von Arduino zwar keine Ahnung, aber ich kenne mich mit C++ aus (Das ist ja offensichtlich die Programmiersprache, die du hier verwendest).

Also von dem her was du gepostet hast, sollte es theoretisch funktionieren. Die möglichen Fehlerquellen sind in dem Code, den du nicht gepostet hast:

- Wurde das Array worker initialisiert? Also sind wirkliche worker-Objekte drin, die du erzeugt hast?
- Bist du sicher, dass es genau bei dem Aufruf stehenbleibt? Eventuell besteht ein Problem im Code von einem worker-Objekt.

Der Aufruf an sich ist genau so, wie er in C++ gemacht wird. Das scheint also eigentlich schon richtig zu sein.

Kommentar von Aerger9 ,

Auf deinen Hinweis hin, ob die Objekte wirklich erzeugt wurden, bin ich den Code nochmal durchgegangen und habe den Fehler gefunden.

Antwort
von Aerger9, 6

Hab den Fehler gefunden. War ziemlich blöd ^^

Die Objekte auf die die Pointer im Array gezeigt haben, hatten nur den Gültigkeitsbereich einer Methode. Danach wurden sie wieder aus dem Speicher entfernt. ^^

Keine passende Antwort gefunden?

Fragen Sie die Community