Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

confronto stringhe c18

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] confronto stringhe c18

Messaggioda Foto Utentefilippo125 » 8 lug 2011, 22:03

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!");
}   
   }
      }
Avatar utente
Foto Utentefilippo125
85 1 2 5
Frequentatore
Frequentatore
 
Messaggi: 139
Iscritto il: 6 ago 2008, 15:59

2
voti

[2] Re: confronto stringhe c18

Messaggioda Foto UtenteAjKDAP » 8 lug 2011, 22:33

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!");
}   
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

2
voti

[3] Re: confronto stringhe c18

Messaggioda Foto Utentefilippo125 » 9 lug 2011, 19:47

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!");
Avatar utente
Foto Utentefilippo125
85 1 2 5
Frequentatore
Frequentatore
 
Messaggi: 139
Iscritto il: 6 ago 2008, 15:59

0
voti

[4] Re: confronto stringhe c18

Messaggioda Foto UtenteAjKDAP » 10 lug 2011, 1:17

Bene! :ok:
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti