TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micronet3 en 08 de Octubre de 2009, 13:36:06
-
hola, amigos una consulta saben, en el programa que tengo para comunicacion serial pic-pc me sale el siguiente warning, alguien sabe que significa porfa este warning?
gracias, seguire buscando una solucion para esto.
Interrupts disabled during call to prevent re-entrancy: (Usart_Activa_rx_nodo)
-
tienes algun delay dentro de la interrupcion?
-
no amigo, ningun delay, lo que si hay es comparaciones de variables.
-
llamas alguna subrutina pequeñita dentro de la interrupcion???
Tal vez esa comparación utilice muchos ciclos , tuve muchisimos problemas para quitar ese warning y me dejara de desactivar las interrupciones.
Yo no tenia delay , pero si llamaba una rutina que solo ponia a 0 un pin.Y como esa rutina la ocupaba afuera de la interrupcion,me mandaba ese warning , una cosa extraña.
Si puedes cuelga tu programa.
-
haz uso de banderas dentro de la interrupcion para salir rapidamente de ella y en el main procesas lo q necesitas
-
pues si amigo llamo a una funcion que esta fuera de la interrupcion
esta es la funcion que llamo cuando estoy dentro de la interrupcion del timer1
void enviarColor(int nombre,int pos)
{
char posx[4];
itoa(pos,10,posx);
USART_activa_tx_nodo();
fputc(id_esclavo[nombre++],nodo);
fputc(id_esclavo[nombre],nodo);
fputc('3',nodo);
fputc('p',nodo);
fputc('s',nodo);
fputc(posx[0],nodo);
fputc(posx[1],nodo);
fputc(posx[2],nodo);
fputc(13,nodo);
USART_activa_rx_nodo();
}
gracias, si estoy utilizando banderas para salir lo mas rapido posible de la interrupcion
-
Por los fputs , se me hace demasiado dentro de la interrupcion.Supongo que eso tienes que enviar cada X tiempo.
Que interrupciones tienes activadas?
-
exacto en la interrupcion del timer1 estoy comparando la hora, y de acuerdo a una hora prefijada envio una orden.
tengo habilitadas tres interrupciones
#int_TIMER1
#int_EXT2
#INT_RDA
Bueno en esto tambien creo que estoy haciendo un desperdicio de recursos ya que todo el tiempo estoy comparando la hora del relog(ds1307) y la que he grabado para que se active a esa hora.
-
Prueba quitando la rutina para ir descartando la fuente de ese warning.
Asi fue como yo logre salir de ese enredo.
-
Ahora entiendo cuando dijistes que utilizara flag para salir rapidamente de la rutina de interrupcion, pues habia interpretado mal. con esto he solucionado mi problema ya no aparecen los warning, todo el codigo lo he puesto fuera de la rutina de interrupcion.
para ejecutar estas rutinas utilizo los flag que estan en la rutina de interrupcion del timer1.
problema solucionado gracias a todos