Getting kicked out of the tast

I am getting a strange behaviour out of my FreeRTOS on Xmega32D4 (AVR-GCC). Whenever there is a while loop without any vTaskDelay() and it takes a couple miliseconds to complete (for example receiving data from usart which could take as much as 30ms) I seem to get kicked out of the function earlier. For example I am supposed to receive 30B from the buffer but I only get 28B. If I add vTaskDelay(1) into the loop, everything goes fine. Same goes for a lot of other examples and not just an USART data recovery. As far as I know I am not using any watchdog timer. What could be the cause of this?

Getting kicked out of the tast

It sounds like a logic error, or a timing error in the interaction with the hardware. Without seeing how you are determining that the loop should exit after 28 bytes, when you actually want 30 bytes, it will be impossible to even guess what might be the cause. Post the code that is determining that the loop should be exited, but even after seeing the code it might be that we can’t answer the question without also studying the hardware manual (which we are not going to do).