Breakpoint i MPLAB

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Breakpoint i MPLAB

Inlägg av Rick81 »

Har ett problem med en 16F877A där PICen kraschar efter en kort stunds körning. Om jag kör debuggern i MPLAB IDE får jag CORE-E0001: Stack over flow error occurred from instruction at 0x0000b7

Jag misstänker att problemet är att stack overflow inträffar någonstans i interupt rutinen men av någon anledning får endast vid vissa kompileringar sätta brytpunkter i interupt rutinen annars får jag "One or more breakpoints could not be resolved"

Jag använder HT PICC och MPLAB IDE v7.11

Vet någon varför det bara vid enstaka kompileringar går att sätta brytpunkter i interrupt rutinen och hur man kan göra för att alltid få sätta brytunkter i interupt rutinen?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Breakpoint i MPLAB

Inlägg av sodjan »

> CORE-E0001: Stack over flow error occurred from instruction at 0x0000b7

Vanligtsvis (i assembler) CALL utan RETURN eller interrupt utan RETFIE.
Eller att man sätter GIE i int rutinen så att du får rekursiva interrupt (a no-no
om man inte är 100% säker på vad man håller på med).

Har inte HT PICC någon funktion för "stack watch" eller liknande ?
Ger inte plastsen där felet uppstår någon ledtråd ?
Har du provat att felsöka ? D.v.s med de vanliga metoderna,
skala bort kod tills det fungerar o.s.v ?
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Breakpoint i MPLAB

Inlägg av bearing »

Är det inte så att du lagt till några rader ovanför brytpunkten rad så att brytpunkten ibland hamnar på en "ogiltig" rad, dvs en rad som inte genererat en instruktion?

Ta bort alla brytpunkten och lägg dem på rader som säkert går att bryta på. Använd t.ex. nop() (om det finns i din miljö).
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Re: Breakpoint i MPLAB

Inlägg av Rick81 »

Tackar för tipsen. Jag hittade felet som berodde på att en pekare blev oinitierad under vissa omständigheter. Hade helt enkelt missat en if() innan jag ändrade pekaren som gjordes i timer interupt.

Blev dock inte klock på brytpunkterna. Det var under en viss kompilering som jag kunde sätta brytpunkten och då debugga det.
Skriv svar