HardFault will nicht!

(Firma: RUB) #4682161
Lesenswert?

Reginald L. schrieb:
> Da will man mal ausnahmsweise einen Hardfault im STM32 erzwingen und es
> klappt nicht!
Trage im Linker-Script eine max. Größe für den Stack ein (z.B. 1k), und 
dann sorge dafür, dass dein Stack größer wird als die max. erlaubte 
größe. So funktioniert es zumidnestens beim Atmel SAM3X.
Alternativ kannst du auch einfach den Stack überlaufen lassen mittels 
einer endlos rekursion. Dann solltest du auch im Hardfault landen ohne 
das Linker-Script anfassen zu müssen.

Reginald L. schrieb:
> Allerdings komme ich nicht mehr raus.
"Wie" willst du denn wieder raus? Am einfachsten wäre es einen Watchdog 
anzustoßen.
#4682258
Lesenswert?

Kaj G. schrieb:
> Trage im Linker-Script eine max. Größe für den Stack ein (z.B. 1k), und
> dann sorge dafür, dass dein Stack größer wird als die max. erlaubte
> größe. So funktioniert es zumidnestens beim Atmel SAM3X.

Wie soll der STM32 erkennen können, ob du deinen Stack gerade gekillt 
hast? Ja, es wird langfristig irgendwie/irgendwo zu einem schweren 
Fehler (wenn auch nicht zwingend einem Hard-Fault!) führen, wenn der 
Stack zu groß wird, aber garantiert ist das meines Wissens nach nicht. 
Es findet kein Vergleich von Stackaddresse und Speicherbereichen statt. 
(eventuell lässt sich da was mit der MMU machen aber das würde erst zu 
einem MMU-Fault führen)

Laut Programming Manual des Cortex-M4 (welchem STM32 hast du?), gibt es 
zwei Gründe für einen Hard Fault:
- Bus error on a vector read
- Fault escalated to a hard fault (hier gibts nochmal mehr 
Möglichkeiten, siehe "Programming Manual" des Cortex)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren