Thomas C. Sefranek wrote: > C:\NP\NeuroLogica\Analog\Software\ISRs.o(.text+0x2c): In function > `_U2RXInterrupt': > C:\NP\NeuroLogica\Analog\Software\ISRs.c:72: undefined reference to > DataRdyUART2' > C:\NP\NeuroLogica\Analog\Software\ISRs.o(.text+0x3c):C:\NP\NeuroLogica\Analo > g\Software\ISRs.c:74: undefined reference to `ReadUART2' What really surprises me here is that the undefined references don't have underscores prepended. The C30 compiler puts an underscore in front of globally known symbol names. This can be useful when mixing ASM30 and C30. You can define entry points for the same routine in ASM30, one without the underscore and one with. Each can follow the calling conventions for that language. So given all that, I don't understand why the missing external is "ReadUART2" and not "_ReadUART2". I know this doesn't answer your question, but it is probably a clue. Is it possible that the UART C runtime routines have their own library. I would look around for LIB files in the C30 directory. > IFS1bits.U2RXIF = 0; // Clear the UART2 RX IRQ Flag bit. > while(DataRdyUART2()) > { > ( *(Received_data)++) = ReadUART2(); > } > } Shouldn't you be doing some limit checking on the array bounds here? If it's a circular buffer, how about overrun checking? ****************************************************************** Embed Inc, Littleton Massachusetts, (978) 742-9014. #1 PIC consultant in 2004 program year. http://www.embedinc.com/products -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist