TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: willie_rosario_salsa en 15 de Mayo de 2010, 15:27:48
-
Hola a todos,
Tengo un problema en un programa que he elaborado para recepcion de datos seriales (por int_ext y por int_rda).
Tengo 3 cadenas buff1[12] , buff2[12] y modem_id[S01.M1] pero al recibir la segunda trama serie de un momento a otro los valores en estas variables se alteran y según la programación esto no debe ocurrir...
Solicito a ustedes lo sexpertos una mano para poder identificar el error y poder buscarle una solución, no sé que pasa :? :? :? por eso no sé como empezar buscando el error :5].
Saludos y gracias una vez más..
Con salsa,
willie
-
Código?
Será que de pronto el contador del buffer se sobrepasa?
Saludos
-
Lo suyo sería, como dice MLO, poder darle un vistazo a tu código, es la única forma de poder decirte algo. :mrgreen:
-
if(!kbhit())
{
fgets(buff1,com_soft); //reciber por el com software y guarda en buff1
output_high(led);
i++;
switch(i){
case 1: strcpy(buff2,buff1); //si es la primera vez lo copia en buff2
break;
case 2: if(strcmp(buff1,buff2)==0) //si confirma que es el mismo dato dentro de los proximos 500ms imprime por pto. harware
{
output_high(buzzer);
fprintf(com_hw,"%s%s\n\r", id, buff2);
memset(buff2, '0', sizeof(buff2));
var1=0;
var2=0;
var3=0;
output_low(buzzer);
i=0;
}
break;
}
}
Esta es la interrupción por software, cuando entra a la misma los 3 strings tienen correctamente cargados los datos según el programa.
Pero al hacer el strcpy para pasar los caracteres del buff1 al buff2, ambos se alteran o sino toman valores desplazados.
De verdad no sé por donde estaría el error... Adjunto una imagen si de pronto no me hago entender...
Gracias por tu tiempo MLO..
-
Perdón, olvidé poner la imagen...
La adjunto como archivo porque no supe como pegarla en este mismo espacio y pueda ser visible sin descargarla.
-
Hola.
Bueno ... yo no uso la función fgets() si no que guardo byte a byte .....
Se ve bien el código en la parte del case 1:, pero es recomendable no demorarse tanto en la interrupción. Pon un flag en la interrupción y las comparaciones hazlas en el programa principal.
Saludos
-
Hola.
Bueno ... yo no uso la función fgets() si no que guardo byte a byte .....
Se ve bien el código en la parte del case 1:, pero es recomendable no demorarse tanto en la interrupción. Pon un flag en la interrupción y las comparaciones hazlas en el programa principal.
Saludos
Sí en realidad sí consideré esto, pero debido a que este micro solo coge los 10 bytes de un lector RFID y además solo demora 155 us toda la interrupción, creí conveniente hacerlo aqui ya que en el main no hago nada más que un parpadeo de status ok del micro...
Adjunté la imagen, y como verán el buff2 y id se alteraron sin razón...
Plis su ayuda gracias ;-)
-
Según he estado leyendo :shock: lo referente a mi problema, al parecer los valores en la RAM se están alterando de acuerdo a la ejecucuón de cada función.
Dicho de otra manera, quisera saber de qué forma puedo reservar los bytes que he destinado para mis strings, de tal manera que no se alteren durante el proceso de interrupción expuesto más arriba.
Alguna idea o algún tip con que me puedan ayudar a identificar el error :? :? :? y poder buscar información al respecto.
Mil gracias por su ayuda.