Sida 1 av 1

Breakpoint i MPLAB

Postat: 18 januari 2009, 15:16:56
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?

Re: Breakpoint i MPLAB

Postat: 18 januari 2009, 16:54:59
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 ?

Re: Breakpoint i MPLAB

Postat: 18 januari 2009, 20:31:41
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ö).

Re: Breakpoint i MPLAB

Postat: 19 januari 2009, 18:56:31
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.