Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





interrupción a interrupción

Iniciado por ZüNdFoLGe, 12 de Diciembre de 2006, 06:06:22 PM

« anterior - próximo »

ZüNdFoLGe

en una máquina no dedicada es posible que durante una interrupción ocurra una interrupción a la anterior ??? por ejemplo:

#define DUR 10

int t;

...
void tiempo ( ) { t++; }
...
void tarea ( ) {
  t = 0;
  while(t < DUR); // espero al clock DUR períodos
  // aca irian otras cosas, habilitadas por el período establecido
  ...
}
...

int main ( ) {
  t = 0;
  return 0;
}


entonces si interrumpe tarea( ) queda esperando interrupciones de
tiempo( )... pero considerando que esto pueda ocurrir, entonces podría pasar que en vez de que interrumpa tiempo ( ) vuelva a interrumpir tarea ( ) , considerando que una interrupcion interrumpe a otra...y si pasa esto último, la máquina no funciona, a mi entender.... Cómo es esto ?

swapd0

Cuando se genera una interrupcion, estas se deshabilitan, no puedes recibir otra hasta que no termines. Asi que una interrupcion no puede interrumpir a otra. Por eso el codigo de una interrupcion debe ser lo mas corto posible.

Si programases en ensamblador, cuando terminas una interrupcion debes bajar el bit de esta, para poder recibir nuevas interrupciones.

MrK

se puede saber la maquina? es que cada procesador es un mundo... (por ejemplo con el spectrum, si tardabas menos de nosecuantos ciclos habia un retrigger de la interrupcion y volvia a entrar :)
En algunas maquinas hay interrupciones enmascarables y no enmascarables , prioridades de interrupciones, etc... Lo mas practico siempre es irse al datasheet del procesador en cuestion, y mirar alli.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.