Hi, I am trying to use Interrupt to check if a key has been pressed on the key pad for this i just wrote a sample code to test it out but i am having the following difficulty
*** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_IPRINT?BKMAIN CALLER1: ?PR?INTER0?BKMAIN CALLER2: ?C_C51STARTUP ***ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: _DATA_GROUP_ LENGTH: 001BH Program Size: data=181.6 xdata=0 code=17362 Target not created
Now i am using many functions where i am calling the same function but it is not giving me an error there what can i do to avoid this error
The error comes when i include the following code
void Inter0 (void) interrupt 0 { clear(); init1();init1(); iprint("Inside Interrupt"); }
iprint is a display function which is
void iprint(char *aaa){ unsigned int i=0; for(;aaa[i]!=0;i++)display(aaa[i]); }
if i write the code like this
void Inter0 (void) interrupt 0 { clear(); init1();init1(); display('a'); }
It dose not give me any error. and the code compiles properly
I would suggest that you look into structuring your code so that the ISR accumulates the Wiegand data into a buffer as it arrives and sets a flag to indicate accumulation complete.
The baove, while correct, is too limited. This, by no means, is a 'wiegand' or such issue.
more complete : if at all possible, no processing of incoming data should take place in the ISR
Erik
Erik,
I totally agree with your comment - It is a maxim which I have followed for years.
Since the thread originator mentioned wegand (meaning Wiegand ?), I thought that it might be useful (to him) to describe the task in that manner.
Whichever - I hope he finds my/your/our comments useful.
David.