Buenas, resolvi este ejercicio de una forma distinta a la solución propuesta, la diferencia esta en donde se escribió la lógica y otros detalles que marcaré en rojo para ver si estan bien.
//aca van los define y creación de variables etc
int obtenerDistancia(){
encontre=FALSE;
//instalo interrupciones
enable();
tics = 0;
OUT(PING,128);
WHILE (!encontre || tics < tics_max)
IF (encontre)
return c*tics*1000/2
ELSE
return -1
}
void interruption timer(){
IF(IN(ECHO)&128)
encontre=FALSE;
ELSE
tics++
}
*Porque en la solución no se instalan las interrupciones?
* La solución plantea que tics se inicialice despues de hacer el OUT(PING,128), eso es porque escribir en E/S demora y al inicializar tics antes puede que el timer empiece a contar sin que todavia se halla realizado la escritura?
*La solución escribe la lógica en timer() y esta le avisa cuando encontro el objeto o se paso del tiempo, eso es así porque respeta mejor el concepto de "interrupción"?
*Por último, agradeszco si pueden haceme notar algunos otros errores en la solución.
Muchas gracias.
Saludos.