Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Interrupt Handlers and Variable Scope (http://www.chiefdelphi.com/forums/showthread.php?t=25291)

kaszeta 14-02-2004 15:44

Interrupt Handlers and Variable Scope
 
I'm trying to implement a shaft encoder which simply triggers an interrupt handler and increments a variable every time the encoder creates a pulse.

The code mostly works, in that the interrupt handler is called when the pulse on Digital Input 1 occurs, it then checks the value of digital input 10 for the B phase, and increments and decrements a counter as appropriate.

The interrupt handler is getting called, since I can put debugging printf()'s in there which show +'s and -'s every time the handler is called.

The problem is that the global variable I'm using isn't ever incremented or decremented, like a scope problem.

I've read the C18 manual about interrupt handlers, and thought I had everything taken care of:

I've already got a
#pragma interruptlow interrupt_handler_low save=section(".tmpdata)

And I've tried
#pragma interruptlow interrupt_handler_low save=variablename

but neither of these help. Ideas?

(I'd post the exact code, but it's over with the bot without an internet connection. Perhaps later this evening).

Dave Flowerday 14-02-2004 16:52

Re: Interrupt Handlers and Variable Scope
 
Quote:

Originally Posted by kaszeta
The problem is that the global variable I'm using isn't ever incremented or decremented, like a scope problem.

Put the keyword "volatile" in front of your global variable declaration. I put a description of what this does in this thread.

Kevin Watson 14-02-2004 18:30

Re: Interrupt Handlers and Variable Scope
 
Quote:

Originally Posted by kaszeta
I'm trying to implement a shaft encoder which simply triggers an interrupt handler and increments a variable every time the encoder creates a pulse.

The code mostly works, in that the interrupt handler is called when the pulse on Digital Input 1 occurs, it then checks the value of digital input 10 for the B phase, and increments and decrements a counter as appropriate.

The interrupt handler is getting called, since I can put debugging printf()'s in there which show +'s and -'s every time the handler is called.

The problem is that the global variable I'm using isn't ever incremented or decremented, like a scope problem.

I've read the C18 manual about interrupt handlers, and thought I had everything taken care of:

I've already got a
#pragma interruptlow interrupt_handler_low save=section(".tmpdata)

And I've tried
#pragma interruptlow interrupt_handler_low save=variablename

but neither of these help. Ideas?

(I'd post the exact code, but it's over with the bot without an internet connection. Perhaps later this evening).

There is example code here that does exactly what you want. You'll just need to drop encoder.c/.h into your build and modify your user_routines_fast.c file so that the proper interrupt handlers are called.

-Kevin


All times are GMT -5. The time now is 20:04.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi