Hi, Can anybody give an insight whether this is good or not in embedded environment? I have a function which call itself when a condition is false, see code sample below:
void Test(void) { U8 temp; U8 temp1; U16 temp2; U16 temp3; if(some_extern_flag) { //Exit to this function } else { Test(); //Call me again } }
Does it create memory leak when called many times, say 5 times the flag is false, it will call itself 5x? This function doesn't called from either ISR or other function, just within it. Will this create a problem later on?
thanks gp
the above specifically relates to the '51
Another thing is that the above case may not result in any recursion, depending on if the specific compiler supports optimization for tail-end recursion, i.e. when the function is calling itself directly before exiting. Then the recursive call can be replaced with a jump to the start of the function, basically modifying the function into:
void Test(void) { U8 temp; U8 temp1; U16 temp2; U16 temp3; for (;;) { if(some_extern_flag) { //Exit to this function return; } else { continue; // Instead of recursion, just restart our loop. } break; } }
Thank you guys. Your individual input is very helpful.
Thanks once again. I've got an idea now, thanks to you Per.