Sharing an IRQ driven UART between processes in a fully preemptive multitasking kernel is much harder than I thought. Not sure I can build a fully atomic FIFO to serialize writes, this is even more complicated by the fact that the tx completion irq can trigger at anytime to steal from the fifo. Ugh. But I will be more clever after sorting that one out.
Yes I'm back to my RTOS bullshit after a long pause and fixing several other complex issues.