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

Gast #3945845
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 #3946762
Was ist denn die Adresse von _start? Ich dachte, das wäre der Anfang des 
Initcodes und NICHT die Adresse von main? Das würde die Sache erklären.
Gast #3946921
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 #3946929
Event. unterscheidet sich der "non-" vom "RAM_MODE" dadurch, daß der 
Code erst noch ins schnelle RAM kopiert werden muß. Das macht event. 
_start() und Spring danach main() an.
Gast #3947157
_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
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

Eine eigene Frage? Dieser Thread ist über 11 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.