Hi Mario
Wenn ich dich richtig verstanden habe, möchtest du im EEProm Telefonnummern hinterlegen, die du vom PC aus dort abspeicherst. Das soll variabel gestaltet sein. Nun, ich hab so etwas ähnliches mal für eine Alarmanlage gemacht, allerdings in Assembler. Der Weg sollte aber der gleiche sein.
Du kannst bspw. Im EEProm eine Speicherzelle für die Anzahl der Strings und eine Speicherzelle für die Länge hinterlegen. Wenn du nicht im Controller die Telefonnummern einträgst, sondern über eine Schnittstelle, ist das kein Problem. Wenn du eine geeignete Eingabemöglichkeit am Controller hast, eigentlich auch nicht.
Angenommen, du möchtest auf den 3. Eintrag zugreifen, dann ist die Adresse 3 * Stringlänge+Offset (Startadresse der Einträge) Ob du dort einen Eintrag findest, ergibt der Vergleich mit „Anzahl Einträge“. Fügst du einen Eintrag hinzu, erhöhst du einfach den Wert in der Variablen für die Anzahl der Einträge. Ein anderer Weg wäre eine verkettete Liste oder ein String, der ein Steuerzeichen enthält. Der Vorteil, die Einträge können unterschiedlich lang sein. Nachteil, eine etwas komplizierte, aber lösbare Berechnung eines Eintrages. Daher schau dir das mal an:
15434*055145555*2354*024313452390*01803423*…
Eintrag 1 ist 15434. Willst du auf den 4. Eintrag zugreifen, dann suchst du die „*“ und zählst einen Index hoch, bis du bei 3 bist. ( der Zähler fängt bei 0 an) Die Zeichenkette bis zum nächsten „*“ ist der gesuchte Eintrag. Natürlich solltest du dir die Anzahl der Einträge merken, um einen Überlauf des Zählers abzufangen. Schwierig wird es, wenn du einen Eintrag im Controller löschen willst. Solange du die Daten vom PC aus überträgst, ist das kein Problem, aber ist die Bedienung im Controller eingebaut, dann brauchst du den Platz vom EEProm auch im Speicher.
Zuerst den EEProminhalt in den Variablenspeicher. Dann den Eintrag suchen und die Länge ermitteln. Also das nächste Steuerzeichen suchen. Danach ein Blockmove, also die Start-Adresse auf das 2. Steuerzeichen, die Zieladresse auf das erste Steuerzeichen und dann soviele Zeichen verschieben, wie noch nach dem 2. Steuerzeichen vorhanden sind. Danach den Bereich bis zum letzten Steuerzeichen entfernen
Vielleicht hilft dir eine kleine Skizze
.
Gruß oldmax