TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Ranculche en 03 de Diciembre de 2015, 15:47:44

Título: Go to dentro de una interrupcion
Publicado por: Ranculche en 03 de Diciembre de 2015, 15:47:44
Hola a todos, tengo un problema, necesito recibir datos por puerto serie, y en que caso de que lleguen, procesarlos inmediatamente. El segundo problema, es que hay muchas funciones de un SIM900 que necesita muchos tiempos de retardo, y si recibo datos en ese periodo: O bien pierdo datos, o pongo un go to en la interrup y los proceso, pero dejo de hacer lo que estaba haciendo, a parte de ello, no se si poner un go to dentro de una interrupcion es saludable. Que opinan? Espero que me hayan entendido.   

Saludos.-
Título: Re:Go to dentro de una interrupcion
Publicado por: PalitroqueZ en 03 de Diciembre de 2015, 17:14:26
nada saludable es un salto dentro de una interrupción.  :mrgreen:
Título: Re:Go to dentro de una interrupcion
Publicado por: RedPic en 03 de Diciembre de 2015, 17:47:05
nada saludable es un salto dentro de una interrupción.  :mrgreen:

Amen. Y además un GOTO no debería ser saludable en ningún caso. Haciendo uso de él es muy fácil caer en la programación "spaghetti" en la que si quieres seguir el hilo de ejecución terminas liado y no tienes claro qué se ejecuta antés y qué después.

Es mucho mejor utilizar un flag, una variable de un solo bit que lo levantas en la interrupción y lo tratas fuera de ella, volviendo a poner el flag a bajo. Es mucho más saludable para el programa y para tus nervios  :mrgreen:
Título: Re:Go to dentro de una interrupcion
Publicado por: KILLERJC en 03 de Diciembre de 2015, 20:59:38
Si tu interrupcion tarda demasiado entonces esta MAL. La interrupcion debe ser rapida y salir, de esa forma da a lugar a otras interrupciones. Un GOTO, un CALL es posible usarlo en una interrupcion no hay ningun problema por ello. El tema es que deberias pensar la interrupcion como un programa aparte de la del micro. Y que esa se deberia ejecutar rapidamente siempre. Sin delays, sin funciones que consuman mucho tiempo,etc
Título: Re:Go to dentro de una interrupcion
Publicado por: RICHI777 en 03 de Diciembre de 2015, 23:29:18
Coincido con los comentarios anteriores, en la interrupción debes guardar el dato recibido y luego procesar en el loop principal. Aunque esta demonizado el uso del goto es algunas situaciones controladas es la solución mas elegante y que consume menos recursos.

Saludos !