Tag, ich bräuchte eine Art Dynamisches Array, welches ständig auf seine belegte Größe(alle Einträge ungleich null) überprüft wird. In diesem Array sollen Daten gespeichert werden, die später dann der Reihe nach abgeholt werden. Ungefähr so: void Save_Data() { //Wenn Daten da if(!(Daten == 0)) { uc_8 i = 0; //solange bis ein leeres Feld gefunden wird und der Eintrag noch nicht //vorhanden ist while(!(Array[i] == 0)) && (!(Daten == Array[i]))) { i++; } //Daten ins Feld schreiben Array[i] = Daten; } } void Data_Process { uc_8 e = 0; while(!(Array[e] == 0)) { e++; } } Könnte das so ungefähr Funktionieren? Ich bräuchte ca. 20 Einträge im Array. In diesem Fall könnte das Array aber beliebig groß? Und e zeigt mir immer die aktuelle belegte Größe im array an.... Oder hat einer ne bessere Idee? Vielen Dank und Gruß
Toni wrote: > Tag, > > Array sollen Daten gespeichert werden, die später dann der Reihe nach > abgeholt werden. Ist die Reihenfolge im Array wichtig? > > void Save_Data() > { > //Wenn Daten da > if(!(Daten == 0)) > { > uc_8 i = 0; > > //solange bis ein leeres Feld gefunden wird und der Eintrag noch nicht > //vorhanden ist > while(!(Array[i] == 0)) && (!(Daten == Array[i]))) > { > i++; > } > > //Daten ins Feld schreiben > Array[i] = Daten; > } > } > > void Data_Process > { > uc_8 e = 0; > > while(!(Array[e] == 0)) > { > e++; > } > } > > Könnte das so ungefähr Funktionieren? Ja, könnte es. Kommt drauf an, welche Nebenbedingungen du noch nicht genannt hast. Aber grundsätzlich spricht nichts dagegen. > Ich bräuchte ca. 20 Einträge im > Array. In diesem Fall könnte das Array aber beliebig groß? Wie lautet die Frage? > Und e zeigt > mir immer die aktuelle belegte Größe im array an.... Ja. Ist aber unter Umständen einfacher, wenn du beim Einfügen einfach dein e hochzählst und beim 'rauslöschen' (auf 0 setzen) wieder runter. > Oder hat einer ne bessere Idee? Kommt drauf an wofür du das Teil brauchst.
> Ist die Reihenfolge im Array wichtig?
Ja, die sollte schon so ein wie die Daten auch reingekommen sind.
Also ich erläuter mal kurz. Ich habe ein Steuerpult an dem sich Geräte
über UART anmelden und Daten austauschen können. Die Geräte besitzen
bestimmte ID's(Kennungen) mit denen sie sich am Steuerpult anmelden. Nur
wenn die ID vom Gerät mit der aktuell eingestellten ID am Steuerpult
übereinstimmt, kann eine Verbindung aufgebaut werden.
Nehmen wir mal den Start an. Das Array ist noch leer, also das
Steuerpult hat noch keine Verbindung mit irgendwas hergestellt und ist
auf Empfangsmodus geschaltet. In diesem Modus besitzt das Pult eine
Standard_ID, welche auch den Geräten bekannt. Bei einer ersten
Verbindung wird die Standard_ID benutzt, welche sich aber direkt nach
dem erfolgreichen Verbinden in die bestimmte ID des Gerätes ändert. Das
Gerät bleibt von nun an nur noch auf dieser ID und versucht nun alle 10
Sekunden sich über diese ID mit dem Steuerpult zu verbinden.
Nun sollen sich mehrere Geräte beim ersten mal mit der Standard_ID
angemeldet werden, und später über ihre bestimmte ID, welche vom
Steuerpult im Array gespeichert wird, erreichbar sein. Mit dem
Steuerpult kann ich dann durch die verschiedenen "bekannten" ID's
wechseln, oder über die Standard_IP weitere Geräte hinzufügen. Eine
gewisse Reihefolge sollte dabei schon gegeben sein.
So, dass ist es was ich vorhabe. Wollte mal hören ob ich mit dem Ansatz
dass hinbekommen könnte, oder ob einer ne bessere Idee hat.
Gruß
Toni wrote: >> Ist die Reihenfolge im Array wichtig? > > Ja, die sollte schon so ein wie die Daten auch reingekommen sind. Dann wirst du nicht umhin kommen, im Array die 'Löcher' zu stopfen wenn eine neue ID dazukommt. Also alle dahinterliegenden Ids nach vorne zu verschieben. > > Nun sollen sich mehrere Geräte beim ersten mal mit der Standard_ID > angemeldet werden, und später über ihre bestimmte ID, welche vom > Steuerpult im Array gespeichert wird, erreichbar sein. Mit dem > Steuerpult kann ich dann durch die verschiedenen "bekannten" ID's > wechseln, oder über die Standard_IP weitere Geräte hinzufügen. Eine > gewisse Reihefolge sollte dabei schon gegeben sein. Dazu brauchst du aber keine bestimmte Reihenfolge im Array. Du musst nur dafür sorgen, dass dieselbe Id nicht ein 2-tes mal vergeben wird. In welcher Reihenfolge diese Id im Array stehen ist doch Jacke wie Hose. > So, dass ist es was ich vorhabe. Wollte mal hören ob ich mit dem Ansatz > dass hinbekommen könnte, oder ob einer ne bessere Idee hat. Wenn du nicht auf eine dynamische Datenstruktur (Liste) ausweichen willst, ist das so ok. Das heist die Frage lautet eigentlich: Kannst du damit leben, dass eine gewisse maximale Anzahl an Geräten möglich ist, die fix vorgegeben ist, oder möchtest du das vermeiden. Im ersten Fall ist ein Array mit einer 'Array-Index nicht vergeben' Kennung keine schlechte wahl. Im zweiten Fall müsste man auf etwas dynamisches (dynamisch allokiertes Array, Liste, ...) ausweichen. Ob die Reihenfolge im Array wirklich die Reihenfolge der Anmeldung wiederspiegeln soll, würde ich mir noch gut überlegen. Wenn es keinen triftigen Grund dafür gibt, lass diese Anforderung fallen (OK. Bei 20 Einträgen spielt ein bischen Array Umsortieren noch keine grosse Rolle). Bsp. Es haben sich 7 Stationen angemeldet und zwar in der Reihenfolge: 5, 8, 2, 1, 10, 12, 3 Dein Array sieht dann so aus +---+---+---+---+---+---+---+---+---+ | 5 | 8 | 2 | 1 | 10| 12| 3 | | | +---+---+---+---+---+---+---+---+---+ meldet sich nun Station 2 ab, dann muss das Array nach der Abmeldung so aussehen: +---+---+---+---+---+---+---+---+---+ | 5 | 8 | 1 | 10| 12| 3 | | | | +---+---+---+---+---+---+---+---+---+ * Es sind nur noch 6 angemeldete Stationen * Die Stationen 1, 10, 12, 3 wurden im Array um jeweils eine Stelle nach vorne kopiert, damit die Lücke, die durch den Ausfall von 2 entstanden ist, geschlossen wird. Dafür hast du aber den Vorteil, dass du bei einer Neuanmeldung nicht lange suchen brauchst. Du weist (in einer extra Variablen), dass 6 Stationen im Array sind, ergo muss eine Neuanmeldung an Arrayposition 6 kommen: 4 meldet sich an +---+---+---+---+---+---+---+---+---+ | 5 | 8 | 1 | 10| 12| 3 | 4 | | | +---+---+---+---+---+---+---+---+---+
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.