- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 6 von 6

Thema: Cortex M3, Exceptions bestätigen ?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo PicNick,
    der Weg scheint schon mal richtig.
    Ich werd mir das Morgen mal genauer durchlesen.
    Kann meiner Meinung nur ne Kleinigkeit sein.
    Ich hab ja schon viele der Interrupts am Laufen.
    Uart, ADC, SPI,Timer usw. Da kriegen wir wohl den ollen Hardware Fault auch noch hin....
    Danke Dir für die Info.
    Siro

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Guten Morgen, da bin ich wieder....
    Habe mir das Datenblatt von Keil mal angesehen und auch nochmal das Datenblatt des Controllers.

    Wenn ich das richtig verstanden habe, laufen die Exceptions NICHT über den NVIC.
    Im Datenblatt von Keil steht aber NVIC_SetPriority(BusFault_IRQn, 0x80) merkwürdig ??
    Dann laufen die Exceptions doch über den NVIC ???

    Ich habe beim Debuggen gesehen, daß nach meinem Exeption das IMPRECISERR im SCB->CFSR Register gesetzt wird, also habe ich es per Software gelöscht.
    Das brachte aber auch noch keinen Erfolg.

    Nun lese ich gerade im Datenblatt UM10360 folgendes:
    Ein Bus Fault Exeption wird ausgelöst, wenn ein Schreibzugriff auf den Flashspeicher erfolgt, dafür sorgt der Flash Accelerator.

    Nanu, meine Software landet im "HardFault" und nicht im BusFault. Bei folgendem Zugriff:

    int *p=0;
    *p=4; /* Exception ausloesen, unerlaubter Schreibzugriff auf den Flash */

    Irgendwie bin ich jetzt etwas verwirrt und weis immer noch nicht wie ich die Interrupts wieder freigeben kann, nachdem der Exception kam.

    Das Datenblatt von Keil führt lediglich eine while(1) Schleife ein, wenn der Exception auftrat. Ich wollte aber nicht stehen bleiben
    in meiner Software, sondern eine Fehlermeldung ausgeben. Die Software läuft ja auch weiter, aber meine Timerinterrupts stehen....

    Weiter unten im Datenblatt von Keil steht dann, was die Software nach einem Execption tun kann.
    System Reset
    Recovery (genau das will ich, leider fehlt hier ein Beispiel)
    Task termination

    Ich bin also noch nicht viel weiter gekommen.
    Wo sind die Spezis, die mir helfen können ?

    Siro
    Geändert von Siro (28.10.2011 um 10:57 Uhr)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.12.2011
    Beiträge
    9
    Hallo,
    beschäftige mich erst seit Neuestem mit dem M3 und Lowlevel-Programmierung. Hast du dein Problem gelöst? Wenn nicht, schau mal folgende Info (ARM Page)
    HFSR [30] FORCED
    Indicates a forced hard fault, generated by escalation of a fault with configurable priority that cannot be handles, either because of priority or because it is disabled:
    0 = no forced HardFault
    1 = forced HardFault.

    When this bit is set to 1, the HardFault handler must read the other fault status registers to find the cause of the fault.
    Könnte eine DataAccessViolation im MFSR ausgelöst worden sein?

    Gruß René

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo Rene,
    ersteinmal Danke, daß Du dieses Thema nochmal aufgegriffen hast.
    Leider konnte ich bis heute mein Problem nicht lösen.
    Ich habe mehr durch Zufall jedoch festgestellt, daß meine Software bei einem Stackoverflow auch in meinem HardFault Handler landet.

    Dann habe ich noch so einiges probiert:

    Code:
    /* das bit BUSFAULTPEND im SCB->SHCSR register löschen */
      p = (U32*)0xE000ED24;
      value = *p;               /* register lesen */
      value &=(~(U32)(1<<14));       /* bit loeschen */
      *p = value;               /* registerwert zurück schreiben */
      
      /* das bit IMPRECISERR im SCB->CFSR register löschen */
      p = (U32*)0xE000ED28;
      value = *p;               /* register lesen */
      value &=(~(U32)(1<<14));       /* bit loeschen */
      *p = value;               /* registerwert zurück schreiben */
      
      ENABLE;
      
      __asm ("CPSIE F");
    Alles ohne Erfolg. Meine Interrupts nach dem HardFault sind nach wie vor komplett gesperrt.

    Eine Nachfrage direkt bei NXP blieb leider ohne Rückmeldung.
    Ich werde mich auch nochmal diesem Thema widmen. Sobald ich etwas in Erfahrung bringe werde ich es posten.

    Siro

Ähnliche Themen

  1. ARM Cortex-M3 Starterkit für 69 Dollar
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 30.05.2011, 16:00
  2. Software Reset Cortex M3
    Von Siro im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 8
    Letzter Beitrag: 30.01.2011, 22:06
  3. ARM Cortex M3 KettenRoboter
    Von Pajonilaus im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 30.06.2010, 18:59
  4. Cortex M3 Programcounter Adressen
    Von Siro im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 11.06.2010, 15:39
  5. Cortex M3 Ramfunction
    Von Siro im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 27.04.2010, 08:34

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests