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:
codice:
struct struttura2
{
char buf_rx[LENBUF1];
int conta_rx;
int flag_rx;
};
struct struttura2 srx1,srx2;
buf_rx è un buffer di ricezione dove vengono salvati i caratteri ricevuti dalla Rs232
conta_rx è il numero di caratteri ricevuti
flag_rx è una variabile di flag che mi serve per varie operazioni
e due variabili
codice:
char *punta;
int lunghezza;
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.
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!