mikrocontroller.net

Forum: Compiler & IDEs Segger/GCC Elf.GetEntryPointPC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von J. V. (janvi)


Bewertung
0 lesenswert
nicht lesenswert
Habe ein Projekt mit GCC auf STM32 gelinkt welches die Vektor Tabelle 
korrekt ausgibt und auf der Hardware auch wie erwartet funktioniert. 
Ozone lädt das ELF File auch ins Flash, landet dann aber unmittelbar auf 
einer HardFault Exeption. Grund dafür ist, daß der Debugger den Reset 
Vektor nicht aus der Vektor Tabelle holt sondern dazu eine Funktion 
Elf.GetEntryPointPC bemüht. Diese liefert leider eine andere (falsche) 
Adresse ohne gesetztes T-Bit was dann eben im HardFault endet. Setzt man 
den PC von Hand auf die korrekte Adresse kann man auch über Ozone 
starten.

Weis jemand was man im Linker Skript machen muß daß ElfGetEntryPointPC 
die korrekte Adresse ausgibt ?

von Christian F. (cfrey)


Bewertung
0 lesenswert
nicht lesenswert
Ist im Linker-Script ein ENTRY-Befehl vorhanden?
ENTRY(Reset_Handler)
Anstelle von "Reset_Handler" müsste natürlich der Name deines 
Einsprung-Punktes stehen (siehe 
https://sourceware.org/binutils/docs/ld/Entry-Point.html).

Falls der Befehl im Linker-Script steht und es trotzdem nicht 
funktioniert, kannst du versuchen, in der Ozone Projektdatei die 
TargetReset-Funktion anzupassen.
Leider habe ich gerade kein Beispiel zur Hand, aber du findest weitere 
Informationen dazu im Ozone-Manual unter "Process Replacement 
Functions".

: Bearbeitet durch User
von J. V. (janvi)


Bewertung
0 lesenswert
nicht lesenswert
Volltreffer - Besten Dank so funktioniert alles ohne was in Ozone ändern 
zu müssen. Hatte zuvor einen Hitex Tantino der die Adresse auch bei 
Soft-Reset tatsächlich aus der Vektor Tabelle rausgeholt hat. Das Teil 
wurde aber eingestampft zumal zu teuer und unstabil. Es wurde nicht mehr 
zur STM32F4 Serie weitergepflegt weshalb ich den Umstieg auf j-Trace 
beschlossen habe was dann auch gleich noch unter Linux läuft. Sogar der 
Reset_Handler hat als Symbol im Startup  gepasst. Den Assembler habe ich 
vor 12 Jahren mal bei Raisonance aus einer Demo Version abgeschrieben. 
Vermutlich haben die sich das aber auch nicht selbst ausgedacht.

: 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.