double link liste installieren und befüllen
-
Abend,
ich habe gerade eine double-link List versucht zu erzeugen und es wäre super wenn mir jmd Fehler oder unsauberes Programmieren im Code zeigen könnte. Das ganze soll in einem Mikrocontroller laufen, daher hab ich ganz bewusst auf malloc() verzichtet.
1. die Struktur sowie die Zeiger auf für das Ende, den Anfang der Liste und den Listenzeiger *Header
typedef struct data { Hdr RxHdr; volatile unsigned int *p_data; struct data *p_NextHdr; struct data *p_PrevHdr; }*pStruct; struct data *HdrBufEnd; struct data *HdrBufBegin; struct data *Header[NB_PACKETS];
pStruct p_HdrLisPtr;
init von Struct im Code
HdrBufBegin->p_PrevHdr = HdrBufEnd->p_PrevHdr = HdrBufBegin; /* */ HdrBufBegin->p_NextHdr = HdrBufEnd->p_NextHdr = HdrBufEnd; /* */ p_HdrLisPtr = HdrBufBegin;
Innerhalb einer for-Schleife sollen nun die Listenelemente nach der Reihe mit Daten gefüllt werden. Ein neues Listenelement soll immer hinten drangehängt werden.
for(i=0; i< NB_PACKETS; i++) { Header[i]->p_data = &Addr; // add new header to the list Header[i]->p_PrevHdr = p_HdrLisPtr; /* */ Header[i]->p_NextHdr = p_HdrLisPtr->p_NextHdr; /* */ p_HdrLisPtr->p_NextHdr->p_PrevHdr = Header[i]; /* */ p_HdrLisPtr->p_NextHdr = Header[i]; /* */ //endptr ans Ende setzen HdrBufEnd = p_HdrLisPtr; }
würde das so funktionieren?
Könnte ich dann auf die einzelnen Elemente der Liste ganz einfach und schnell zugreifen über *Header[i] (i=2 -> drittes Element in der Liste)?Gruß
Tim
-
Das ist schrecklich zum lesen. pHrdBufpü pHdrBufbu pHdrBufedd...
Und was ist da unten plötzlich Addr?
-
Addr stellt nur einen Platzhalter für eine Adresse auf die der Zeiger verweisen kann, dar...
Das mit der Namensgebung resultiert aus dem für was das stehen soll... p_HdrBuf (p = pointer, Hdr = Header, Buf = Buffer)
Aber man kann da sicherlich noch was ändern... aber würde der Code so funktionieren? Oder sind da auch noch fehler drinnen?
Tim
-
macht eigentlich die Verwendung einer double-link list und einem struct-Array einen Sinn? Oder könnte man hier nicht einfach auf die Liste verzichten und nur ein Struct Array deklarieren?
weiß_nix
-
Schreib ein kleines Testprogramm dann weißt du ob es funktioniert. Das geht ja auch auf nem PC, auch wenn die Liste für nen Mikrocontroller sein soll.