fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Salto desde una int...
 
Avisos
Vaciar todo

Salto desde una interrupcion a una parte de programa

3 Respuestas
3 Usuarios
0 Reactions
1,839 Visitas
vcs
Respuestas: 114
 vcs
Topic starter
(@vcs)
Estimable Member
Registrado: hace 18 años

Buenos dias

Un dia mas, una duda más, estoy haciendo un programilla en el que tengo programada una interrupcion externa, el tema es que cuando se ejecute esa interrupcion quiero hacer un salto a un area de programa concreta y continuar desde alli, es decir poder controlar el retorno de la interrupcion y romper de esta manera la secuencia de programa, he intentado poner en el codigo de la interrupcion un goto inicio; donde inicio esta definido en el cuerpo del programa pero dá errores y no me permite hacerlo ¿se os ocurre algo? porque esto mismo si lo meto en la misma secuencia de programa si funciona, es como si al trabajar en la interrupcion no permita usar el goto.

Para haceros una idea lo que hago es:

imaginaros un programa que tiene dos bucles y se ejecutara uno u otro dependiendo de la condiciones, los bucles tardan en ser ejecutados, y a mi me interesa que si estoy en un bucle y sucede la interrupcion, hago una serie de comprobaciones y modificaciones en la interrupcion y aparte quiero comenzar de nuevo a chekar las condicion,

O dicho de otra forma si estoy en bucle y se produce una interrupcion quiero salir del bucle sin terminar el procesa que estaba haciendo porque precisamente lo que debe de hacer la interrupcion es abortar ese proceso, y si pongo condiciones del tipo mientras se cumpla eso o si se cumple esto al menos hasta que no he terminado todo el codigo dentro de las condiciones no se aborta.

Ya leí por ahí que en CCS no se usa el goto porque hay problemas de pila y tal pero esque no se me ocurre otra forma de hacerlo 😳

Responder
2 respuestas
luison
Respuestas: 495
(@luison)
Reputable Member
Registrado: hace 17 años

Hombre, hacer lo que estás intentando hacer, hablando desde el punto de vista de la programación, es un poco chapucilla, osea, el código de atención de la interrupción debe ser SUPER escaso, apenas 15-20 líneas, vamos eso es lo que se enseña 😳 .
Puedes hacer varias cosas;

1.- cuando se guarda el estado del proceso en el que se estaba antes de atender la interrupción lo "falseas" para que vuelva al punto que te interesa. (chapucilla también)
2.- Siempre que ocurra tal interrupción "olvidar" lo que estaba haciendo y volver a un punto donde se haga el bucle que te interesa y luego empiece de nuevo el que estaba haciendo o lo que tú quieras (esa sería una solución "elegante").

Tengo más soluciones, lo que pasa es que no sé hasta qué nivel baja CSS hasta ensamblador, y si te deja cambiar ciertos registros, pero vamos, se "debería" de poder hacer sin ningún problema.

Responder
_jm_
Respuestas: 961
 JM
(@_jm_)
Prominent Member
Registrado: hace 19 años

Debería funcionarte, cuando la interrupción salta el bit GIE se deshabilita y el flag de interrupción se activa, dentro de la interrupción debes de limpiar su flag para que pueda volver a saltar, y al salir de la interrupción se habilita el bit GIE volviendo a tener otra vez las interrupciones activas. Si sales por otro camino distinto del normal como el GOTO debes de encargarte de poner este bit GIE a 1, está en el registro INTCON.

Puedes probar a esbribir el código de la interrupción en ensamblador a ver si te deja, la longitud no es problema, lo único que has de tener en cuenta con las interrupciones en los pics son las prioridades y la pila.

Yo el ccs no lo uso, uso el de microchip y tb me hace cosas sin sentido para mi de vez en cuando :/,

No sé si te deja escribir en la pila alguna dirección mediante push, si es así puedes meter la dirección de programa que te interese para que al salir de la interrupción vuelva aquí en lugar de a la dirección desde que ha saltado.

Responder
Compartir: