> ----- Original Message ----- > From: "James Hillman" > To: > Sent: Monday, February 25, 2002 3:15 AM > Subject: [PIC]: is it ok to have stack underflow ? > > > > In my 16F628 program I call a subroutine that waits for an event to > happen. > > If the event does not happen within a certain length of time can I use a > > goto instruction to restart the program from a known point, without > using > a > > return instruction to pop the return address back off the stack ? > > I know this will cause a stack underflow(?) condition, but since the > stack > > is a circular buffer surely it won't matter because subsequent calls > will > > have the required return to go with them - or will it ? > > > > Start: > > call initialize > > StartEnd: > > call setup > > Mainloop: > > call Subroutine > > call sub2 > > goto Mainloop > > > > Subroutine: > > clrf counter > > SubLoop: > > btfss Input1 > > retlw 0x00 > > btfss Input2 > > retlw 0x01 > > decfsz counter,f > > goto SubLoop > > goto StartEnd ;timeout so restart again > > -----Original Message----- > From: Lawrence Lile [SMTP:llile@toastmaster.com] > Sent: Monday, February 25, 2002 3:09 PM > To: PICLIST@MITVMA.MIT.EDU > Subject: Re: [PIC]: is it ok to have stack underflow ? > > This sounds like skating on thin ice to me. I would avoid it. Maybe what > you really want to do is trigger a watchdog timeout, and restart the PIC > for > real? > > --Lawrence > Lawrence, it's absolutely fine in this case. The position of the stack pointer within the stack is completely unknown at power up, so as long as you make no assumptions about the addresses which may or may not be on the stack you can't go wrong. This of course ONLY appiles to PIC's with circular stacks. Trying this on most other micro's would definately lead to grief. Mike -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu