Pagina 1 di 1

confronto stringhe c18

MessaggioInviato: 8 lug 2011, 22:03
da filippo125
Salve a tutti,
Devo confrontare un array che ottengo via USART con una stringa definita in precedenza ma non so come fare.... Questo è quello che ho scritto:
Codice: Seleziona tutto
unsigned char speed[]= "A001F5D0F67";
unsigned char data[];
unsigned char input;
unsigned char output;
unsigned int ver=2;
//PROTOTIPI DI FUNZIONE
int reader (void);

void main (void){
// 8 bit
// 9600 bit/s
// 1 bit stop
// 0 bit parità
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
129 );
// Invio la stringa al terminale
putrsUSART ("Connessione avvenuta");
reader();
}
//*****READER*****************************
int reader (void)
{
while(1) {
input = 0;
output = 0;
// Leggo il dato dal buffer di ricezione
HomeLCD();
for (input=0; input<15; input++)
{
data[input] = ReadUSART();
//Attendo che la USART sia libera
while(!DataRdyUSART( ));
}
// Invio il carattere al display
for (output=3; output<15; output++)
{
WriteCharLCD(data[output]);
while (BusyUSART());
}
//Verifica idtransponder
if (data==speed )
{
GotoLineLCD(2);
WriteStringLCD("OK!");
} else
{GotoLineLCD(2);
WriteStringLCD("NO!");
}   
   }
      }

Re: confronto stringhe c18

MessaggioInviato: 8 lug 2011, 22:33
da AjKDAP
Con questa istruzione:

Codice: Seleziona tutto
if (data==speed )


esegui un confronto tra le due locazioni di memoria dove sono memorizzati i due array, più precisamente tra l'indirizzo di memoria del primo carattere dell'array data e l'indirizzo di memoria del primo carattere dell'array speed.

Nel 99% dei casi questi due indirizzi sono diversi e quindi il risultato di quella istruzione sarà sempre falso.

Per confrontare due array devi procedere confrontando ogni singolo carattere, magari creandoti una funzione apposita per svolgere quel lavoro.

Inoltre mi pare di aver letto che riempi l'array data con 15 caratteri, mentre l'array speed è definito ed inizializzato con 11caratteri, quindi fai attenzione anche a questo.

Un esempio potrebbe essere questo:

Codice: Seleziona tutto
error=0;
for(i=0;i<11;i++){
   if(data[i]!=speed[i])error++;
}
if(!error){
GotoLineLCD(2);
WriteStringLCD("OK!");
} else
{GotoLineLCD(2);
WriteStringLCD("NO!");
}   

Re: confronto stringhe c18

MessaggioInviato: 9 lug 2011, 19:47
da filippo125
Grazie dell'aiuto... sfruttando l'esempio ho risolto così:
Codice: Seleziona tutto
error=0;
for(i=0;i<11;i++){
   if(data[i+4]!=speed[i])error++;
}
if(!error){
GotoLineLCD(2);
WriteStringLCD("OK!");
} else
{GotoLineLCD(2);
WriteStringLCD("NO!");

Re: confronto stringhe c18

MessaggioInviato: 10 lug 2011, 1:17
da AjKDAP
Bene! :ok: