Atmega168 interrupt error handling
Any way I can avoid this?


I think the whole concept of reading "n" bytes is flawed. It will indeed hang if you don't get the number you expect.

Why not just do what normal serial comms does. Accept bytes as they arrive in an ISR, and put them in a buffer? Then use the line-terminator to know when you have enough to process.


  So what can I do if the UART ISR is always called and prevents the rest of the board from functioning?


The UART ISR won't be called if there is no data, so it won't be "always called".