Circular Buffer

di il
1 risposte

Circular Buffer

Salve a tutti, ho un problema che non riesco a capire/risolvere.
Sto implementando un Circular Buffer, definendolo nel seguente modo:
typedef struct {
	UC_8 *base;
	UC_8 *head;
	UC_8 *tail;
	UI_16 length;
	UI_16 count;
}CB_t;
Per adesso voglio andare ad aggiungere un elemento al buffer e controllare l'elemento aggiunto. Per questo motivo ho scritto la seguente funzione per aggiungere un elemento al buffer :

void CB_Add_Item(CB_t* cbuf, UC_8 item)
{
	/*we need to check to see where the current head is*/
	 if (cbuf->head == cbuf->head +(cbuf->length-1))
		{
			cbuf->head = cbuf->base; /*set the head on the base*/
		}
	else /*the head it's not in the last position*/
		{
			cbuf->head++;
		}
	/*Assign the item to the head*/
	*(cbuf->head) = item;
	printf("Item Add ");
	printf("Item Add is %d: \n ",*cbuf->head  );
}
Nel main inizialmente alloca memoria per il buffer e aggiungo un elemento, nel seguente modo :

int main (void)
{
CB_t cbuf;
UI_16 prova;
UC_8 item = 10;
LENGTH = 10;

cbuf.base = (UC_8 *) malloc(LENGTH);

CB_Add_Item(&cbuf,item);

return EXIT_SUCCESS;
}
In questo modo tutto funziona correttamente e vedo stampato su console : Item Add Item Add is 10:

Successivamente volevo andare a leggere il valore aggiunto per effettuare un ulteriore controllo e salvarlo in una variabile, quindi semplicemente ho aggiunto uno statement:

int main (void)
{
CB_t cbuf;
UI_16 prova;
UC_8 item = 10;
LENGTH = 10;

cbuf.base = (UC_8 *) malloc(LENGTH);
CB_STATUS =  CB_Add_Item(&cbuf,item);

prova = *(cbuf.head);    /*STATEMENT AGGIUNTO */

return EXIT_SUCCESS;
}
Il codice compilando non da comunque errori o warning, ma non funziona più. Infatti in console leggo <terminated> (exit value: -1.073.741.819) .
Utilizzando il debug ho notato che lo statement in cui si "blocca" è il seguente:
*(cbuf->head) = item;
Non riesco a capire il perchè, volevo sapere se per caso qualcuno poteva aiutarmi o avesse qualche idea.

Grazie a tutti spero di essere stato chiaro

1 Risposte

  • Re: Circular Buffer

    Credo di aver risolto: dovevo andare ad inizializzare gli elementi della struct puntatori, oppure più semplicemente allocare tutto in maniera statica
Devi accedere o registrarti per scrivere nel forum
1 risposte