Forum: Compiler & IDEs Startup: Funktion vor Konstruktoren aufrufen?


von Stefan S. (stefan_s40)


Angehängte Dateien:

Lesenswert?

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

von Stefan S. (stefan_s40)


Angehängte Dateien:

Lesenswert?

..und das Linkerscript

von Jan S. (jevermeister)


Lesenswert?

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.

von der mechatroniker (Gast)


Lesenswert?

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.

von Sven (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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

von Stefan S. (stefan_s40)


Lesenswert?

Vielen Dank!

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
Noch kein Account? Hier anmelden.