Autor Tema: Problema Interrupciones  (Leído 1819 veces)

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

Desconectado _CMaGNo_

  • PIC10
  • *
  • Mensajes: 27
Problema Interrupciones
« en: 29 de Mayo de 2006, 16:51:17 »
Hola a todos. Tengo un problema con un programa en CCS C que maneja interrupciones. El programa es algo parecido a lo siguiente:

#int_TIMER1                // Timer1 interrupt
FuncionIntTImer1();
}

void main() {

initTimer1();   // Funcion para inicializar Timer1

do {              // Ciclo principal

// Intrucciones del ciclo principal

} while (TRUE);
}

El hecho es el programa funciona bien, se queda en el ciclo principal infinitamente hasta que ocurre la interrupcion por desbordamiento del Timer1 y se llama a la funcion que en este caso llame FuncionIntTimer1() que a su vez llama a otras funciones. Despues que esto ocurre el programa no retorna al ciclo principal y en las funciones que llama FuncionIntTimer1() no hay ningun ciclo infinito. No se si me explique bien.

Creo que debe tener algo que ver con el vector de interrupciones ... pero no se como manejar eso en C.

Gracias de antemano y disculpen el enredo  :D

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Problema Interrupciones
« Respuesta #1 en: 29 de Mayo de 2006, 16:54:36 »
La pila de los pic es muy limitada, creo recordar que solo admite 3 o 4 llamadas a funciones (no recuerdo cuantas son exactamente, hay que mirar el tamaño de la pila [stack]), seguramente estes sobrepasando el número de llamdas. Como recomendación es imprescindible poner el menor número posible de instrucciones en la interrupción y tratar los datos en el bucle principal (bucle while del main).

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 _CMaGNo_

  • PIC10
  • *
  • Mensajes: 27
Re: Problema Interrupciones
« Respuesta #2 en: 29 de Mayo de 2006, 17:09:49 »
Si jfh900, creo que por ahi es la cosa. Estoy usando un Pic16F877A, en la interrupcion solo llamo a una funcion y esta a su vez a otras, lo cual es casi que asbsolutamente necesario, ya que si quito esos llamados tendria que hacer funciones con codigo redundante. Lo otro es que en el ciclo de la funcion main solo llamo a 1 funcion.

Se me ocurre como alternativa usar funciones "En linea" con la directiva #INLINE. Nunca lo he manejado, solo he leido algo sobre eso.

Si alguien puede darme una ayuda con eso o con otra alternativa, estaría muy agradecido.

PD: El código del programa es extenso, asi que no se que tan conveniente sea usar la directiva #INLINE. Gracias

Desconectado _CMaGNo_

  • PIC10
  • *
  • Mensajes: 27
Re: Problema Interrupciones
« Respuesta #3 en: 29 de Mayo de 2006, 18:12:52 »
Pues ya he intentado con la directiva #INLINE en todas las funciones que llamo y tampoco funciona.

Alguna sugerencia?

Desconectado _CMaGNo_

  • PIC10
  • *
  • Mensajes: 27
Re: Problema Interrupciones
« Respuesta #4 en: 29 de Mayo de 2006, 19:20:07 »
Finalmente he descubierto el origen del problema, lo cual me deja aun mas desconcertado. Resulta que todo funciona muy bien hasta que llamo a la funcion setup_ccp1 ya sea para activar el modo PWM o para desactivarlo. Despues de eso ya no vuelve al ciclo de la funcion main.

Alguien sabe por que?  :?

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Problema Interrupciones
« Respuesta #5 en: 29 de Mayo de 2006, 19:21:52 »
Por que no posteas el código. Sin mas datos no podemos hacer nada.

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 _CMaGNo_

  • PIC10
  • *
  • Mensajes: 27
Re: Problema Interrupciones
« Respuesta #6 en: 29 de Mayo de 2006, 19:35:51 »
OK, tienes razon. El problema es que el codigo es muy largo ... voy a tratar de hacer una version "lite" con lo escencial

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Problema Interrupciones
« Respuesta #7 en: 29 de Mayo de 2006, 19:39:36 »
Ponlo en un fichero Zip.

Saludos
* 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