How do you handle interrupt service routines in C? What limitations exist when writing code inside an ISR?