PIC32MX general_exception_handler

OP (Firma: Privat) #5335655
Lesenswert?
• ▲
▼
Hallo,

MPLAB 8.92
PicKit3  Firmware 01.50.04
PIC32MX764F128H

„ void _general_exception_handler (unsigned cause, unsigned status) “

Gibt es über diese Funktion gute Dokumentation?

Mir lege daran, zu erkennen aus welcher Zeile diese Funktion 
aufgerufen/ausgelöst wird um den Fehler besser einkreisen zu können.

Vielen Dank im Voraus.

schöne Zeit
Gast #5335679
Lesenswert?
• ▲
▼
Ich verwende das für den genannten PIC:
1
#include <proc/p32mx370f512h.h>
2

3

4
/*exception handlers*/
5
/*
6
 * Exception cause:
7
    0       0x00 Int Interrupt
8
   1-3      0x01 ? Reserved
9
   4        0x04 AdEL Address error exception (load or instruction fetch)
10
   5        0x05 AdES Address error exception (store)
11
   6        0x06 IBE Bus error exception (instruction fetch)
12
   7        0x07 DBE Bus error exception (data reference: load or store)
13
   8        0x08 Sys Syscall exception
14
   9        0x09 Bp Breakpoint exception
15
   10       0x0A RI Reserved instruction exception
16
   11       0x0B CPU Coprocessor Unusable exception
17
   12       0x0C Ov Arithmetic Overflow exception
18
   13       0x0D Tr Trap exception
19
   14-31    0x0E-0x1F ? Reserved
20
 */
21
static uint32_t excep_addr, excep_vaddr, excep_cause, exception;
22
void _simple_tlb_refill_exception_handler(void){
23
    uint32_t cause;
24
    asm volatile("mfc0 %0,$8" : "=r" (excep_vaddr)); 
25
    asm volatile("mfc0 %0,$13" : "=r" (cause)); 
26
    asm volatile("mfc0 %0,$14" : "=r" (excep_addr)); 
27
    excep_cause = (cause&0x000000FF) >> 2;
28
    exception = 1;
29
}
30
void _general_exception_handler (void){
31
    uint32_t cause;
32
    asm volatile("mfc0 %0,$8" : "=r" (excep_vaddr)); 
33
    asm volatile("mfc0 %0,$13" : "=r" (cause)); 
34
    asm volatile("mfc0 %0,$14" : "=r" (excep_addr)); 
35
    excep_cause = (cause&0x000000FF) >> 2;
36
    exception = 2;
37
}
Da sitzen beim Debuggen immer zwei Breakpoints drin.
Getriggert hat bis jetzt immer nur die general exception, und fast immer 
mit cause = 7. Kommt meist beim Verpointern.

Exceptions sind mit ein Vorteil des CPU-Kerns der PIC32.
Gast #5335686
Lesenswert?
• ▲
▼
Uha, beim Device habe ich mich leider verlesen, Sorry.
Für die genauen Adressen müsstest du also das Datenblatt konsultieren, 
wobei der Core identisch sein sollte.

Ich habe das aus dem Microchip Forum, und dann angepasst.

Sonst noch könntest du den "call stack" bemühen, üblicherweise kannst du 
damit (aus dem eception handler) zur betreffenden Stelle im Code (oder 
davor) springen.
OP (Firma: Privat) #5345404
Lesenswert?
• ▲
▼
Hallo,

Habe inzwischen

„void _general_exception_handler (unsigned cause, unsigned status)“
erweitert in

„void _general_exception_handler(unsigned cause, unsigned status, 
unsigned ret_addr)“

und


    excep_ret = ret_addr;                   /* Where the call originates 
*/
    excep_code = (cause & 0x0000007C) >> 2; /* Cause of exception */
    excep_addr = _CP0_GET_EPC();            /* Exception victim */

    if ((cause & 0x80000000) != 0)
    {
        excep_addr += 4;
    }

    bad_addr = _CP0_GET_BADVADDR(); /* Bad address if it is a bad 
address exception */


Somit bekomme ich, zumindest die „Hex-Adresse“ geliefert, wo der µC 
aussteigt.

    Muß zwar danach in das Menü „Disassembler Listing“, da es eine 
Hex-Adresse ist.
      Aber anhand meiner Dokumentation, die dort sich auch befindet, 
kann man den Bereich im C-Code einkreisen.



schönen Abend

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.