We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Since the c51 compiler does not support the recursive call of a function is there any way to find out on which address location the function which is to be called as a recursive is located?
That is, is there any way to implement the recursive call funtion in a similar way of a software reset i.e just call like this ,
((void (code *) (void)) 0x0000) ();
***Warning L13: RECURSIVE CALL TO SEGMENT SEGMENT : ?PR?_?DEVICE_ID?MAIN CALLER : ?PR?TOTAL_DEVID?MAIN
This is the warning message. Actually the reentrant function is Device_ID().My function look like this,
void Device_ID(void) reentrant { . . func1(); . . func2(); . . }
void func1(void) //this is not reentrant { . . }
void func2(void) //this is not reentrant { . . func3(); . . }
void func3(void) { . . Device_Id(); //in this function only i call the //reentrant function . . }
I already told that the setting i did in the startup.a51.
Now what should i do?
If you call other functions from your reentrant function, they should be declared reentrant, too (unless you really know what you're doing) - otherwise, there could be multiple instances of the called functions active at the same time.