Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca in Array di char in C

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Ricerca in Array di char in C

Messaggioda Foto Utenteandre29 » 12 dic 2023, 13:05

Caio a tutti,
sono alle prese con un piccolo firmware su AVR che mi sta dando un po' da fare non essendo molto esperto di programmazione.

Tramite un interrupt su UART memorizzo i dato all'interno di un vettore "A".
Durante l'esecuzione del programma (nel main) vorrei chiamare una funzione che legga tutto il vettore "A" e identificare una precisa sequenza di caratteri per memorizzarla all'interno di un altro vettore "B" sempre di tipo Char, che poi lo userò nel main.
Ho già fatto qualcosa ma mi da errori di compilazione.
Qualcuno saprebbe darmi una mano? Grazie O_/
Avatar utente
Foto Utenteandre29
68 2 6
Frequentatore
Frequentatore
 
Messaggi: 251
Iscritto il: 26 apr 2015, 9:57

0
voti

[2] Re: Ricerca in Array di char in C

Messaggioda Foto Utenteelfo » 12 dic 2023, 13:11

Risposta non troppo appropriata (in un altro contesto avrei usato una espressione diversa :( )

Hai chiesto a ChatGPT?

P.S. la mia (non) risposta mi serve per capire come "tira il vento"
Avatar utente
Foto Utenteelfo
6.469 4 5 7
G.Master EY
G.Master EY
 
Messaggi: 2706
Iscritto il: 15 lug 2016, 13:27

0
voti

[3] Re: Ricerca in Array di char in C

Messaggioda Foto Utentestandardoil » 12 dic 2023, 13:50

Dopo aver chiesto alle imitazioni di intelligenza riporta qui che son curioso

E poi metti quello che hai fatto finora che ci provo ad aiutarti
Avatar utente
Foto Utentestandardoil
440 2 4
Stabilizzato
Stabilizzato
 
Messaggi: 365
Iscritto il: 15 lug 2022, 19:14

0
voti

[4] Re: Ricerca in Array di char in C

Messaggioda Foto Utentedadduni » 12 dic 2023, 15:03

ci devi almeno dire di piu'. Quale e' la sequenza che ti aspetti? E' una sequenza nota e vuoi solo vedere se c'e'? E' una roba delimitata da due caratteri?

Io mi sto aspettando una cosa tipo asdoijsadoij-simbolo-asdijaosidj e vuoi ritornare "simbolo" perche' e' delimitato da due trattini.

In quel caso basta fare un ciclo for che scorre tutto il vettore, segnarti la posizione dei due trattini, se ce ne sono esattamente due allora copi la stringa a partire da posizione-trattino-1 fino a posizione-trattino-2 altrimenti se ce ne sono un numero diverso da 2 ritorni un errore.
Avatar utente
Foto Utentedadduni
1.963 2 7 12
Expert EY
Expert EY
 
Messaggi: 1332
Iscritto il: 23 mag 2014, 16:26

0
voti

[5] Re: Ricerca in Array di char in C

Messaggioda Foto Utenteluxinterior » 12 dic 2023, 15:32

PArlando di stringhe e di char ricordati che implicitamente accetti due condizioni
la tua sesquenza NON può contenere il valore zero
la tua sequenza termina quando si incntra un byte uguale a zero

Cosa non scontata parlando di sequenze ricevute da porta seriale. Devi assicurarti che sia terminata correttamente con un valore zero, eventualmente lo aggiungi tu alla fine, quando copi la sequenza da A a B

Diversamente io al posto di char utilizzerei uint8_t per definire un vettore generico. In questo caso però è obbligatorio un secondo parametro conoscere il numero di elementi contenuti
Avatar utente
Foto Utenteluxinterior
4.017 3 4 9
Master
Master
 
Messaggi: 2544
Iscritto il: 6 gen 2016, 17:48

0
voti

[6] Re: Ricerca in Array di char in C

Messaggioda Foto Utenteandre29 » 12 dic 2023, 16:26

Allora provo a spiegare un attimo:
Tramite UART memorizzo in un vettore questa stringa:

DDFS,$587.455,564.300,L,,,,,,,,150,5555,,,55555,,

Sono circa 50 caratteri e ho creato un vettore di 100 byte (DIM_BUFFER) chiamato:
Codice: Seleziona tutto
char RXbuffer [DIM_BUFFER];
char array[7];


A me interessano i 7 byte successivi al "$" e salvarli nel vettore array. Vorrei creare una funzione per poi richiamarla nel main. Quindi ho fatto un ciclo for di questo tipo:
Codice: Seleziona tutto
oid get_array (char RXbuffer,DIM_BUFFER){
   int i,n,timestep;
   bool v=false;
   
   for (i=0;i<DIM_BUFFER;i++) {
         
         if (RXbuffer[i]=="$")  {
               
                  for (n=0;n<7;n++) { 
                     array[n]=RXbuffer[i];
                     }
                  return 0;
                  break;
            }
   }
}


Mi stavo chiedendo se concettualmente così è corretto. Posso passagli un array a una funzione ? O gli devo passare il puntatore?
Avatar utente
Foto Utenteandre29
68 2 6
Frequentatore
Frequentatore
 
Messaggi: 251
Iscritto il: 26 apr 2015, 9:57

1
voti

[7] Re: Ricerca in Array di char in C

Messaggioda Foto Utentedadduni » 12 dic 2023, 17:40

gli devi passare il puntatore. E nella parte che salvi non devi salvare dall'indice i ma dall'indice i+1. Cosi' appena trovi $ inizi a salvare, quindi $ e' compreso nel salvataggio mentre tu invece vuoi partire dal carattere successivo.

(anche senza arduino, scaricati gcc sul computer e prova le tue funzioni in locale prima di metterle sul micro, cosi' sul PC hai debugger e tutto quello che serve)
Avatar utente
Foto Utentedadduni
1.963 2 7 12
Expert EY
Expert EY
 
Messaggi: 1332
Iscritto il: 23 mag 2014, 16:26

0
voti

[8] Re: Ricerca in Array di char in C

Messaggioda Foto UtenteGioArca67 » 12 dic 2023, 19:50

Non va bene per molti motivi.
Innanzitutto se non inizializzi il buffer ad un valore noto potresti avere qualsiasi cosa al suo interno e poiché vai a cercare oltre i caratteri ricevuti (dici circa 50 e dimensioni a 100) potresti ottenere cose strane.
Poi ti devi fermare a NumeroCaratteriRicevuti - 7 (passi DIM_BUFFER-7), poiché se trovi un dollaro oltre questo limite dopo non hai spazio per un numero formattato correttamente (7 caratteri).
poi dici che non compila.
Che errore da?
Avatar utente
Foto UtenteGioArca67
3.661 4 5 9
Master
Master
 
Messaggi: 3527
Iscritto il: 12 mar 2021, 9:36

0
voti

[9] Re: Ricerca in Array di char in C

Messaggioda Foto Utentedjnz » 12 dic 2023, 20:13

tra l'altro, la condizione:
Codice: Seleziona tutto
RXbuffer[i]=="$"

dovrebbe essere:
Codice: Seleziona tutto
RXbuffer[i]=='$'

Poi, ma questo è solo "design", il buffer passato come argomento, mentre l'array del risultato acceduto come variabile globale?

Si potrebbe fare così (a memoria, non testato):
Codice: Seleziona tutto
#define DIM_BUFFER  100

char RXbuffer [DIM_BUFFER];
char array[7];

Codice: Seleziona tutto
bool get_array() {
    int i;
    for (i=0; i<(DIM_BUFFER-7); i++)
        if (RXbuffer[i] == '$')  {
            memcpy(array, RXbuffer+i+1, 7);
            return 1;
        }
    return 0;
}

Da usare con:
Codice: Seleziona tutto
if (get_array()) { ... }
Ultima modifica di Foto Utentedjnz il 12 dic 2023, 20:41, modificato 4 volte in totale.
Una domanda ben posta è già mezza risposta.
Avatar utente
Foto Utentedjnz
1.070 1 4 5
Expert
Expert
 
Messaggi: 589
Iscritto il: 26 lug 2020, 14:52

0
voti

[10] Re: Ricerca in Array di char in C

Messaggioda Foto UtenteGioArca67 » 12 dic 2023, 20:18

Mi sembra opportuno modificare il titolo in qualcosa tipo
"Ricerca in Array di char in C"
affinché sia più comprensibile
osservazioni?
Avatar utente
Foto UtenteGioArca67
3.661 4 5 9
Master
Master
 
Messaggi: 3527
Iscritto il: 12 mar 2021, 9:36

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti