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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.