Concordo con l'ultimo suggerimento, anche se preferirei un metodo più veloce che, legge un byte alla volta.
Il programma diventerebbe più complicato, ma così esprimibile
Leggo la seriale (1 carattere alla viltà, senza controllo sul loro numero)
Se esso corrisponde a separatore una booleana cambia di stato (usato come selettore tra 2)
Se non corrisponde a separatore, ma a cifra (quindi il separatore non deve essere una cifra) il numero contenuto in un array di 2 int di lettura (indice e valore) nel posto corrispondente al valore della boolean, aumenta (lettura[boolean]=lettura[boolean]*10+rx-'0')
Se non corrisponde a cifra si fa un altro test, che rende più complicata la comunicazione: se coincide con un carattere di stop
Se si allora array [lettura[0]]=lettura[1] e boolean=0. Fine lettura
Se no... Errore
Vantaggio: il programma continua ad agire anche in presenza di seriale