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.
SMS interrupt 0{ berita(0x0000,0x3fff); } show interrupt 1{ berita(0x4000,0x7fff); } Interrupt 0 and interrupt 1 call the same sub routine but for different purpose. When compiled, the C51 generated warning L15: MULTIPLE CALL TO SEGMENT Segment : ?PR?_BERITA?RTX Caller1 : ?PR?_SMS?RTX Caller2 : ?PR?_SHOW?RTX The program does'nt work at all if the HEX file programmed to the chip AT89S51. Any one please, How to omit the warning, or to use interrupts calls one sub routine for a different purposes. Thank you very much Kurnia Brahmana
Hi Kurnia. Try this, it may solve your problem, As what is already suggested by Stefan, you better use a reentrant stack for the perticular function "berita". While at defination also you put the reentrant attrib, as...
berita(x,y) reentrant; main() { } SMS interrupt 0{ berita(0x0000,0x3fff); } show interrupt 1{ berita(0x4000,0x7fff); } . . . berita(x,y) reentrant { . . }
Try this, it may solve your problem, That is problematic because "reentrant" by definition creates slower code and slower code in ISRs is usually (IMHO always) a bad idea. As what is already suggested by Stefan Stefan "suggested" no such thing, he said "make sure it is reentrant" and stated clearly "Personally I prefer not to call functions from interrupt handlers at all" I advise STRONGLY gainst calling subroutines from ISRs and advise WITH AS MUCH FORCE AS I CAN against calling subroutines from more than one level (if you have to, then only call from main OR only call from one ISR) Erik