Autor Tema: Error al comparar dos strings con strcmp  (Leído 42604 veces)

0 Usuarios y 7 Visitantes están viendo este tema.

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #195 en: 22 de Enero de 2011, 11:42:23 »
Pero entonces no puedo tener todos los buffers declarados y se van a colar caracteres como me pasaba ayer..

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #196 en: 22 de Enero de 2011, 12:03:12 »
  Para evitar lo de los caracteres "raros" se puede recurrir a algo así....

Código: C
  1. char buffer[30];
  2. char ok[3];
  3. char indice;
  4.  
  5. /*******************************************
  6. * Primer respuesta
  7. * supongamos que se tengan que leer 10 caracteres
  8. ********************************************/
  9.  
  10. buffer[0] = getch();
  11. ......
  12. ......
  13. buffer[9] = getch();
  14. buffer[10] = '\0'; //pongo el caracter nulo para indicar fin de cadena
  15.  
  16. //eso para llenar el buffer
  17.  
  18. //ahora la conversión para la variable ok
  19.  
  20. indice = 0;
  21. while (buffer[indice] != '\0') //mientras no sea el caracter nulo, o sea mientras esté dentro de la cadena
  22. {
  23.   if ((buffer[indice] == 'O') && (buffer[indice + 1] == 'K') // evaluo así para asegurarme que la O y la K estén seguidas
  24.   {
  25.     ok[0] = O;
  26.     ok[1] = K;
  27.   }
  28.   indice++;
  29. }
  30. ok[2] = '\0';
  31.  
  32. // después vendría el uso de strcmp y todo lo que esté asociado con él.
  33.  
  34.  
  35. /*******************************************
  36. * Primer respuesta
  37. * supongamos que se tengan que leer 7 caracteres
  38. ********************************************/
  39.  
  40. buffer[0] = getch();
  41. ......
  42. ......
  43. buffer[6] = getch();
  44. buffer[7] = '\0'; //pongo el caracter nulo para indicar fin de cadena
  45.  
  46. //eso para llenar el buffer
  47.  
  48. //ahora la conversión para la variable ok
  49.  
  50. indice = 0;
  51. while (buffer[indice] != '\0') //mientras no sea el caracter nulo, o sea mientras esté dentro de la cadena
  52. {
  53.   if ((buffer[indice] == 'O') && (buffer[indice + 1] == 'K') // evaluo así para asegurarme que la O y la K estén seguidas
  54.   {
  55.     ok[0] = O;
  56.     ok[1] = K;
  57.   }
  58.   indice++;
  59. }
  60. ok[2] = '\0';
  61.  
  62. // y así se repite constantemente....
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #197 en: 22 de Enero de 2011, 12:06:50 »
Perdona por la insistencia pero lo que no entiendo es como se puede escribir encima de un buffer..
El proceso se hara correctamente? si uno es mas largo que otro siempre quedaran restos

Código: [Seleccionar]
//*****************************************************************************
//PRIMER COMANDO AT
//*****************************************************************************
putst ("AT"); // Desconnectar el echo.
putch ('\r');

Respuesta1[0] = getch();
Respuesta1[1] = getch();
Respuesta1[2] = getch();
Respuesta1[3] = getch();
Respuesta1[4] = getch();
Respuesta1[5] = getch();
Respuesta1[6] = getch();
Respuesta1[7] = getch();
Respuesta1[8] = getch();



while(i<9)
{
if(Respuesta1[i]=='O')
{
ok1[0]=Respuesta1[i];

}
if(Respuesta1[i]=='K')
{
ok1[1]=Respuesta1[i];
}

if(Respuesta1[i-1]=='K')
{
ok1[2]='\0';
}

i++;
}

ComandoRecibido1=ok1;
if (strcmp(ComandoRecibido1,"OK") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}







//*****************************************************************************
//SEGUNDO COMANDO AT
//*****************************************************************************

putst ("ATS0=1"); // Desconnectar el echo.
putch ('\r');

Respuesta2[0] = getch();
Respuesta2[1] = getch();
Respuesta2[2] = getch();
Respuesta2[3] = getch();
Respuesta2[4] = getch();
Respuesta2[5] = getch();
Respuesta2[6] = getch();
Respuesta2[7] = getch();
Respuesta2[8] = getch();
Respuesta2[9] = getch();
Respuesta2[10] = getch();
Respuesta2[11] = getch();
Respuesta2[12] = getch();


while(j<13) // OJO CAMBIAR ESTO DE UN COMANDO A OTRO. SINO SE QUEDA Y NO ACABA
{
if(Respuesta2[j]=='O')
{
ok2[0]=Respuesta2[j];

}
if(Respuesta2[j]=='K')
{
ok2[1]=Respuesta2[j];

}
if(Respuesta2[j-1]=='K')
{
ok2[2]='\0';
}
j++;
}
//while(1);

ComandoRecibido2=ok2;
if (strcmp(ComandoRecibido2,"OK") == 0){ // Todo a ido bien
// while(1);
LED1=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;

}

En el caso que por ejemplo el primer comando tenga 15 caracteres y el segundo tenga 12 hara que queden esos 3 alli con el valor anterior..




Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #198 en: 22 de Enero de 2011, 12:17:21 »
  Es que en C una cadena termina con el caracter nulo '\0'.
  Si yo tengo algo así....

Código: C
  1. buffer[0] = 'A';
  2. buffer[1] = 'T';
  3. buffer[2] = 'S';
  4. buffer[3] = '\0';
  5. buffer[4] = 'N';
  6. buffer[5] = 'a';
  7. buffer[6] = 'd';
  8. buffer[7] = 'a';

  en teoría la palabra que yo voy a leer será ATS porque después viene el caracter nunlo. Y sino se recurre a algo así y listo......

Código: C
  1. buffer[0] = 'A';
  2. buffer[1] = 'T';
  3. buffer[2] = 'S';
  4. buffer[3] = '\0';
  5. ....
  6. ....
  7. bufer[n] = '\0'; // y llegas hasta el final de buffer completando con el caracter nulo para que no aparezca nada raro
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #199 en: 22 de Enero de 2011, 12:18:45 »
Voy a probar entonces! Ya te voy contando!

Por cierto antes declaraste indice como char.. fue un error no?

Edito: Tambien declaro un unico puntero no?

register const char  *ComandoRecibido;
« Última modificación: 22 de Enero de 2011, 12:25:01 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #200 en: 22 de Enero de 2011, 12:25:00 »
Voy a probar entonces! Ya te voy contando!

Por cierto antes declaraste indice como char.. fue un error no?

  No, una declaración de variable char implica que va a ocupar 1 byte. No necesariamente es que se vaya a utilizar para un caracter.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #201 en: 22 de Enero de 2011, 12:34:29 »
No me funciona ahora. Te dejo como lo tengo:
Código: [Seleccionar]

#include <htc.h>
#include <stdlib.h>  // para poder usar la funcion itoa
#include <string.h>
#include <stdio.h>
#include <conio.h>


//#conio.h, e #iostream.h


 
__CONFIG (1, HS & CPUDIV4 & USBPLL & PLLDIV5 & FCMDIS & IESODIS); // Con 20 CPUDIV1
__CONFIG (2, BORDIS & WDTDIS & PWRTDIS);
__CONFIG (3, MCLRDIS); // estoy deshabilitando el pin de MasterClear, tal vez haya que habilitarlo, eso hay que probarlo
__CONFIG (4, LVPDIS &  DEBUGEN);
 
/* =================================================================================
Definitions
    ================================================================================= */
#define PORTBIT(adr, bit) ( (unsigned)(&adr)*8 + (bit) )
 
#define Idle_Low 1 // No envia datos
#define Idle_High 2 // Envia datos

#define true 1
#define false 0
 
#define BAUD  9600 // Configuramos la velocidad, tanto puede ser 19200 o de 9600 kbaud/s pero hay q cambiarlo tb en la simulacion de proteus
#define PIC_CLK      5000000
 
#define CS RB2

/* =================================================================================
Global variables 
  ================================================================================= */


static bit LED0 @ PORTBIT(PORTD, 0);
static bit LED1 @ PORTBIT(PORTD, 1);
static bit LED2 @ PORTBIT(PORTD, 2);
static bit LED3 @ PORTBIT(PORTD, 3);
char present_state = Idle_Low; // state variable
char future_state = Idle_Low; // state variable
unsigned int  valor_potenciometro;
unsigned int  valor_sensor_temperatura;
unsigned char pote_buf[6];
unsigned char sensor_buf[10];
char * valor_pote_en_texto;           // un puntero para almacenar el numero en texto
char * valor_sensor_en_texto;         // un puntero para almacenar el numero en texto
char byte_alto, byte_bajo;
unsigned char caracter_recibido;
unsigned char dummy;

int error_comando=1;

int final=1;
int prueba=1; // PRUEBA PARA SABER DONDE ESTO



/* =================================================================================
Function prototypes
  ================================================================================= */
 
void init_system (void);
void time_delay (unsigned int );
char output_logic(void);
char future_state_logic(void);
 
void setup_sensor(void);
void setup_adc(void);
void serial_setup(void);
 
void putst(const char *str);
void putch(unsigned char c);

unsigned char getch(void);
unsigned char UsartReadChar_nonstop(void);
unsigned char getch_available(void);

void clear_usart_errors(void);
 
unsigned char read_spi (void);
unsigned int read_adc(void);


unsigned char getch(void);
char * LeerRespuesta(char * mensaje);



/* =================================================================================
Main function
  ================================================================================= */
 
void main ()
{
 
 valor_potenciometro = 0;
 valor_sensor_temperatura = 0;

  LED0 = 0;
  LED1 = 0;
  LED2 = 0;
  LED3 = 0;

char indice;
register const char *ComandoIdeal = "OK";

char Respuesta[30];
char ok[3]; // ES FIJO!!
register const char  *ComandoRecibido;

/*
char Respuesta2[13];
char ok2[3]; // ES FIJO!!
register const char  *ComandoRecibido2;

char Respuesta3[15];
char ok3[3]; // ES FIJO!!
register const char  *ComandoRecibido3;

char Respuesta4[15];
char ok4[3]; // ES FIJO!!
register const char  *ComandoRecibido4;

char Respuesta5[15];
char ok5[3]; // ES FIJO!!
register const char  *ComandoRecibido5;

char Respuesta6[20];
char ok6[3]; // ES FIJO!!
register const char  *ComandoRecibido6;

char Respuesta7[11];
char ok7[3]; // ES FIJO!!
register const char  *ComandoRecibido7;

char Respuesta8[10];
char ok8[3]; // ES FIJO!!
register const char  *ComandoRecibido8;


char Respuesta9[23];
char ok9[19]; // OJO aqui son 19 caracteres + 4
register const char  *ComandoRecibido9;

char Respuesta10[21];
char ok10[17]; // OJO aqui son 19 caracteres + 4
register const char  *ComandoRecibido10;

char Respuesta11[31];
char ok11[27]; // OJO aqui son 19 caracteres + 4
register const char  *ComandoRecibido11;
*/



/*
int i=0;
int j=0;
int z=0;
int v=0;
int w=0;
int q=0;
int t=0;
int d=0;
*/
 
init_system();
setup_sensor();
setup_adc();
serial_setup();


 
/* =================================================================================
Establecer connexion con comandos AT
  ================================================================================= */



//*****************************************************************************
//PRIMER COMANDO AT
//*****************************************************************************
putst ("AT"); // Desconnectar el echo.
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]='\0';

indice=0;

indice = 0;
while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
}
ok[2] = '\0';



ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
while(1);
error_comando=1;
}


Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #202 en: 22 de Enero de 2011, 12:36:50 »
Ya funciona todo otra vez ( lo de los comandos AT) y con mucha menos memoria, si señor! hago la implementacion para leer los mensajes y no se queja del compilador.

Te queria comentar que habria que hacer un while.. porque claro los comandos se envian, el dispositivo se configura para poder ser encontrado y para poder ser connectable con los otros pero eso no te garantiza que sea al instante. Tiene que estar un rato en estado de "idle" monitorizando si le llega eso o no. Creo que una vez que viene el primer mensaje ya vienen los otros dos seguidos. Osea solo habria que hacer esto para el primero.

Te dejo el codigo aqui. Hay que hacer la funcion que lea exactamente el caracter, se te ocurre algo para no tener que hacer lo del ok[0]=='O'.. en este caso son muchos caracteres.. demasiados!

Si no hay mas remedio pues se hara pero yo pregunto a ver..

Código: [Seleccionar]
//***********************************************************//
//ESPERAR A QUE UN DISPOSITIVO SE QUIERA CONNECTAR AL NUESTRO//
//***********************************************************//     


//*****************************************************************************
//MENSAJE DE APAREJAMIENTO: "PAIR 0 008098E6A5F4" (19 caracteres) + 4 =23
//*****************************************************************************     


Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]= getch();
Respuesta[16]= getch();
Respuesta[17]= getch();
Respuesta[18]= getch();
Respuesta[19]= getch();
Respuesta[20]= getch();
Respuesta[21]= getch();
Respuesta[22]= getch();
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);


// RETOCAR ESTA FUNCION
while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    aparejamiento[0] = Respuesta[indice];
    aparejamiento[1] = Respuesta[indice + 1];
  }
  indice++;
  aparejamiento[2] = '\0';
}


//while(1);

ComandoRecibido=aparejamiento;
if (strcmp(ComandoRecibido,"PAIR 0 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}






//*****************************************************************************
//MENSAJE DE LLAMADA: "RING 008098E6A5F4 (17 caracteres)" +4 =21
//*****************************************************************************


Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]= getch();
Respuesta[16]= getch();
Respuesta[17]= getch();
Respuesta[18]= getch();
Respuesta[19]= getch();
Respuesta[20]= getch();
Respuesta[21]= '\0';
Respuesta[22]= '\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);


// RETOCAR ESTA FUNCION
while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ring[0] = Respuesta[indice];
    ring[1] = Respuesta[indice + 1];
  }
  indice++;
 ring[2] = '\0';
}


//while(1);

ComandoRecibido=ring;
if (strcmp(ComandoRecibido,"RING 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}




//*****************************************************************************
//MENSAJE DE CONEXION: CONNECT 008098E6A5F4,1101 A (27 caracteres) + 4=31
//*****************************************************************************   

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]= getch();
Respuesta[16]= getch();
Respuesta[17]= getch();
Respuesta[18]= getch();
Respuesta[19]= getch();
Respuesta[20]= getch();
Respuesta[21]= getch();
Respuesta[22]= getch();
Respuesta[23]= getch();
Respuesta[24]= getch();
Respuesta[25]= getch();
Respuesta[26]= getch();
Respuesta[27]= getch();
Respuesta[28]= getch();
Respuesta[29]= getch();
Respuesta[30]= getch();
Respuesta[31]= '\0';

indice = 0;

//while(1);


// RETOCAR ESTA FUNCION
while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    connexion[0] = Respuesta[indice];
    connexion[1] = Respuesta[indice + 1];
  }
  indice++;
 connexion[2] = '\0';
}


//while(1);

ComandoRecibido=connexion;
if (strcmp(ComandoRecibido,"CONNECT 008098E6A5F4,1101 A") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}
« Última modificación: 22 de Enero de 2011, 13:37:26 por edu1989 »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #203 en: 22 de Enero de 2011, 14:16:32 »
  Qué curioso!!! que lo hayas tenido que implementar así

Código: C
  1. Respuesta[0] = getch();
  2. Respuesta[1] = getch();
  3. Respuesta[2] = getch();
  4. Respuesta[3] = getch();
  5. Respuesta[4] = getch();
  6. Respuesta[5] = getch();
  7. Respuesta[6] = getch();
  8. Respuesta[7] = getch();
  9. Respuesta[8] = getch();
  10. Respuesta[9]=  getch();
  11. Respuesta[10]= getch();
  12. Respuesta[11]= getch();
  13. Respuesta[12]= getch();
  14. Respuesta[13]= getch();
  15. Respuesta[14]= getch();
  16. Respuesta[15]= getch();
  17. Respuesta[16]= getch();
  18. Respuesta[17]= getch();
  19. Respuesta[18]= getch();
  20. Respuesta[19]= getch();
  21. Respuesta[20]= getch();
  22. Respuesta[21]= getch();
  23. Respuesta[22]= getch();
  24. Respuesta[23]='\0';
  25. Respuesta[24]='\0';
  26. Respuesta[25]='\0';
  27. Respuesta[26]='\0';
  28. Respuesta[27]='\0';
  29. Respuesta[28]='\0';
  30. Respuesta[29]='\0';
  31. Respuesta[30]='\0';
  32. Respuesta[31]= '\0';

  Yo lo implementé de la otra forma, es decir, sin llenar todo el resto de la variable con el caracter nulo. Y me funcionó bien en la simulación.  Te adjunto 3 capturas que se corresponden con el valor que toma la variable Respuesta, justamente a tres respuestas distintas, y en todos los casos la variable ok toma el valor adecuado y la comparación con strcmp también funciona bien.
  En el primer caso sí está lleno de caracteres nulos porque es la primer respuesta. En el segundo también porque la segunda respuesta es más larga que la primera. En el tercer caso la respuesta es más corta que la segunda y puede apreciarse como aparece un caracter nulo en el medio de la cadena.


Ya funciona todo otra vez ( lo de los comandos AT) y con mucha menos memoria, si señor! hago la implementacion para leer los mensajes y no se queja del compilador.

Te queria comentar que habria que hacer un while.. porque claro los comandos se envian, el dispositivo se configura para poder ser encontrado y para poder ser connectable con los otros pero eso no te garantiza que sea al instante. Tiene que estar un rato en estado de "idle" monitorizando si le llega eso o no. Creo que una vez que viene el primer mensaje ya vienen los otros dos seguidos. Osea solo habria que hacer esto para el primero.

Te dejo el codigo aqui. Hay que hacer la funcion que lea exactamente el caracter, se te ocurre algo para no tener que hacer lo del ok[0]=='O'.. en este caso son muchos caracteres.. demasiados!

Si no hay mas remedio pues se hara pero yo pregunto a ver..

Código: [Seleccionar]
//***********************************************************//
//ESPERAR A QUE UN DISPOSITIVO SE QUIERA CONNECTAR AL NUESTRO//
//***********************************************************//     


//*****************************************************************************
//MENSAJE DE APAREJAMIENTO: "PAIR 0 008098E6A5F4" (19 caracteres) + 4 =23
//*****************************************************************************     

.........

//*****************************************************************************
//MENSAJE DE LLAMADA: "RING 008098E6A5F4 (17 caracteres)" +4 =21
//*****************************************************************************


............


//*****************************************************************************
//MENSAJE DE CONEXION: CONNECT 008098E6A5F4,1101 A (27 caracteres) + 4=31
//*****************************************************************************   



  Todos esos mensajes ¿Cómo te los envía el módulo? ¿Con la forma \r\n mensaje \r\n? (entendiendo por mensaje a toda la cadena que vos pones en cada una de las partes) De ser así, insisto en que pruebes con mi función de LeerRespuesta ya que está hecha para que discrimine los \r\n iniciales y los \r\n finales.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #204 en: 22 de Enero de 2011, 14:26:06 »
Lo de poner hasta el numero 31 de espacios vacios lo dejare asi porque no me molesta y lo probe de tu manera y no me funciono. Total, funciona bien.

Si, el mensaje tiene la misma estructura que antes. El datasheet pone que todas las respuestas del modulo empiezan y acaban con \n. Respecto a leer cada caracter, harias la misma estructura que antes?

que vaya corriendo y ir cogiendo por los caracteres? o un if de esta forma:
if((buffer='P')&& buffer[i+1]=='A') etc etc.. hasta completar el mensaje.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #205 en: 22 de Enero de 2011, 14:51:47 »
Lo de poner hasta el numero 31 de espacios vacios lo dejare asi porque no me molesta y lo probe de tu manera y no me funciono. Total, funciona bien.

Si, el mensaje tiene la misma estructura que antes. El datasheet pone que todas las respuestas del modulo empiezan y acaban con \n. Respecto a leer cada caracter, harias la misma estructura que antes?

que vaya corriendo y ir cogiendo por los caracteres? o un if de esta forma:
if((buffer='P')&& buffer[i+1]=='A') etc etc.. hasta completar el mensaje.

  No, usaría mi función LeerRespuesta.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #206 en: 22 de Enero de 2011, 16:59:31 »
  Esta es la función LeerRespuesta

Código: C
  1. char * LeerRespuesta(char * mensaje)
  2. {
  3.   char CaracterLeido;
  4.   char * Mensaje;
  5.  
  6.   Mensaje = mensaje;
  7.   do
  8.   {
  9.     CaracterLeido = getch();
  10.   }
  11.   while (CaracterLeido != '\n');
  12.  
  13.   do
  14.   {
  15.     CaracterLeido = getch();
  16.     if ((CaracterLeido != '\r') && (CaracterLeido != '\n'))
  17.     {
  18.       *Mensaje = CaracterLeido;
  19.       Mensaje++;
  20.     }
  21.     *Mensaje = '\0';
  22.   }
  23.   while (CaracterLeido != '\n');
  24.   return mensaje;
  25. }

  El primer do-while se ocupa de obviar todo lo que esté antes del prime '\n', y el segundo do-while se ocupa de almacenar todo lo que vaya llegando, siempre y cuando sea distinto de '\r' o '\n'. Y se termina cuando llega '\n'.

  Este es el programa en el que lo uso...

Código: C
  1. void main (void)
  2. {
  3.  
  4.   char Respuesta[30];
  5.   char ok[3];
  6.   char indice;
  7.  
  8.   init_system();
  9.   serial_setup();
  10.   PORTB = 0;
  11.   putst ("AT");
  12.   putch ('\r');
  13.   LeerRespuesta(Respuesta);
  14.   if (strcmp (Respuesta, "OK") == 0) RB6 = 1;
  15.  
  16.   while (RA4 == 1); //esto esta puesto simplemente para poder pausear y ver el valor de Respuesta
  17.  
  18.   putst ("ATS");
  19.   putch ('\r');
  20.  
  21.   LeerRespuesta(Respuesta);
  22.   if (strcmp (Respuesta, "OK") == 0) RB7 = 1;
  23.  
  24.   while (RA4 == 0); //esto esta puesto simplemente para poder pausear y ver el valor de Respuesta
  25.   while (RA4 == 1);
  26.  
  27.   putst ("AT");
  28.   putch ('\r');
  29.   LeerRespuesta(Respuesta);
  30.   if (strcmp (Respuesta, "OK") == 0) RB6 = 0;
  31.  
  32.   while (1);
  33. }

  Como verás mando 3 comandos AT. Con otro pic le envío supuestas respuestas para que este programa las leea. Las respuestas que envío son: 1) \r\nOK\r\n 2) ATS\r\r\nCONECT PAIR BUENO\r\n 3) \r\nOK\r\n
  En la respuesta 2 envió ATS\r antes de todo lo otro, simulando también como si estuviera el echo activado.
  Dejo 3 capturas en las que se ve el valor que va tomando la variable Respuesta en los distintos casos.

  Como verás el programa también tiene strcmp y siempre da bien. En el primer caso se hace 1 RB6. En el segundo caso no se hace 1 RB7 ya que, obviamente, lo que llega no es OK. En el tercer caso se hace 0 RB6 porque lo que llega si es OK.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #207 en: 22 de Enero de 2011, 19:04:44 »
Muchas gracias por estos ejemplos. Ya lo he preparado todo para cuando mañana lo pruebe en el lab.

De esta manera el programa se quedara esperando a los tres mensajes o hay que poner algun while para que este por alli y vaya mirandolo todo? Crees que de esta forma funcionara?

Adjunto el codigo entero de esta parte de comandos AT que es como lo tengo actualmente:

Código: [Seleccionar]

#include <htc.h>
#include <stdlib.h>  // para poder usar la funcion itoa
#include <string.h>
#include <stdio.h>
#include <conio.h>


//#conio.h, e #iostream.h


 
__CONFIG (1, HS & CPUDIV4 & USBPLL & PLLDIV5 & FCMDIS & IESODIS); // Con 20 CPUDIV1
__CONFIG (2, BORDIS & WDTDIS & PWRTDIS);
__CONFIG (3, MCLRDIS); // estoy deshabilitando el pin de MasterClear, tal vez haya que habilitarlo, eso hay que probarlo
__CONFIG (4, LVPDIS &  DEBUGEN);
 
/* =================================================================================
Definitions
    ================================================================================= */
#define PORTBIT(adr, bit) ( (unsigned)(&adr)*8 + (bit) )
 
#define Idle_Low 1 // No envia datos
#define Idle_High 2 // Envia datos

#define true 1
#define false 0
 
#define BAUD  9600 // Configuramos la velocidad, tanto puede ser 19200 o de 9600 kbaud/s pero hay q cambiarlo tb en la simulacion de proteus
#define PIC_CLK      5000000
 
#define CS RB2

/* =================================================================================
Global variables 
  ================================================================================= */


static bit LED0 @ PORTBIT(PORTD, 0);
static bit LED1 @ PORTBIT(PORTD, 1);
static bit LED2 @ PORTBIT(PORTD, 2);
static bit LED3 @ PORTBIT(PORTD, 3);
char present_state = Idle_Low; // state variable
char future_state = Idle_Low; // state variable
unsigned int  valor_potenciometro;
unsigned int  valor_sensor_temperatura;
unsigned char pote_buf[6];
unsigned char sensor_buf[10];
char * valor_pote_en_texto;           // un puntero para almacenar el numero en texto
char * valor_sensor_en_texto;         // un puntero para almacenar el numero en texto
char byte_alto, byte_bajo;
unsigned char caracter_recibido;
unsigned char dummy;

int error_comando=1;

int final=1;
int prueba=1; // PRUEBA PARA SABER DONDE ESTO



/* =================================================================================
Function prototypes
  ================================================================================= */
 
void init_system (void);
void time_delay (unsigned int );
char output_logic(void);
char future_state_logic(void);
 
void setup_sensor(void);
void setup_adc(void);
void serial_setup(void);
 
void putst(const char *str);
void putch(unsigned char c);

unsigned char getch(void);
unsigned char UsartReadChar_nonstop(void);
unsigned char getch_available(void);

void clear_usart_errors(void);
 
unsigned char read_spi (void);
unsigned int read_adc(void);


unsigned char getch(void);
char * LeerRespuesta(char * mensaje);



/* =================================================================================
Main function
  ================================================================================= */
 
void main ()
{
 
 valor_potenciometro = 0;
 valor_sensor_temperatura = 0;

  LED0 = 0;
  LED1 = 0;
  LED2 = 0;
  LED3 = 0;

char indice;
register const char *ComandoIdeal = "OK";

char Respuesta[32];
char ok[3]; // ES FIJO!!
char aparejamiento[23];
char ring[21];
char connexion[31];

register const char  *ComandoRecibido;
int i=9;

 
init_system();
setup_sensor();
setup_adc();
serial_setup();



//*****************************************************************************
// Establecer connexion con comandos AT
//*****************************************************************************


//*****************************************************************************
//PRIMER COMANDO AT
//*****************************************************************************
putst ("AT"); // Desconnectar el echo.
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]='\0';
Respuesta[10]='\0';
Respuesta[11]='\0';
Respuesta[12]='\0';
Respuesta[13]='\0';
Respuesta[14]='\0';
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}






//*****************************************************************************
//SEGUNDO COMANDO AT
//*****************************************************************************
putst ("ATS0=1");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]='\0';
Respuesta[14]='\0';
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED1=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}





//*****************************************************************************
//TERCER COMANDO AT
//*****************************************************************************
putst ("ATS512=4");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED2=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}



//*****************************************************************************
//CUARTO COMANDO AT
//*****************************************************************************
putst ("ATS502=1");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED3=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}





//*****************************************************************************
//QUINTO COMANDO AT
//*****************************************************************************
putst ("ATS536=1");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]='\0';
Respuesta[16]='\0';
Respuesta[17]='\0';
Respuesta[18]='\0';
Respuesta[19]='\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED0=0;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}




//*****************************************************************************
//SEXTO COMANDO AT
//*****************************************************************************
putst ("AT+BTK=\"1234\"");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= getch();
Respuesta[12]= getch();
Respuesta[13]= getch();
Respuesta[14]= getch();
Respuesta[15]= getch();
Respuesta[16]= getch();
Respuesta[17]= getch();
Respuesta[18]= getch();
Respuesta[19]= getch();
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED1=0;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}



//*****************************************************************************
//SEPTIMO COMANDO AT
//*****************************************************************************
putst ("AT&W");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= getch();
Respuesta[11]= '\0';
Respuesta[12]= '\0';
Respuesta[13]= '\0';
Respuesta[14]= '\0';
Respuesta[15]= '\0';
Respuesta[16]= '\0';
Respuesta[17]= '\0';
Respuesta[18]= '\0';
Respuesta[19]= '\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED2=0;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}



//*****************************************************************************
//OCTAVO COMANDO AT
//*****************************************************************************
putst ("ATZ");
putch ('\r');

Respuesta[0] = getch();
Respuesta[1] = getch();
Respuesta[2] = getch();
Respuesta[3] = getch();
Respuesta[4] = getch();
Respuesta[5] = getch();
Respuesta[6] = getch();
Respuesta[7] = getch();
Respuesta[8] = getch();
Respuesta[9]=  getch();
Respuesta[10]= '\0';
Respuesta[11]= '\0';
Respuesta[12]= '\0';
Respuesta[13]= '\0';
Respuesta[14]= '\0';
Respuesta[15]= '\0';
Respuesta[16]= '\0';
Respuesta[17]= '\0';
Respuesta[18]= '\0';
Respuesta[19]= '\0';
Respuesta[20]='\0';
Respuesta[21]='\0';
Respuesta[22]='\0';
Respuesta[23]='\0';
Respuesta[24]='\0';
Respuesta[25]='\0';
Respuesta[26]='\0';
Respuesta[27]='\0';
Respuesta[28]='\0';
Respuesta[29]='\0';
Respuesta[30]='\0';
Respuesta[31]= '\0';

indice = 0;

//while(1);

while (Respuesta[indice] != '\0')
{
  if ((Respuesta[indice] == 'O') && (Respuesta[indice + 1] == 'K'))
  {
    ok[0] = Respuesta[indice];
    ok[1] = Respuesta[indice + 1];
  }
  indice++;
  ok[2] = '\0';
}


//while(1);

ComandoRecibido=ok;
if (strcmp(ComandoRecibido,"OK") == 0){ // Todo a ido bien
// while(1);
LED3=0;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}









//***********************************************************//
//ESPERAR A QUE UN DISPOSITIVO SE QUIERA CONNECTAR AL NUESTRO//
//***********************************************************//     


//*****************************************************************************
//MENSAJE DE APAREJAMIENTO: "PAIR 0 008098E6A5F4" (19 caracteres) + 4 =23
//*****************************************************************************     

 LeerRespuesta(aparejamiento);
if (strcmp(ComandoRecibido,"PAIR 0 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}






//*****************************************************************************
//MENSAJE DE LLAMADA: "RING 008098E6A5F4 (17 caracteres)" +4 =21
//*****************************************************************************



LeerRespuesta(ring);
ComandoRecibido=ring;
if (strcmp(ComandoRecibido,"RING 008098E6A5F4") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}




//*****************************************************************************
//MENSAJE DE CONEXION: CONNECT 008098E6A5F4,1101 A (27 caracteres) + 4=31
//*****************************************************************************   


LeerRespuesta(connexion);
ComandoRecibido=connexion;
if (strcmp(ComandoRecibido,"CONNECT 008098E6A5F4,1101 A") == 0){ // Todo a ido bien
// while(1);
LED0=1;
error_comando=0;

}
else{                                    // No es el comando bueno
// while(1);
error_comando=1;
}


Muchas gracias otra vez amigo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al comparar dos strings con strcmp
« Respuesta #208 en: 22 de Enero de 2011, 19:26:10 »
Muchas gracias por estos ejemplos. Ya lo he preparado todo para cuando mañana lo pruebe en el lab.

De esta manera el programa se quedara esperando a los tres mensajes o hay que poner algun while para que este por alli y vaya mirandolo todo? Crees que de esta forma funcionara?

Adjunto el codigo entero de esta parte de comandos AT que es como lo tengo actualmente:

......


  La función LeerRespuesta llama sucesivamente a getch() así que se va a quedar allí "a la espera" hasta que vayan llegando los caracteres.

  No te olvides que en la implementación de getch() está el while que espera a que se setee el bit RCIF.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado edu1989

  • PIC18
  • ****
  • Mensajes: 275
Re: Error al comparar dos strings con strcmp
« Respuesta #209 en: 22 de Enero de 2011, 19:28:54 »
Puse if para controlar la variable error_comando y hice una ultima prueba para comprobar que aun seguia funcionando.
Mañana probare en el lab lo del mensaje a ver.

Entonces crees que no le falta nada al codigo no? creo que no se me escapa nada..

Ya te dire algo. Muchas gracias por la ayuda prestada :)