Handling interrupt

pebemspn wrote on Sunday, March 15, 2015:


I want to have ISR which is out of freeRTOS scope (not handled by rtos - interrupt whose priority level is greater than configMAX_SYSCALL_INTERRUPT_PRIORITY), I sync it with a task in rtos. Since I do computation (math/filtering) within this ISR on periodic base I need to keep ISR variables over time. My ISR is high frequency rate ISR.

My question is what/how variable should I use (local,static,global)? What is the limitation on variable use for this ISR which is out of rtos?

Under preemptive scheduling do I have either time different stack?

Thank you.

rtel wrote on Sunday, March 15, 2015:

This is a C question, not a FreeRTOS question.

In C a variable declared as a local variable inside a function will be allocated to either the stack, or a register. In either case the value of the variable will not persist across calls to the function - no matter if that function is executed in an interrupt or not.

If the variable is declared inside the function as a static variable, then it will not be on the stack and its value will persist across calls to the function. Likewise if the variable is global it will always be accessible and its value will not change unless changed by your code.


pebemspn wrote on Tuesday, March 17, 2015:

Thank you for your answer, what you wrote is quite understandable. I am starting to use rtos so questions are quite entry level.

My ISR is out of freeRTOS, I use local variables there and if there is a preemptive scheduler which switch stacks per task, does it affect my local ISR variables?
The ISR local variables is allocated on stack, so which particular one if each task his its own stack?

Thank you.

rtel wrote on Tuesday, March 17, 2015:

Tasks are software controlled and interrupts are a feature of the hardware - a task can never preempt an interrupt, but an interrupt can preempt a task - so you do not need to worry about a task switch interfering with the stack of an interrupt.