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 ?
Ist im Linker-Script ein ENTRY-Befehl vorhanden?
1 | 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.