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
..und das Linkerscript
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.
Gast
#3752938
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.
Gast
#3752948
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
Vielen Dank!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.