i am using an 89v51rd2 controller with out external RAM, i use the following reentrant function for one of the functionalities, i cant avoid it because this function can be recursively called any no of times,
void reentrantfunction(unsigned char data1, unsigned char data2) compact reentrant { unsigned char local1, local2 = 0;
if(data2) statements;
switch(data2) { case 0: ……. break; ………… case 5: ….. break; } Function2();
for(local1=0; (local1<25); local1++) { Function3();
if(global1) { Global2[local2] = local1; local2++; } Global3 = xx; Function4(); } If (Local2) { Global4 +=1;
for(data2=0;data2<local2;data2++) { Rentrantfuncion (global2 [data2],global4); } Global4 -=1; } }
this is how my startup file stack initialization looks like..
IBPSTACK EQU 0 IBPSTACKTOP EQU 0FFH+1
XBPSTACK EQU 0 XBPSTACKTOP EQU 0FFFFH+1
PBPSTACK EQU 1 PBPSTACKTOP EQU 02FFH+1
i am having problems with this function, the speed for now is not a concern but the functionality itself goes wrong somewhere.. does the code ring bells to anyone ??
So why not just make it iterative instead of recursive?
How about describing what you're actually trying to achieve? Why do you think it needs to be recursive?