One solution might be to implement your own sprintf, which can work with ring buffers. Unfortunately, this will not help you solve a more basic problem: what would you do if your ringbuffer is full and you call sprintf?
If your memory situation can afford it, I would suggest a different solution for this problem:
The idea is based on two linked buffer lists (one list for free buffers, one list - transfer queue). The buffers are the same size, so they can store the worst case string. The buffers create a simple heap where allocation / deallocation selects or captures an element from either a free or a transfer list.
, , "checkerboarding" . , .
, :
DMA IRQ . , " ", .
, , , / - / -. , , IRQ /.
, .