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!