www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hard Fault beim ATSAM3S (Cortex-M3)


Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Du hast recht, es war ein Sprung auf die Adresse 0x00000000. Bei mir 
entstand es durch eien falsche Abbruchbedingung bei einem 
pointerincrement.
Fehler ist nun behoben

Autor: Tartaruga (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tartaruga (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tartaruga schrieb:
> Hat wer eine Idee wie ich das debuggen kann?

Mal ins SHCSR geschaut?
http://infocenter.arm.com/help/topic/com.arm.doc.d...

--
Marcus

Autor: frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

würde auch gerne mit diesem Controller spielen. Wo hast du ihn 
erstanden?

Grüße

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

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.