Hola a todos, a ver si podéis echarme una mano con esto, porque me estoy volviendo loco.
Estoy recibiendo datos por el puerto serie asíncrono. Estoy en un pic 18F4620 programando en C del compilador CSS. Durante los últimos días mi rutina funcionaba perfectamente, y sin haber tocado nada de la recepción, ha dejado de funcionar misteriosamente.
Simplemente utilizo la interrupción generada al recibir un dato en el puerto serie, y lo almaceno en un Buffer para tratarlo posteriormente y no perder ningún dato:
Mas tarde llamo a la función ExtraeBuffer, que me devuelve el primer elemento del buffer, y desplaza los elementos de este para que se comporte como una cola FIFO:
Pues... ha dejado de funcionar. Ahora cuando le envio un valor por el puerto serie, si pongo un printf dentro de la rutina de interrupcion, leo el valor correcto. Tras almacenarlo en el Buffer e incrementar LlenadoBuffer, si hago printf(Buffer[LlenadoBuffer-1]) sigo leyendo el valor correcto, señal de que se ha almacenado bien en el buffer...
Sin embargo cuando llego a la función ExtraeBuffer, me saca el valor que le da la gana (curiosamente siempre los mismos, eso sí: 30, 5F, 00, 00, 20... y luego parece que se le antoja empezar a guardarlos bien, aunque se me cuelga el sistema y deja de recibir datos tras recibir 3 más).
Gracias de antemano y perdonad si esto iba en programación en lugar de microcontroladores, que es mi primera vez y no lo tenía del todo claro.
Estoy recibiendo datos por el puerto serie asíncrono. Estoy en un pic 18F4620 programando en C del compilador CSS. Durante los últimos días mi rutina funcionaba perfectamente, y sin haber tocado nada de la recepción, ha dejado de funcionar misteriosamente.
Simplemente utilizo la interrupción generada al recibir un dato en el puerto serie, y lo almaceno en un Buffer para tratarlo posteriormente y no perder ningún dato:
Código:
#INT_RDA
void rda_isr ()
{
Buffer[LlenadoBuffer] = getc();
LlenadoBuffer++;
}
Mas tarde llamo a la función ExtraeBuffer, que me devuelve el primer elemento del buffer, y desplaza los elementos de este para que se comporte como una cola FIFO:
Código:
int ExtraeBuffer () // Es un sistema FIFO
{
aux = Buffer[0];
printf("Recibido %x\r\n", Buffer[0]);
LlenadoBuffer--;
for (i = 1; i < LlenadoBuffer; i++)
{
buffer[i] = buffer[i+1];
}
return aux;
}
Pues... ha dejado de funcionar. Ahora cuando le envio un valor por el puerto serie, si pongo un printf dentro de la rutina de interrupcion, leo el valor correcto. Tras almacenarlo en el Buffer e incrementar LlenadoBuffer, si hago printf(Buffer[LlenadoBuffer-1]) sigo leyendo el valor correcto, señal de que se ha almacenado bien en el buffer...
Sin embargo cuando llego a la función ExtraeBuffer, me saca el valor que le da la gana (curiosamente siempre los mismos, eso sí: 30, 5F, 00, 00, 20... y luego parece que se le antoja empezar a guardarlos bien, aunque se me cuelga el sistema y deja de recibir datos tras recibir 3 más).
Gracias de antemano y perdonad si esto iba en programación en lugar de microcontroladores, que es mi primera vez y no lo tenía del todo claro.