- Messaggi: 41
- Ringraziamenti ricevuti 0
PIC E SIM340
13 Anni 1 Mese fa #16
da davix10
Risposta da davix10 al topic Re: PIC E SIM340
Sono riuscito a capire che su hyperterminal non ricevo le giuste cose ma in realtà il modulo le riceve.
Come posso fare per confrontare due stringhe?
Come posso fare per confrontare due stringhe?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- davix10
- Autore della discussione
- Senior Member
Riduci
Di più
13 Anni 1 Mese fa #17
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: PIC E SIM340
Ciao,
se fai uso del C18 e' presente la funzione string compare. La descrizione la puoi trovare nel file MPLAB-C18-Libraries che trovi all'interno della directory doc della directory d'installazione C18.
In alternativa, visto che una stringa e' un array, puoi creare un array con la stringa con cui vuoi fare il confronto e controlli elemento per elemento la stringa ricevuta e quella per il confronto, fino al carattere speciale di fine stringa '\0'
In realta' ci sono modi per ottimizzare il tutto visto che la stringa per il confronto puo' risiedere in memoria flash (costante).
La libreria C18 fornisce varie funzioni a seconda del tipo di confronto, ovvero a seconda di dove risiedono le stringhe.
Saluti,
Mauro
se fai uso del C18 e' presente la funzione string compare. La descrizione la puoi trovare nel file MPLAB-C18-Libraries che trovi all'interno della directory doc della directory d'installazione C18.
In alternativa, visto che una stringa e' un array, puoi creare un array con la stringa con cui vuoi fare il confronto e controlli elemento per elemento la stringa ricevuta e quella per il confronto, fino al carattere speciale di fine stringa '\0'
In realta' ci sono modi per ottimizzare il tutto visto che la stringa per il confronto puo' risiedere in memoria flash (costante).
La libreria C18 fornisce varie funzioni a seconda del tipo di confronto, ovvero a seconda di dove risiedono le stringhe.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
13 Anni 1 Mese fa #18
da davix10
Risposta da davix10 al topic Re: PIC E SIM340
Grazie della risposta. Qui ho una parte di programma e volevo chiederti perchè mi da un errore:
while (1)
{
unsigned char corretto[]="OK";
unsigned char i=0;
unsigned char input,error;
unsigned char output;
unsigned char data;
unsigned char x_dati; // Indice all'array.
input = 0;
output = 0;
putrsUSART((const far rom char *)"AT\r\n");// AT command test
while(!BusyUSART());
Delay10KTCYx(200);
Delay10KTCYx(200);
Delay10KTCYx(200);
data[x_dati] = ReadUSART();
WriteUSART (data);
}
Mi da questo errore Error [1129] [] operator requires a pointer and an integer as operands
while (1)
{
unsigned char corretto[]="OK";
unsigned char i=0;
unsigned char input,error;
unsigned char output;
unsigned char data;
unsigned char x_dati; // Indice all'array.
input = 0;
output = 0;
putrsUSART((const far rom char *)"AT\r\n");// AT command test
while(!BusyUSART());
Delay10KTCYx(200);
Delay10KTCYx(200);
Delay10KTCYx(200);
data[x_dati] = ReadUSART();
WriteUSART (data);
}
Mi da questo errore Error [1129] [] operator requires a pointer and an integer as operands
Si prega Accedi o Crea un account a partecipare alla conversazione.
- davix10
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 41
- Ringraziamenti ricevuti 0
13 Anni 1 Mese fa #19
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: PIC E SIM340
Prova in questo modo:
unsigned char corretto[] = { 'O', 'K', '\0' };
oppure
unsigned char *corretto = "OK";
Saluti,
Mauro
unsigned char corretto[] = { 'O', 'K', '\0' };
oppure
unsigned char *corretto = "OK";
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
13 Anni 1 Mese fa #20
da davix10
Risposta da davix10 al topic Re: PIC E SIM340
Ho provato nel secondo modo:
while (1)
{
unsigned char *corretto = "OK";
unsigned char i=0;
unsigned char input,error;
unsigned char output;
unsigned char data;
unsigned char x_dati; // Indice all'array.
input = 0;
output = 0;
putrsUSART((const far rom char *)"AT\r\n");// AT command test
while(!BusyUSART());
Delay10KTCYx(200);
Delay10KTCYx(200);
Delay10KTCYx(200);
data = ReadUSART();
WriteUSART (data);
if (strcmppgm2ram(corretto,data)==0)
{
PORTAbits.RA0=1;
Delay10KTCYx(255);
PORTAbits.RA0=0;
Delay10KTCYx(200);
}
else
{
PORTAbits.RA0=1;
Delay10KTCYx(255);
Delay10KTCYx(255);
Delay10KTCYx(255);
}
}
E' giusto il comando strcmppgm2ram scritto in quel modo?
while (1)
{
unsigned char *corretto = "OK";
unsigned char i=0;
unsigned char input,error;
unsigned char output;
unsigned char data;
unsigned char x_dati; // Indice all'array.
input = 0;
output = 0;
putrsUSART((const far rom char *)"AT\r\n");// AT command test
while(!BusyUSART());
Delay10KTCYx(200);
Delay10KTCYx(200);
Delay10KTCYx(200);
data = ReadUSART();
WriteUSART (data);
if (strcmppgm2ram(corretto,data)==0)
{
PORTAbits.RA0=1;
Delay10KTCYx(255);
PORTAbits.RA0=0;
Delay10KTCYx(200);
}
else
{
PORTAbits.RA0=1;
Delay10KTCYx(255);
Delay10KTCYx(255);
Delay10KTCYx(255);
}
}
E' giusto il comando strcmppgm2ram scritto in quel modo?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- davix10
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 41
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.