Forum: Compiler & IDEs Verständnisproblem bei Linker Script


von Michael W. (Gast)


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.

1
  /* The startup code goes first into FLASH */
2
  .isr_vector :
3
  {
4
    . = ALIGN(4);
5
    KEEP(*(.isr_vector)) /* Startup code */
6
    . = ALIGN(4);
7
  } >FLASH

Der erste Eintrag im Code ist der Reset_Handler:

1
/**
2
  *@brief The minimal vector table */
3
__attribute__ ((used,section(".isr_vector")))
4
void (* const g_pfnVectors[])(void) =
5
{
6
  /*----------Core Exceptions-------------------------- */
7
  (void *)&pulStack[STACK_SIZE-1],  /*!< The initial stack pointer */
8
  Reset_Handler,                    /*!< Reset Handler */
9
  ...
10
  ...
11
12
};

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

Danke !

von Ruediger A. (Firma: keine) (rac)


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.