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 ??
You must post your code correctly. It is not readable
"this function can be recursively called any no of times"
No it can not. You have limited RAM. If you use it up you program dies.
Just follow the simple instructions, clearly stated:
www.danlhenry.com/.../keil_code.png
Note that TABs don't work (well) - use spaces instead,
and don't forget to check it in the 'Preview'...