Question on variables usage between threads

peyro wrote on Wednesday, April 15, 2009:


I am new with FreeRtos and would like to ask maybe a basic question. Suppose I have a global routine:

void global_function(unsigned char parameter){
   unsigned char var1;


And two threads, pThread1 and pThread2. Lets suppose that Thread1 just called global_function and is about to execute statement "var1=parameter+1" but is switched to Thread2 by the kernel at this time. Thread2 also calls the function global_function and is able to execute it completed.
Question is when control is given back to Thread1, it will  start from the point where it was interrupted, will it have parameter and var1 in the same value it has before interrupted??? if so where these value were stored (on particular Thread1 stack?)

Thanks in advance for any information and help

rtel wrote on Wednesday, April 15, 2009:

In your example parameter and var1 are both local stack variables.  In reality they could be allocated on the task stack or in register - but in either case both tasks have their own copies of the variables so there is no problem.  The function is re-entrant.

If var1 was declared static or at file/global scope, then there would be only one copy of the variable and there would be a problem.


peyro wrote on Wednesday, April 15, 2009:

Thank you very much for the clarification Richard.