Ja, das dacht ich auch schon mal ... "Ach was mit dem kleinen Fehler kann man leben ..."
Hab da auch schon Lehrgeld bezahlt

Bei der Länge, die er alle 100ms rüber schieben will plus der Umwandlung der Strings in Integer ... sportlich.
Das puffernd im Ringpuffer würd ich bleiben lassen und direkt "inline" umwandeln, sprich immer wenn ein Abschnitt komplett ist direkt.
Ginge recht einfach ... per uart-interrupt Zeichen einlesen.
Wenn ist Trennzeichen Pointer zurücksetzen, dann die nachfolgenden Zeichen in Puffer, beim nächsten
Trennzeichen den Puffer kopieren, Parametercounter erhöhen,
die Kopie umrechnen lassen und Ergebnis in Array mit Stelle des Parameterzählers speichern.
Am Ende der Zeichenfolge dann ein End-Zeichen um den Parameterzähler zurückzusetzen (CR-LF z.B.)

Der Haken dabei ist halt, für nen Integer kanns dann mal locker 5 Zeichen werden um 2 Bytes zu übertragen.

Bei sagen wir mal 20 Parametern die er übertragen möchte sind das dann 100 Zeichen plus 20 Trenner, also 120 Zeichen.
8 Bit, plus Start, plus Stopbit sind dann 1200 Baud mal 10, weil ja alle 100ms sind das dann Minimum 12000 Baud/s, die er erreichen muss.

oder andersrum 19200 Baud / 1200 = 16
1/16 = 0,0625 -> 62,5ms bräuchte in dem Falle bei 19200 die Übertragung mindestens. 4800 und 9600 kannst Du ergo schonmal abhaken.