ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > C - Strukturen strukturieren ... | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
23.11.2005, 09:42 Uhr hawe Posts: 130 Nutzer |
Hallo zusammen, ich hab da mal 'ne Frage... ... wie kann ich folgendes Problem lösen. Ich habe eine Struktur für eine Message die aus einer Header- und einer Datenstruktur besteht. Die Headerstruktur ist fest die Datenstruktur je nach Datenobjekt unterschiedlich. Folgendes habe ich mir gedacht: struckt { struct header; struct data } message; struct { word eins; word zwei; ... } header; // Message Strukturen struct { struct irgendwas; word data; } data1; struct { char ; word ; string } data2; usw. soweit denke ich liege ich noch nicht so falsch. Aber was mache ich mit der "struct data"? hier gibt es verschieden Strukturen, jenachdem was ich übertragen möchte. Der Header enthält ein Kennzeichen was an daten kommt. Ach ja noch etwas, ist es besser in der Struct message für die Headerinformationen eine Struktur zu bemühen oder soll ich die Informationen direkt in die Message schreiben? -- cu hawe [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 09:47 Uhr Holger Posts: 8116 Nutzer |
Was Du brauchst ist entweder union oder pointer. Die Grundlagen dazu sollte jedes C-Buch enthalten. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 10:16 Uhr hawe Posts: 130 Nutzer |
Zitat: Ich hab's befürchtet. Werde dann wohl Pointer nehmen. Eine Randbedingung ist, ich habe nur sehr wenig RAM zur Verfügung. Muss also alles zur Laufzeit zusammenbauen wenn es gesendet werden soll. -- cu hawe [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 10:50 Uhr thomas Posts: 7718 Nutzer |
Also ich fände eine union deutlich sinnvoller. code:struct { struct header; union data; } message; struct header { word eins; word zwei; ... }; union data { // Message Strukturen struct data1 { struct irgendwas; word data; }; struct data2{ char ; word ; string }; usw. }; Dann greifst du auf data1 zu mit message.data.data1.irgendwas. Ist doch nicht zu kompliziert. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 11:25 Uhr fisch08 Posts: 692 Nutzer |
@hawe: Also wenn du Angst vor Pointern hast, bist du bei C/C++ einfach falsch. Ich würde den data Type als Void* deklarieren und zur Laufzeit den Speicher reservieren: .data=malloc(sizeof(data1)); oder .data=malloc(sizeof(data2)); usw. Das hat den Vorteil, dass der Speicher erst zur Laufzeit reserviert bzw. freigegeben wird. Auf welchem System programmierst du denn, dass die paar Bytes ausschlaggebend sind? Microcontroller? Wenn ja, wären vielleicht unions angebrachter. Rest siehe dir in jedem beliebigen C-Buch an. Gruß Fisch08 -- Um den Spamfilter zu umgehen: Bei direkter Antwort per Mail bitte "[Amiga]" ins Subject: Nur so 100%ige Garantie, dass man nicht im Filter landet! [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 12:55 Uhr hawe Posts: 130 Nutzer |
Original von fisch08: Also wenn du Angst vor Pointern hast, bist du bei C/C++ einfach falsch. [/quote] Nee, Angst nicht. Finde die Dinger nur unhandlich und läßtig. Zitat:An Void* habe ich gar nicht gedacht... Zitat:Ja, sind Microcontroller. Soll nen verteiletes System mit Sensoren und Aktoren die über einen Bus verbunden sind werden. -- cu hawe [ Dieser Beitrag wurde von hawe am 23.11.2005 um 12:56 Uhr editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 13:01 Uhr hawe Posts: 130 Nutzer |
Zitat:Ja eine union hat auch ihren Charm. Dann hätte ich im Eingangspuffer immer genug Platz für die längste Message. Muss ich mal ausprobieren und Bytes zählen. -- cu hawe [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 13:08 Uhr bubblebobble Posts: 707 Nutzer |
Eine Union würde ich nehmen, wenn die Structuren alles in etwa gleich gross sind. Wenn eine aber sehr gross und selten ist, die anderen aberklein und häufig, wäre eine Union Speicherverschwendung. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 13:44 Uhr hawe Posts: 130 Nutzer |
Zitat: Mhh, warum? Da ich nicht weiss wann welche Message zur Laufzeit eintrifft muss der Eingangspuffer immer die längste Message aufnehmen können, auch wenn sie nur selten kommt. Für den Augangspuffer sieht die Sache schon wieder anders aus. Hier denke ich darüber nach das ganze über pointer zu realisieren um dann zu Laufzeit die Daten dynamisch auszugeben ohne zusätzliches RAM für den Wert und den Ausgangspuffer zu verwenden. Ich muss aber wohl noch mal über das Busprotokoll nachdenken ... 1k RAM ist nicht viel, naja früher war das schon ne ganze Menge aber irgendwie bin ich mittlerwile recht verwöhnt und sehr verschwenderisch geworden. -- cu hawe [ - Antworten - Zitieren - Direktlink - ] |
23.11.2005, 14:31 Uhr fisch08 Posts: 692 Nutzer |
> Nee, Angst nicht. Finde die Dinger nur unhandlich und läßtig. Hm. So schlimm sind die nun auch wieder nicht. Hat man sich einmal daran gewöhnt, klappt das soweit. > An Void* habe ich gar nicht gedacht... Der void* ist halt nicht an einem Typ gebunden. Für dein Fall vielleicht passend, aber das hängt von deiner MCU ab und wie viel RAM-Speicher du hast. Ich hatte vor einiger Zeit mal das Problem, dass ich zu wenig RAM Speicher hatte (gesamt 4 KByte), aber das Busprotokoll brauchte zuviel. Somit waren mir insoweit bereits die Hänge gebunden, wenn ich nur eine Unterfunktion aufrufen wollte. Das war ein Mistcode... Wie gesagt: Pointer sind auch nur Strukturen und Arten, an die man sich gewöhnen kann/muß. C ist nunmal maschinenorientiert. So'n Pech aber auch. ;-) Gruß Fisch08 -- Um den Spamfilter zu umgehen: Bei direkter Antwort per Mail bitte "[Amiga]" ins Subject: Nur so 100%ige Garantie, dass man nicht im Filter landet! [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > C - Strukturen strukturieren ... | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |