Hard Fault beim ATSAM3S (Cortex-M3)

OP #1816507
Lesenswert?
• ▲
▼
Hallo zusammen
Ich habe ein Problem mit besagten Controller. und zwar springt mir der 
Cortex immer beim Empfangen von bytes über UART in den HardFault.

Über den Fault Registern sind die Bits für
- FORCED
- INVSTATE
gesetzt. Das FORCED bedeutet das es ursprünglich kein Hard Fault war der 
aufgetreten ist, sondern dieser durch einen Fault im Fault aufgetreten 
ist.

INVSTATE sagt mir das der PC auf dem Stack auf den für den Fault 
schuldigen befehl zeigt.

Der Stack zeigt folgendes:
1: 0x20002FAE = R0
2: 0x20002F7E = R1
3: 0x00000000 = R2
4: 0x00000000 = R3
5: 0x00000008 = R12
6: 0x00401007 = LR
7: 0x00000000 = PC
8: 0xA0000000 = PSR

Der Zeiger des LR zeigt auf den Befehl
0xb003    ADD SP,SP,#0xc

Ich verstehe jetzt nicht wie es du der Exception kommen konnte? Hat 
jemand eine Idee wie ich das nun Sinnvoll debugge?
Ich hätte jetzt anhand der gesetzten Bits gedacht das die 
rücksprungaddresse bei BIT 0 eine 0 stehen hat (dies bewirkt einen 
Fehler da der Cortex in den ARM Mode wechseln möchte, dies aber nicht 
geht). Dies ist aber laut Linkerregister nicht der Fall.

Jemand ne Idee wonach man suchen könnte?
Persönliche Seite #1819451
Lesenswert?
• ▲
▼
Albert ... schrieb:
> INVSTATE sagt mir das der PC auf dem Stack auf den für den Fault
> schuldigen befehl zeigt.

Vielleicht habe ich Dich missverstanden, aber INVSTATE zeigt an, dass
man versucht hat in einen ungültigen Zustand zu
wechseln. Beispielsweise, durch laden des PC mit einer geraden
Adresse. Hast Du mal Deine Sprungadressen überprüft?

> Der Stack zeigt folgendes:
> 1: 0x20002FAE = R0
> 2: 0x20002F7E = R1
> 3: 0x00000000 = R2
> 4: 0x00000000 = R3
> 5: 0x00000008 = R12
> 6: 0x00401007 = LR
> 7: 0x00000000 = PC
> 8: 0xA0000000 = PSR
>
> Der Zeiger des LR zeigt auf den Befehl
> 0xb003    ADD SP,SP,#0xc

Aber das stacked LR ist das des Applikationskontexts, nicht die
Rücksprungadresse des Handlers. Die Rücksprungadresse ist im stacked
PC und der ist 0. Was im übrigen auch den Fehler erklärt.

> Ich verstehe jetzt nicht wie es du der Exception kommen konnte? Hat
> jemand eine Idee wie ich das nun Sinnvoll debugge?

Bad pointer?

Gruß
Marcus
Gast #1912426
Lesenswert?
• ▲
▼
Hi Leute

Ich programmiere einen Cortex M3 (STM32) dabei kommuniziere ich über die 
UART mit einem Bluetooth Modul. Wenn ich Daten von diesem empange 
bekomme ich nach einiger Zeit (ca. 2 - 3 sek) ebenfalls einen Hard 
Fault. Ich arbeite mit Keil 3.8. Ich hab die gestellten Register in als 
Anhang hochgeladen.

Ich hab leider keine Ahnung wie ich das Problem angehen soll, hat werd 
eine Idee wie ich dem Übel auf die Spur komme

Danke
Tartaruga
Angehängte Dateien:
Gast #1913251
Lesenswert?
• ▲
▼
Hi

Warum wird eine Hard Fault Routine gestartet obwohl es sich eigentlich 
um einen Instruction bus error handelt????
Ich hab auch eine ISR für den BusFaultError aber diese wird nie 
verwendet.

Hat wer eine Idee wie ich das debuggen kann?

Danke
lg
Tartaruga

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.