Unique Structure Identifier erstellen



  • Hallo,

    gibt es die Möglichkeit festzustellen, ob 2 Structs den gleichen Aufbau besitzen? Ich kenne die Größe der Structs und weiß wo sie im Speicher stehen. Aber ich weiß nicht, wie der Struct aufgebaut war.

    Bsp.:

    Struct 1:

    typedef struct {
        double groesse;
        double umfang;
    }MyStruct
    

    Struct 2:

    typedef struct {
        double km;
        int stunden;
        int minuten;
    }MyStruct2
    

    In diesem Fall hätten die beiden Structs zwar die selbe Größe, sind intern aber anders aufgebaut. Deshalb kann ich die Werte aus dem Speicher nicht einfach auslesen und die Variablen befüllen. Ich möchte aber irgendwie feststellen, ob Struct2 oder Struct1 verwendet wurde. (Diese Structs sind nur Beispiele. Es können ganz andere und auch eine beliebige Anzahl von verschiedenen Structs auftreten)

    Ich hoffe es wird einigermaßen klar, was ich meine.

    Ich hatte folgende Überlegungen:

    1. Noch ein zusätzliches Feld "Checksumme" in jeden Struct einfügen. So eine Checksumme würde aber immer die Daten miteinbeziehen, die sich ständig ändern können.
    2. Der Benutzer vergibt von Hand eine eindeutige ID für jeden Struct-Typ. Das wollte ich aber grade vermeiden, da sonst unnötige Fehler entstehen können.
    3. Entweder einen Wrapper oder noch ein zusätzliches Feld im Struct einführen, in dem irgend eine Information über den Structure-Typ hinterlegt ist.

    Kennt einer eine Möglichkeit Punkt 3 zu realisieren? Ein einfacher Timestamp scheidet schonmal aus..



  • Was ist dein eigentliches Problem?

    Im Augenblick hast du ein Problem mit deiner Loesung.
    Evtl. gibt es eine bessere Loesung fuer das eigentliche Problem.

    Also, was willst du machen/erreichen?



  • Hey,

    ich habe ja nicht wirklich eine Lösung. Viel mehr eine Idee zur Lösung. Weiß aber nicht wie ich diese umsetzen soll.

    Ich möchte eine Art Library zum Schreiben / Lesen eines Flash Speichers erstellen. Ich habe dazu den Adressraum von sagen wir mal beispielhalber 0000 - FFFF zur Verfügung. Jede Zelle kann ich nur ein paar hunder mal beschreiben. Deswegen habe ich einen Ringpuffer implementiert, der erstmal den ganzen Speicher vollschreibt und wenn er am Ende ist einmal den ganzen Speicher löscht und von vorne beginnt.

    Wenn ich das Steuergerät ausschalte und wieder anschalte,gibt es nun 2 Möglcihkeiten:

    1. Das selbe Programm wie vorher läuft auf dem Gerät. Dann sucht es nach dem letzten Wert, den ich in den Speicher geschrieben habe und liest den wieder aus um interne Variablen zu initialisieren etc.. was auch gut funktioniert.

    2. Ein anderes Programm wurde aufgespielt. Bei dem sehen die Werte die in den Speicher geschrieben und gelesen werden ganz anders aus. Da aber die selben Routinen zum Lesen/Schreiben/Initialisieren wie im ersten Programm verwendet werden, wird wieder der letzte Wert, den ich in den Speicher geschrieben habe gesucht und ausgelesen. Was dann natürlich nicht mehr klappt, da Werte aus dem ersten Programm im Speicher stehen.

    Ich hoffe das kann man verstehen 😃


Log in to reply