Autor Tema: interrupciones  (Leído 3923 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado championz

  • PIC16
  • ***
  • Mensajes: 127
interrupciones
« en: 25 de Abril de 2007, 06:02:03 »
Buenas! les hago una pregunta... las interrupciones siguen andando si el procesador esta "trabado"? es decir... si por alguna falla el procesador se "congela" haciendo un proceso... las interrupciones como el timer0 siguen funcionando? o se congelan todos los procesos incluyendo a las interrupciones?

gracias


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: interrupciones
« Respuesta #1 en: 25 de Abril de 2007, 08:42:45 »
Buenas! les hago una pregunta... las interrupciones siguen andando si el procesador esta "trabado"? es decir... si por alguna falla el procesador se "congela" haciendo un proceso... las interrupciones como el timer0 siguen funcionando? o se congelan todos los procesos incluyendo a las interrupciones?

Las interrupciones son interrupciones.  Mientras el PIC esté corriendo como dios manda, haciendo un cálculo o no... se ejecutarán mientras estén habilitadas y el GIE/PIE también estén habilitados.

En cuanto a lo de si el "procesador se congela", no entendí bien a qué te refieres.  A si está directamente su electrónica se colgó? o a si está haciendo un cálculo complejo en un bucle.

Digo esto porque en las PCs el concepto de "se me colgó la PC" es muy extenso y en su gran mayoría, no es que realmente se colgó, sino que algún software está haciendo un cálculo en un bucle del cual nunca sale, o esperando una respuesta que nunca llega, etc.  En definitiva son errores 'de software' pero de ninguna manera el microprocesador deja de funcionar.  En esos casos, si el sistema operativo es otro, se pudiera lograr que se salga de ese error.  De hecho en su gran mayoría se solucionan haciendo un CTRL-ALT-DELETE (o SUPR) , lo cual significa que el micro está muy vivo y solamente es el sistema operativo el que aún no recuperó control de la aplicación.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado fastyx

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 353
Re: interrupciones
« Respuesta #2 en: 26 de Abril de 2007, 14:37:45 »
me sumo a lo que dice maunix, y tomé la buena costumbre de agregarle un time out al soft si hay una funcion que la veo media comprometida.

esto es especialmente util si lo que esta esperando es algun motor , o un mecanismo que no logra llegar a lo que pidio el soft , en cuyo caso la forma general podría ser:

        si pasados tantos conteos de una variable( trato de no usar delay) , no hiciste X ; desconecta ---> mensaje de error----> espera accion operario

Desconectado Dancrazy

  • PIC16
  • ***
  • Mensajes: 134
Re: interrupciones
« Respuesta #3 en: 26 de Abril de 2007, 15:51:40 »
Tambien no olvidemos a nuestro amigo el Watchdog timer (o perro guardian) para casos de emergencia. si el micro se queda pegado en un calculo erroneo que accidentelmente se vuelve infinito luego de cierto tiempo (especificado por nosotros) el watchdog aplica un reset...
y si, teoricamente la interupcion del timer deberia poner en stand by (en espera) a cualquier proceso (colgado o no) para realizar algo... puedes tomarlo como un time out (o tiempo de espera maximo admisible).
Daniel 
Caracas, Venezuela 

-----------------

Desconectado championz

  • PIC16
  • ***
  • Mensajes: 127
Re: interrupciones
« Respuesta #4 en: 30 de Abril de 2007, 02:45:15 »
mi desarrollo es un circuito que no usa variables externas ni nada parecido... simplemente hace calculos (en su mayoria calculos faciles, lecturas desde eeprom, etc)

ahora he implementado un sistema de watchdog. La instruccion de restart_wdt(); esta dento de una interrupcion del timer0. Es decir... cada cierto tiempo el timer0 desborda, se hace una interrupcion y la misma pone a cero el WDT .

Lo que quiero saber es si esta logica es correcta... es decir... si es un buen metodo para hacer el restart_wdt(); o seria mejor ponerlo en alguna funcion dentro del main?

muchas gracias!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: interrupciones
« Respuesta #5 en: 30 de Abril de 2007, 08:41:44 »
Lo que quiero saber es si esta logica es correcta... es decir... si es un buen metodo para hacer el restart_wdt(); o seria mejor ponerlo en alguna funcion dentro del main?

Lo más correcto, a mi modo de verlo, es que tus funciones no demoren 'mucho' precisamente porque esto es peligroso como te habrás dado cuenta.  Yo uso el reinicio del WDT en el bucle principal del programa, ni más ni menos. 

Tampoco es bueno poner un clrwdt (esta es la instrucción en assembler) a cada rato en el pic para que no se resetee, mucho menos usar un timer con interrupción para que se reinicie el WDT en dicha rutina porque estamos haciendo 2 veces lo mismo.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado championz

  • PIC16
  • ***
  • Mensajes: 127
Re: interrupciones
« Respuesta #6 en: 30 de Abril de 2007, 13:12:24 »
gracias maunix por tu respuesta, pero no comprendo, porque estaria haciendo 2 veces lo mismo? Yo estoy usando el timer0 para otro proposito, pero tambien en el mismo he colocado la instruccion clear watch dog. Porque estaria mal usar esta instruccion en una interrupcion del timer?

gracias!


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: interrupciones
« Respuesta #7 en: 02 de Mayo de 2007, 09:34:13 »
gracias maunix por tu respuesta, pero no comprendo, porque estaria haciendo 2 veces lo mismo? Yo estoy usando el timer0 para otro proposito, pero tambien en el mismo he colocado la instruccion clear watch dog. Porque estaria mal usar esta instruccion en una interrupcion del timer?

A mi modo de verlo, no tiene sentido hacer un clrwdt en una interrupción, ya que puede suceder que el pic no es que está muerto simplemente se perdió en alguna parte del programa (la verdad, uno nunca sabe a ciencia cierta si el pic realmente se colgó y si microelectrónica no responde para nada, o si está ejecutando una sección de código diferente).

En caso de que se perdió en una parte del programa, la interrupción seguirá saltando y por ende reseteando el WDT.

Resultado, tu pic anda mal sin embargo el WDT nunca lo reinicia.

Por eso, opino, a mi modo de verlo, que no es buena idea hacer un reset del WDT en una interrupción.


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: interrupciones
« Respuesta #8 en: 02 de Mayo de 2007, 09:56:42 »
Cuando el WatchDog se dispara resetea el micro independientemente de lo que esté haciendo, con lo cual si esta dentro de una interrupción el programa comienza desde "0" e inicializa todos los registros. Esto es importante, por que dentro de una interrupción el micro también se puede quedar colgado y de esta forma salir del bucle sin fín. Por último decir que las posiciones donde se deben de colocar los reset del WDT, se deben de medir para que coincidan poco antes de que salte el mismo y poner los estrictamente necesarios para borralo, cuantos mas se pongan mas probabilidades hay que de que haya uno dentro de un bucle infinito y entonces no sirva para nada el WDT.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado FabiPIC

  • PIC10
  • *
  • Mensajes: 7
Re: interrupciones
« Respuesta #9 en: 26 de Mayo de 2007, 15:34:55 »
Buenas! les hago una pregunta... las interrupciones siguen andando si el procesador esta "trabado"? es decir... si por alguna falla el procesador se "congela" haciendo un proceso... las interrupciones como el timer0 siguen funcionando? o se congelan todos los procesos incluyendo a las interrupciones?

gracias



Hola, mira mi profesor de laboratorio de microprocontroladores 2 me explico que las PICs utilizan microprocesadores "dedicados" a ciertas funciones, por ejemplo es el caso del delay, ya que mientras lo utilizas, las interrupciones no causan efecto, con lo cual si utilizas interrupciones trata de usar retardo de tiempo generados por los timer, o contadores por software, asi tus interrupciones no se te cuelgan esperando que el micro termine el delay, saludos

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: interrupciones
« Respuesta #10 en: 28 de Mayo de 2007, 19:08:22 »
No tiene sentido utilizafr delay() y de conjunto utilizar un timer para resetar el WD, si piensas hacer eso simplemente utiliza el Timer para hacer la demora que te de la gana, de forma eficiente y el método de maunix, reseta el WD, después de la demora con TIMER.

Por qué tanto lío con eso si tenemos además la posibilidad de utilizar un RTOS, yo la verdad ya me he olvidado de semejantes rompederos de cabeza, me romí una vez el coco para aprender a utilizar el RTOS y con eso le doy candela a cuanta jodienda de temporización se me presente.

un saludo
Reinier


 

anything