rtel wrote on Friday, November 26, 2010:
The macro to use then is portEND_SWITCHING_ISR(), not taskYIELD_FROM_ISR().
If you are sending a lot of messages character by character consider using a ring buffer instead, and just send a single message to the task that processes the data once a complete message has been received.
Also, what have you set the priority of the interrupt to? It must be equal to or below configMAX_SYSCALL_INTERRUPT_PRIORITY, remembering that high numeric values denote ***low*** interrupt priorities, and that different functions provided by different vendors want the interrupt priority specified in different ways (some wanted shifted into the most significant bits, while others want it in the least significant bits and do the shifting internally within the driver). Definitely ***do not*** leave the interrupt at its default priority as this will be 0 and therefore the highest priority in the system.