Buenas, dado que este ejercicio no lo pude hacer dentro de los 30 min y me quedó
una solución que me dejó bastante duda, la comparto para compararla con algún otro.
void main( ) {
char dato_inicio;
char dato_actual;
char entrada;
char salida;
int contador = 0;
boolean fin_paquete;
while (true) {
fin_paquete = false;
while (! fin_paquete) {
if (contador == 0) {
entrada = IN(entrada_bits)
if (entrada & 0x02) {
dato_inicio = entrada & 0x01;
contador++;
}
}
entrada = IN(entrada_bits);
if (entrada & 0x02) {
dato_actual = entrada & 0x01;
if (dato_actual == dato_inicio) {
contador++;
} else {
fin_paquete = true;
}
}
} // end while
if (dato_inicio & 0x01) { // paquete de 1s
salida = contador | 0x0080
} else { // paquete de 0s
salida = contador & 0xFFEF
}OUT(salida_rle, salida);
dato_inicio = dato_actual;
contador = 1;
}