Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question

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).

See: http://stackoverflow.com/questions/1433204/how-do-i-share-a-variable-between-source-files-in-c-with-extern-but-how for more info on extern

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

share|improve this answer
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

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.