Aus Startup-Code C++ Funktion aufrufen (ARM)

Gast #1410302
Hallo,
ich habe in meinem Startup-Code (LPC2000) ein Problem. Und zwar möchte 
ich, bevor ich main aufrufe, eine andere Funtion starten, die 
dummerweise in C++ realisiert ist.
Im Startupcode gibts ja die Anweisungen

  ldr r12, =main
  mov lr, pc
  bx r12

nun möchte ich, bevor ich main aufrufe, eine andere Funktion starten 
namens init. Wenn ich folgendes schreibe:


  ldr r12, =init
  mov lr, pc
  bx r12

dann funktioniert dies zwar, völlig zuverlässig, aber nur, wenn init 
eine C-Funktion ist. Sobald ich init in einem cpp-File habe (und das 
habe ich, weil init auf bestimmte C++ Klassen zugreifen muss), dann 
meckert der Compiler (undefinied symbol).

Was  muss ich tun, damit er erkennt, was init ist? In C geht das ja 
auch.


Gruss
Rauskriegen wie die Funktion heisst und diese aufrufen. Eine C++ 
Funktion void init() heisst auf Assembler-Ebene nicht einfach nur init, 
weil Parametertypen in den Namen reincodiert sind.

Alternativ: Diese Funktion mit extern "C" garnieren.
Gast
A.K.,
danke erstmal.
Wie finde ich den Namen der Funktion denn raus?
Und, wenn ich sie mit extern "C" garniere - kann sie dann dennoch C++ 
Code ausführen?
Interessierte schrieb:
> @guenther
>
> Für Interessierte :)
>
> Wie musstest du die Funktion denn nun aufrufen?

Na genau so, wie im ersten Post. Er hat mit dem 'extern "C"' nur dafür 
gesorgt, dass die Funktion auch tatsächlich "init" heißt.
Gast
Ja, genau so habe ich es gemacht.
Mein Startup-Code lädt erst die Adresse der init-Funktion, so:

   ldr r12, =init
   mov lr, pc
   bx r12

und dann erst wird main gestartet:

   ldr r12, =main
   mov lr, pc
   bx r12

wobei die funktion init so aussieht:

extern "C" void init(void)
{
...
}

Gruss

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.