mikrocontroller.net

Forum: Compiler & IDEs Verständnisproblem bei Linker Script


Autor: Michael W. (armeinsteiger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Linker Script für STM32F4 Discovery Board, welches ich noch 
nicht ganz verstehe. Ich habe mich bisher mit der Thematik nicht 
beschäftigt, glaube aber, hier nachholen zu müssen.

Es gibt im ld File eine Stelle

ENTRY(Reset_Handler)

wo der Einstiegspunkt angegeben wird.

Zusätzlich wird die IR Vektor Tabelle im Flash abgelegt.

  /* The startup code goes first into FLASH */
  .isr_vector :
  {
    . = ALIGN(4);
    KEEP(*(.isr_vector)) /* Startup code */
    . = ALIGN(4);
  } >FLASH

Der erste Eintrag im Code ist der Reset_Handler:

/**
  *@brief The minimal vector table */
__attribute__ ((used,section(".isr_vector")))
void (* const g_pfnVectors[])(void) =
{
  /*----------Core Exceptions-------------------------- */
  (void *)&pulStack[STACK_SIZE-1],  /*!< The initial stack pointer */
  Reset_Handler,                    /*!< Reset Handler */
  ...
  ...

};

wieso ist die Angabe des Entry Points notwendig, wo doch nach einem 
Reset aufgrund der Vektortabelle automatisch auf den startup code 
gesprungen wird?

Danke !

: Bearbeitet durch User
Autor: Ruediger Asche (Firma: keine) (rac)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Michael W. schrieb:
>
> ENTRY(Reset_Handler)
>

der hat in diesem Zusammenhang keinerlei Bedeutung. Das wird nur dort 
benötigt, wo der Linker mit einem Loader zusammen operiert. Wie du schon 
richtig erkannt ist, ist das bei einem Standalone image nicht der Fall.

Es KANN sein, dass deine IDE darüber Annahmen trifft und so Sachen macht 
wie beim Reset im Quellcode auf die Stelle zu zeigen, die dort 
hinterlegt ist, aber das ist ja maximal für das Debugging relevant.

Du musst ja sowieso aus dem generierten (relozierbaren) output 
(i.d.Regel elf file) ein Binärimage generieren (objcopy o.ä.). Damit 
geht auch was immer im Entry() steht komplett verloren.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.