Hallo, ich möchte einen Buffer für einen Datenempfang basteln, der unterschiedliche Framelänge hat. Aussehen tut das ganze momentan von der Definition so: volatile static struct frameElement { uint8_t dataByte; frameElement* nextFrameByte; }; volatile static struct bufferElement { frameElement frame; bufferElement* nextFrame; }; bufferElement receiveBuffer = {{0,NULL},NULL}; Das 'Problem' hierbei ist, dass ich zwar Bufferelement in eine feste Größe pressen kann und somit kein Speicher mehr freigeben muss, meine frameElemente sind aber bewusst unterschiedlich lang, d.h. ich müsste diese Speicher dann immer wieder freigeben. Ist die realisierung auf einem arm ähnlichen Controller hier so sinnvoll? Funktioniert die Freigabe mit free() ? Oder sollte ich das ganze lieber mit Arrays und einer festen maximalen Framelänge lösen? Vielen Dank für eure Hilfe im Vorraus.
Also ich mache so was ähnliches mit malloc() und free() und bei mir klappt's ganz gut. Ist dann wie eine verkettete Liste, wenn ich mich nicht täusche.
Fabian schrieb: > Das 'Problem' hierbei ist, Das Problem ist, dass du für jedes Nutzbyte ein paar Bytes (4?) für einen Pointer verbrauchst. > Größe pressen kann und somit kein Speicher mehr freigeben muss, meine > frameElemente sind aber bewusst unterschiedlich lang, d.h. ich müsste > diese Speicher dann immer wieder freigeben. Ja. So ist das wenn man die Speicherfläche an die tatsächliche Datengröße anpassen will > Ist die realisierung auf > einem arm ähnlichen Controller hier so sinnvoll? Auch auf einem arm ist das so nicht sinnvoll. Man könnte höchstens in ein frameElement mehr als nur ein einziges Byte reinpacken, damit der Speicherverschnitt nicht so hoch ist. Aber auch das ist im Grunde mit Kanonen auf Spatzen geschossen. Wenn du sowieso dynamisch allokierst, dann sammle erst einmal alle Daten in einem anderen Buffer, allokiere eine entsprechend große SPeicherfläche, dort kopierst du die Daten hin und ein Pointer auf diese Speicherfläche kommt in das bufferElement hinein. > Oder sollte ich das ganze lieber mit Arrays und > einer festen maximalen Framelänge lösen? Im Vergleich zu deinem jetzigen Ansatz: auf jeden Fall
Ok, vielen Dank Herr Buchegger, ich werde es vorerst mit einem Array lösen.
Fabian schrieb: > Ok, vielen Dank Herr Buchegger, Ich werds ausrichten. Kann aber eine Weile dauern. Mein Vater ist zur Zeit in Nepal. Ich bin einfach nur Karl Heinz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.