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
Ich verwende das für den genannten PIC:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
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
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.
Hallo @Hmm (Gast) konnte inzwischen die Stelle finden. der UART Receive erzeugt einen "framing error", das ich bisweilen noch nicht abgefangen habe. Solltet du Interesse haben, kannst mich dann direkt kontaktieren. schöne Zeit
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
Bitte melde dich an, um einen Beitrag zu schreiben.