Hard Fault bei Cortex M3

OP #2943523
Lesenswert?

Hallo,

mein Mikrocontroller springt immer wieder mal in den HardFault-Handler. 
War erst sehr unregelmäßig tritt aber immer häufiger auf. Ich habe mal 
die Fault-Register ausgelesen und bin so darauf gestoßen, dass im Usage 
Fault Status Register das "INVSTATE"-Bit gesetzt ist. Im User-Manual 
steht dazu folgendes:

"Invalid state usage fault:
0 = no invalid state usage fault
1 = the processor has attempted to execute an instruction that makes
illegal use of the EPSR.
When this bit is set to 1, the PC value stacked for the exception return
points to the instruction that attempted the illegal use of the EPSR.
This bit is not set to 1 if an undefined instruction uses the EPSR."

Das EPSR ist das Execution Program Status Register. Dazu steht im 
Maunal:

"The EPSR contains the Thumb state bit, and the
execution state bits for either the:
• If-Then (IT) instruction
• Interruptible-Continuable Instruction (ICI) field for an interrupted 
load multiple or store multiple instruction."

Falls es von Bedeutung ist: Ich programmiere in C.

Wieso tritt dieser Fehler auf? Was ist ein unerlaubter Zugriff auf das 
EPSR?
#2943543
Lesenswert?

Benutzt du ein Betriebssystem in deinem Projekt? Greifst du direkt auf 
Register zu z.B. mit inline Assembler, oder bewegst du dich nur in der 
C-Syntax?

Hast du den englischen Text verstanden? Wenn das INVSTATE-Bit gesetzt 
ist, steht im PC-Register die Adresse der Instruktion drin, die den 
Fehler verursacht hat. Du kannst dann im Dissassembly sehen wo der 
Fehler verusacht wurde, wenn du an die Adresse gehst.

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