Ciao a tutti volevo chiedervi una mano su come sostituire un pezzo di codice di una funzione che ho fatto e che funziona ma non è come mi è stata richiesta. Probabilmente le modifiche da fare saranno poche solo che mi sto incasinando non poco con questi puntatori!
Ho una struttura dati di questo tipo:
buf_rx è un buffer di ricezione dove vengono salvati i caratteri ricevuti dalla Rs232codice:struct struttura2 { char buf_rx[LENBUF1]; int conta_rx; int flag_rx; }; struct struttura2 srx1,srx2;
conta_rx è il numero di caratteri ricevuti
flag_rx è una variabile di flag che mi serve per varie operazioni
e due variabili
In interrupt (sto usando un PIC18F452 col C18) ricevo i caratteri e li salvo uno ad uno nel buffer attivo (sono due i buffer che si alternano). Con la funzione Get_Ricevistringa devo "rendere disponibile" questo contenuto ad altre funzioni.codice:char *punta; int lunghezza;
La funzione che ho implementato è la seguente:
codice://~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //Funzione per l'acquisizione della stringa ricevuta //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int Get_Ricevistringa (void) { int esito=0; switch (buf_write) //se l'ultimo buffer scritto è il primo { case 1: if((srx1.flag_rx & 0b00000010)==0b00000010) // se il flag di contenuto ok del buffer 1 è settato { punta=&srx1.buf_rx[0]; //associo al puntatore il puntatore al buffer 1 lunghezza=srx1.conta_rx; //con la relativa lunghezza della stringa buf_read=1; //segnalo che l'ultima stringa letta è sul buffer 1 esito=1; //e ritorno con 1 } break; case 2: if((srx2.flag_rx & 0b00000010)==0b00000010) // se il flag di contenuto ok del buffer 2 è settato { punta=&srx2.buf_rx[0]; //associo al puntatore il puntatore al buffer 2 lunghezza=srx2.conta_rx; //con la relativa lunghezza della stringa buf_read=2; //segnalo che l'ultima stringa letta è sul buffer 2 esito=1; //e ritorno con 1 } break; } return esito; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Questo funziona bene ma il problema è che la funzione che mi veniva richiesta doveva essere:
int Get_Ricevistringa(char **punt, int * lung)
Non capisco cosa e come dovrei modificare il codice. Come dovrei effettuare poi la chiamata a funzione?
Grazie mille in anticipo!

Rispondi quotando