Entonces el problema no es recibir muchos caracteres, sino el que no posees el tiempo para revisarlo..
Si vos estas esperando una trama de forma exacta, entonces mejor es buscar otra alternativa, te voy a hacer un pseudocodigo.
Supongamos que recibimos el texto: ATM+123,2321,"Aca texto SMS"
Y vos esperas el ATM+123, y queres guardar el '2321,"Aca texto SMS"'
Entonces en ves de guardar todo, y comenzar a revisar todos los caracteres, cada ves que recibis uno. lo haces asi, cada ves que recibis una letra tenes algo asi:
Estado 0:
( Recibi una A ? )
Si-> Estado = 1
No-> Salgo
Estado 1:
( Recibi una T ? )
Si-> Estado = 2
No-> Estado = 0
Estado 2:
( Recibi una M ? )
Si-> Estado = 3
No-> Estado = 0Lo podes implementar de 2 formas.. una de la forma literal a como la plantee yo.
La otra es que tu varible "estado" sea tu INDICE, supongamos que tenes una tabla.
TABLA:
ADDWF PCL, F
DT "ATM+123",0x00
Comenzas con estado en 0, llega el primer caracter, pones ESTADO en W, y llamas a la tabla. La tabla te devuelve una 'A'
Comparas lo que llego con la A, si son iguales incrementas ESTADO en 1. Si NO son iguales pones estado en 0.
Ahora supongamos que recibiste una 'A' y asi fue que ESTADO termino en 1. Ahora llega un nuevo caracter. Utilizas el mismo codigo de antes.
Pones ESTADO en W, llamas a la tabla, te devuelve la 'T'. Comparas con lo que llego, si habia llegado una 'T' entonces incrementas ESTADO en 1, sino pones ESTADO a 0.
Si recibiste "ATK" por ejemplo, estado va a llegar a 2, y al momento de recibir la K va a volver a 0, por lo que comienza todo de nuevo.
Si prestante atencion, el codigo es el mismo en cada letra, O sea con ese codigo podes hacer cualqueir comparacion. letra a letra, y no todo junto.
¿Como determino cuando termino de comparar y cuando empezar a guardar?
Al crear un DT "ATM+123",0x00 le agrego un 0x00 al final. Esto me indica que si llego a ese punto, todo lo que sigue debe ser guardado.
Ahora porque decís que me conviene C y no ASM???
Es cierto que C ocupa mucho mas espacio que ASM, pero ya para cosas un poco mas complejas, las cosas se hacen mucho mas rapido.
Es bueno que poseas una base de ASM a mi parecer, pero te sugiero que no te quedes por siempre con ASM, y pases a C cuando puedas.