Unterschiede beim Aufruf der main()-Funktion aus einem Startup-File

Gast #3945845
Lesenswert?

Hallo,

im angehängten Startupfile (Z. 134-140) kann die main()_Funktion
entweder direkt oder über "_start" aufgerufenen werden. Bei meinem
HelloWorld-Programm klappt aber nur ein direkter Aufruf der
main()-Funktion, wird "_start" aufgerufen passiert gar nichts.

Kann mir jmd. sagen, worin sich die beiden Aufrufvarianten
unterscheiden?
1
/* Beispiel */
2

3
.if (BEDINGUNG)
4
    LDR     R0,=main
5
    BX      R0
6
.else
7
    LDR     R0,=_start
8
    BX      R0
9
.endif
Angehängte Dateien:
Gast #3946921
Lesenswert?

Klar, beide Adressen sind unterschiedlich. Ich kann aber nicht 
nachvollziehen wo diese "_start"-Funktion herkommt bzw. was darin 
passiert, ich vermute aber es hat irgendwas mit der newlib-Bibliothek zu 
tun.

Die Initialisierung des MCUs führe ich innerhalb der main()-Funktion 
durch, daher brauche ich den "vorgeschalteten" Aufruf der 
_start()-Funktion eigentlich nicht.

Nichts desto trotz würde mich interessieren, für was diese 
_start()-Funktion gut sein soll und was darin passiert :)
Gast #3947157
Lesenswert?

_start scheint ein kompiler-spezifisches (CodeBench Lite) Symbol zu 
sein:

"For backwards compatibility with previous versions of CS3, on RAM and 
ROM profiles the symbol __cs3_start_asm is actually an alias for a 
symbol named _start. However, referencing or defining _start directly is 
now deprecated"

URL: 
http://doc.ironwoodlabs.com/arm-arm-none-eabi/html/getting-started/sec-cs3-startup.html
Gast #3947180
Lesenswert?

Mit solchen Tricksereien sollte man vorsichtig sein.

In einem von einem 08/15-C-Compiler erzeugten Programm beginnt nur der 
sichtbare Code bei main().

Vorher wird schon einiges - unsichtbar - vorbereitet.

Nur zum Beispiel: Initialisierte Variablen oder beim PC das Zerlegen der 
übergebenen Parameter (argv und argc).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren