Hallo!
Ich habe mich jetzt durch die diversen Beiträge hier gelesen, aber nichts gefunden, mit dem ich der Lösung meines Problems näher kommen könnte, deshalb ein neues Topic.
Ich habe eine recht einfache Klasse, der ich 2 Konstruktoren Meine_Teimer und Meine_Timer(int), aber bei der Deklaration habe ich Probleme am DUE, nicht aber am PC.
Initialisierung soll natürlich vor setup() und loop() erfolgen mit:
Meine_Timer ein_timer;
Meine_Timer zehn_timer(10);
Der Header sieht so aus:
//Test.h
class Meine_Timer {
public:
Meine_Timer();
Meine_Timer(int i_timer_anzahl);
int init(int i_timer_anzahl); //soll weg
int set(long l_timer_zeitspanne);
int set(int i_timer_nummer, long l_timer_zeitspanne);
//... usw, einige Methoden,
//eine Struktur für die Start- und Ablaufzeit und Timer läuft
//sowie Der Zeiger auf die Struktur und die Strukturlänge
};
};
Folgende Konstruktoren "funktionieren" am PC mit DEV++ aber nicht am Arduino:
//Test.c - das geht nicht
include "Test.h"
Meine_Timer::Meine_Timer(){
Meine_Timer(1);
}
Meine_Timer::Meine_Timer(int i_timer_anzahl){
Meine_Timer::stru_timer * p_stru; //Zeiger auf die Struktur, wird auch in der Klasse abgelegt
p_stru = new stru_timer[i_timer_anzahl];
p_struct = p_stru; //p_struct = Zeiger in der Struct der Klasse
//hier dann der Rest der Initialisation
}
Folgende Konstruktoren "funktionieren" zwar auch am Arduino, ist aber nicht schön, weil ich hier eine "Hiilfsmethode" verwende, die ja auch im im Header definiert sein muss, und das sollte eigentlich nicht sein.
//Test.c - so geht es
include "Test.h"
Meine_Timer::Meine_Timer(){
init(1);
}
Meine_Timer::Meine_Timer(int i_timer_anzahl){
init(i_timer_anzahl);
}
int init(int i_timer_anzahl){
Meine_Timer::stru_timer * p_stru; //Zeiger auf die Struktur, wird auch in der Klasse abgelegt
p_stru = new stru_timer[i_timer_anzahl];
p_struct = p_stru; //p_struct = Zeiger in der Struct der Klasse
//hier dann der Rest der Initialisation
}
Nachdem ich vor etwa 15 Jahren von C++ weg bin und nun durch die "kleinen Arduino-Racker" wieder Fuß fassen will bin ich mir nicht sicher, ob ich nicht irgendwo einen Kardinal-Fehler in meinen Gedanken habe.
Im Konstruktor Meine_Timer::Meine_Timer(int i_timer_anzahl) wird per new Speicher angefordert und der Zeiger darauf auch in der Klase abgelegt. Und das scheint das Problem zu sein. Ein check des Zeigers auf die Struktur ergibt, dass ein Null-Pointer generiert wird, das new also anscheinend fehl schlägt.
Meine Frage: Gibt es eine Erklärung, warum Variante 2 meiner Test.cpp einwandfrei läuft, Variante 1 allerdings keinen Speicher allokiert?
Danke schon mal für Eure Hilfe
Wolfgang