Autor Tema: Variables reservadas para strings sea alteran en cada recepción serial  (Leído 1982 veces)

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

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
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
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #1 en: 15 de Mayo de 2010, 15:29:22 »
Código?

Será que de pronto el contador del buffer se sobrepasa?

Saludos
El papel lo aguanta todo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #2 en: 15 de Mayo de 2010, 16:00:03 »
Lo suyo sería, como dice MLO, poder darle un vistazo a tu código, es la única forma de poder decirte algo.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #3 en: 15 de Mayo de 2010, 16:13:54 »
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..
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #4 en: 15 de Mayo de 2010, 16:18:12 »
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.
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #5 en: 15 de Mayo de 2010, 16:24:19 »
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
El papel lo aguanta todo

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #6 en: 15 de Mayo de 2010, 16:31:22 »
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  ;-)
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.

Desconectado willie_rosario_salsa

  • PIC12
  • **
  • Mensajes: 75
Re: Variables reservadas para strings sea alteran en cada recepción serial
« Respuesta #7 en: 15 de Mayo de 2010, 22:04:18 »
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.
"Es chévere ser grande, pero... Más grande es ser chévere." --- Héctor Lavoe.


 

anything