Hallo, ich arbeite mit CooCox und CoOs auf einem STM32. Danke diesem Beitrag Beitrag "C++: Warum wird diese Methode nicht aufgerufen?" funktioniert C++ und virtuelle Methoden. Ich würde gerne wissen: Wie / wo werden die Konstruktoren aufgerufen? Wie kann ich eine Funktion aufrufen lassen bevor die Konstruktoren aufgerufen werden? Im konkreten Fall geht es darum dass in den Konstruktoren bereits Betriebssystemfunktionen aufgerufen werden, zuvor muss aber mit einer Funktion das Betriebssystem initialisiert werden... Linkerscript und Startupskript sind im Anhang. Gruß Stefan
Konstruktoren werden zu dem Zeitpunkt aufgerufen, an dem das Objekt "konstruiert" wird. Wenn du das Objekt erst nach den Betriebssystemfunktionen erstellst, dürfte es klappen.
Du meinst die Konstruktoren von globalen Objekten? Da hast du wenig Einfluss drauf, auch nicht darauf, in welcher Reihenfolge diese aufgerufen werden. Objekte in der main mit new auf dem Heap erzeugen oder in der main lokal auf dem Stack, dann hast du Einfluss. Oder, auch wenn das jetzt oberlehrerhaft klingen mag, mal die Codestruktur überdenken, wenn du so viel Zeug global rumfliegen hast.
Ja, die nette static initialization hell :) Wenn es dir weiterhilft, du kein malloc machen willst, kannst du dir auch eine eigene Verwaltung herstellen, die mittels placement new die objecte zum Zeitpunkt X für dich erstellt. Dabei musst du natürlich wissen in welchen Speicherbereich, dieser kann aber auch ein vorab alloziiertes Array sein.
Stefan S. schrieb: > Wie / wo werden die Konstruktoren aufgerufen? Hier: > bl __libc_init_array Das "Standardwerk" zu dem Thema nennt sich "Building Bare-Metal ARM Systems with GNU" und ist über google zu finden. Da werden alle deine Fragen (und noch viel mehr) beantwortet. Oliver
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.