ANSI-C Datenbank in einen Mikrocontroller



  • Also ich hab 1 MB Ram und 256 KB Festspeicher.
    Festspeicher sind imo noch 10K frei für meine Datenbank.

    Ich weiß zwar nicht, wie das gehen soll, aber ich hab ca Daten von einer
    Größe ohne Indexe oder Zuweisungen von 8800 Byte.

    Und die müssen nun verwaltet werden. Und zwar bekomme ich ja über die RS232
    Anweisungen die dann jeweise zu dem Geräte im Speicher der Datenbank
    zugewiesen werden müssen. D.H. ich hab Pro Gerät einen verbrauch von 2200 Byte.



  • pack nen MB drauf 🙂



  • Neee, mehr kann der Prozessor net mehr verwalten, also Adressieren -.-



  • kann man das nicht switchen?
    nach dem motto nimm daten aus speicherblock eins und mach die datenbankabfrage in speicherblock zwei.
    block eins und zwei je 1 MB 😉



  • Krumnix schrieb:

    Also ich hab 1 MB Ram und 256 KB Festspeicher.
    Festspeicher sind imo noch 10K frei für meine Datenbank.

    dann probier doch mal aus, ob du sqlite in die 10k rein bekommst. ich kann's nicht abschätzen, aber wenn du einen stark optimierenden compiler (keinen gcc!) für deinen mistubishi hast (isses ein m16 bzw m32c?), dann geht's vielleicht. 1mb RAM für die tables usw. sollten aber ausreichend sein.
    🙂



  • wie sehen denn die daten aus die du in ner datenbank ablegen willst? Muss es ne datenbank sein? oder reicht kein Struktur array?



  • Wie die Daten aussehen ist erstmal weitgehenst egal.
    Mein Problem ist, das ich 4 Teilnehmer an einem "Bus" habe.
    4 gleichzeitig.
    Insgesamt können 120 verschiedene Teilnehmer an dem Bus sein.
    Welche 4 Teilnehmer angemeldet sind, wird aber Manuell ausgewählt.

    Jeder Teilnehmer meldet sich über den Bus mit einer ID-Nummer am Anfang des
    Telegramms. Diese hat 4 Stellen. Danach kommt der Datensatz mit einer variablen
    Länge von min 16 bis max 126 Zeichen.

    Die Teilnehmer melden sich aber nur, wenn ich eine Anfrage über den Bus an sie
    schicke, weil über die Schnittstelle nur einer immer "reden" kann.

    Nun haben die ganzen Teilnehmer verschiedene Abläufe, ich nenns mal Schrittketten.
    Nach ablauf eines Schrittes soll der Teilnehmer einen neuen Befehl erhalten und
    dann seine Arbeit machen oder seinen Bericht schicken.

    Diese Abläufe und die Berichte muss ich irgendwo speichern. Und zwar teils
    feste (nach Spannungsverlust noch vorhanden) und teils nur zur Laufzeit (in
    welchem Schritt er war, nach Neuanlauf werden alle Schritte genullt).

    Nur ich weiß imo überhaupt nicht, wie ich da starte. Ich hab da soviel Fragen,
    das ich nicht weiß, wo ich anfangen soll.

    Die Daten, die von den Teilnehmern kommen, werden im Programm an anderen Stellen
    von anderen Funktionen dann ausgewertet, bearbeitet, geändert oder dem
    Teilnehmer wieder zur Verfügung gestellt.

    Hoffe, das man da bissel durchblickt jetzt 😉

    PS: Mit einem Teilnehmer läuft das Gerät ohne Probleme, nur hatte man jetzt die
    Idee, das man 4 Teilnehmer ja verwalten könnte.
    Ich denke aber mal, das für diesen Aufwand der kleine Prozessor überfordert ist.
    Entwerde meiner oder der Mitsubishi ^^



  • Krumnix schrieb:

    Jeder Teilnehmer meldet sich über den Bus mit einer ID-Nummer am Anfang des
    Telegramms. Diese hat 4 Stellen. Danach kommt der Datensatz mit einer variablen
    Länge von min 16 bis max 126 Zeichen.
    ...
    PS: Mit einem Teilnehmer läuft das Gerät ohne Probleme, nur hatte man jetzt die
    Idee, das man 4 Teilnehmer ja verwalten könnte.
    Ich denke aber mal, das für diesen Aufwand der kleine Prozessor überfordert ist.
    Entwerde meiner oder der Mitsubishi

    der misubishi bestimmt nicht. der hat doch 1MB, wie du sagst. diese 4 teilnehmer a 130 bytes kannste locker damit verwalten, auch ohne dbms. ein dbms wär sogar völlig übertrieben dafür. wo ist das problem?
    🙂



  • ~fricky schrieb:

    der misubishi bestimmt nicht. der hat doch 1MB, wie du sagst. diese 4 teilnehmer a 130 bytes kannste locker damit verwalten, auch ohne dbms. ein dbms wär sogar völlig übertrieben dafür. wo ist das problem?
    🙂

    Daß er das Problem nicht schichtweise zergliedert, sondern in eine Schicht packen mag, die möglichst ganze DB- Happen transportieren soll.
    10 kB und "wenig", na ich weiß nicht. 😉
    Im Prinzip ist das ein Netzwerk- Draft, der einfach nicht ausgegoren ist.

    Krumnix, bitte sei so nett, das "Schrittkettenzeugs" samt der "Nullung" zu erläutern, so haben wir nur schlechte Chancen, was Hilfreiches beizusteuern.



  • Naja, jeder Teilnehmer macht unterschiedliche Aufgaben in einer Reihenfolge.
    Also Einschalten, Hochfahren, Messung starte, Messung läuft, Messung Ende,
    Messung aufbereiten, Messungsdatem senden, etc....

    Damit ich weiß, was ich vorher dem Teilnehmer gesagt habe, brauche ich ja sowas
    wie einen Schrittmerker. Jeder Schritt hat dann nur eine Logische Schrittfolge.

    Also wenn er Punkte A ausführen soll, speichere ich z.B. in einen Integer
    ne 5. Logisch daraus kann nur noch die 6 kommen (oder ne andere Zahl dann).
    Wenn also 5 in der Variablen steht, und das Gerät meldet, das 5 fertig ist,
    dann sage ich ihm mache Punkte B, was bei mir dann Schritt 6 bedeutet, etc.

    Gleichzeitig muss ich, jenachdem ob vorhanden oder nicht, die Ergebnisse
    des letzten Schrittes zur weiterverarbeitung im Programm zur verfügung haben.
    Also dafür auch wieder einen Bereich für alle 4 Teilnehmer zur Verfügung
    stellen.

    Das Nullen heißt, das jeder Teilnehmer nach Spannungs-Verlust eh in einem
    festen Schritt stehen muss. Das wäre z.B. die Null dann.

    PS: Sie 1 MB sind nur der RAM. Nach Spannungsverlust ist alles weg. Also habe
    ich erstmal nur die paar KB zur Verfügung. Für das Handling mit den Teilnehmern
    könnte ich es natürlich in den Ram alle legen. Da ja bei Neustart eh alle
    genullt ist, das stimmt.



  • 130 Byte * 4 sind 520 Byte. Die bekommst Du in den 10 KB locker unter.
    Ich würde für jeden aktiver User eine Struktur anlegen wo Status und die
    letzte Nachricht gespeichert werden.

    Eigentlich eher gleich für alle.

    Per Polling kann man die User abfragen. Genial wäre natürlich, die User würden
    ihre Daten selbsttätig aufbereiten und nur die Endscores auf Anfrage senden.


Anmelden zum Antworten