Queue is exactly what I’m aiming at. Other tasks like reading out ADC data continuously will have to be implemented also. I was fed up with all these delays() and timing constraints. Two UARTs will be acting later in the solution.
In a first consideration I thought not to use IRs at all. A task could polll the receive status bit and when there is no character available it just idles. When a character is available, it reads it and puts it in a ringbuffer. Another task looks whether tail != head (overflow conditions have to be processed) and gets the character, processes it and puts it into the Tx register. Tx empty bit must be polled and task could be released, when Tx busy.