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.
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.