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?