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?
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
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
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
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
Tartaruga schrieb: > Hat wer eine Idee wie ich das debuggen kann? Mal ins SHCSR geschaut? http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337g/Cihcbadd.html#Cihieffb -- Marcus
Moin, würde auch gerne mit diesem Controller spielen. Wo hast du ihn erstanden? Grüße
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.