# Things to do with ISR

I have an ISR that increments a counter every 5ms if the switch is pressed.

If the counter becomes 200 then do Reset. I plan to add more functions to be called from the counter value.

After a few encounters with ISRs, I have got the expert advice from this site to keep ISR short.

Then how should I keep the ISR properly or near to perfection.

Is it about keeping flags?

I trust calling ISR that do long routines is a bad architecture. But then how can I call long routines from the value of flags in ISR if it is kept in another source files other than main.c?

-

Allowing access to variables between source files is done using the extern keyword, for example in header file declaring a variable. If it's all in one file you can use a global variable.

When you want an ISR to be able to change the variable (such as a flag) and have another routine recognize the change (perhaps by polling the flags periodically between doing other stuff), it's best to use the volatile keyword, which prevents the variable from being optimized out of the code (since otherwise the compiler does not see how it could change).

And: http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword for more info on volatile

-
Thank you @Spehro Pefhany.But if it's not in same file.What should be done to make the flag change visible in the other source file. –  Rookie91 Feb 26 '14 at 3:56
Declare the variable as extern in a header file, include that header file in each source file that needs to access it. Define it in one file. That has nothing to do with ISRs, it's just C programming. stackoverflow.com/questions/1433204/… –  Spehro Pefhany Feb 26 '14 at 4:41
If it's changed in an ISR, then add the volatile keyword. barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword –  Spehro Pefhany Feb 26 '14 at 4:44