- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Array zu groß für Datenerfassung

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311

    Array zu groß für Datenerfassung

    Anzeige

    Powerstation Test
    Hallo Leute,
    ich möchte ein paar Datenwerte aufnehmen (des Typs float) und diese in einem Array speichern. Da es sich um eine enorm große Datenmenge handelt, würde mich interessieren, was es denn noch für Wege gibt, die Daten zu speichern (evtl. im internen EEPROM?).
    Ich habe mal rumgespielt:
    Code:
    float Abc[8192];
    ...führt zu einem Error:
    error: size of array 'Abc' is too large
    Code:
    float Abc[8191];
    ...führt zu keinem Error.
    Mein Bauchgefühl sagt mir, dass ich auf keinem Fall das Array der Größe 8191 benutzen sollte, weil mir nicht klar ist, ob das den Speicher überläuft und mein µC undefinierte Aktionen durchführt.

    Wie würdet ihr erfahrenen Programmierer das anstellen?
    Viele Grüße,
    Simon

    P.S.: ATMega32, avr-gcc (GCC) 4.1.2 (WinAVR 20070525), WinXP Pro, AVR910.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Logo, 8192 * 4 sind ja 32k. Da bilden sich bei einem Mega32 Beulen an der Oberfläche.
    Also, entweder kann man die Zahlen irgendwie komprimieren,
    oder es bleibt nur eine externer Speicher
    oder ein größerer µC
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    ah ok.
    Gut, dann bleiben mir noch zwei Fragen:
    * Ich hätte noch die Pins vom IIC frei. Gibt es (evtl im RN) irgendwo eine Anleitung/Tutorial wie ich einen externen Speicher an den IIC hänge? Welcher speicher wäre da eigentlich sinnvoll? Ich habe viele schreib und lesezugriffe.

    * Ich nehme an, dass die maximale Größe die das Array in Bytes einnehmen darf nur so groß sein darf wie der Speicher (32k) MINUS dem, wass der Programm-Code einnimmt? Oder kann ich den Programmcode vernachlässigen, weil der woanders abgelegt ist (flash)? Wie könnte ich mir das errechnen, wie groß dass Array sein darf ohne dass mein µC abstürzt?

    Hm, sind ja doch mehr als zwei Fragen!
    Vielen Dank,
    vG Simon

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    Die Atmegas haben (anders als bei einem PC) unterschiedlichen Speicher für Variablen und das Programm. Das Programm ist fest im Flash, für variable Werte bleibt dir nur das SRAM und das EEPROM.

    Bei vielen Datenzugriffen sollte man auf den Einsatz des EEPROMs verzichten, da diese Speicherzellen nur ca. 100.000 Mal beschreiben lassen und ferner arg langsam sind.

    Wieviel Platz die jeweiligen Atmegas an SRAM und EEPROM haben, steht in den Datenblättern. der ATMEGA32 hat (wenn ich das richtig im Kopf habe) 2048 Bytes SRAM, das würde also für 512 floats reichen, wenn dein Programm keine weiteren Variablen nutzen würde.

    Zu externem SRAM wurde hier im Forum schon viel geschrieben, ich empfehle die Suchfunktion.

    Wenn du wirklich "enorm viele" Daten speichern möchtest, ist es vielleicht am sinnvollsten, diese Daten per µC auf eine Speicherkarte zu schreiben (eine SD-Card z.B.) und diese Daten dann an einem PC auszuwerten.
    Mein Hexapod im Detail auf www.vreal.de

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Nun, Programmspeicher ist vom SRAM getrennt, die haben miteinander nix zu tun.
    Der Programmspeicher hat 32k (deshalb ATmega32)
    aaaaaber
    er hat nur 2k = 2048 Bytes SRAM. und dort müßte dein Array rein (dann isses aber weg nach dem ausschalten)
    oder 1k = 1024 Bytes EEProm, wenn das Array erhalten bleiben soll.

    SRAM ist für dich daher sowieso nix, und der EEprom faßt nur 256 floats
    Kurzum--> externer Speicher

    Wenn du solche mega-Massen an Daten hast->
    Es sollte möglich sein, MMC-Karten o.Ä mit dem µC zu verbinden, such mal in der Richtung
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Hallo PicNick,
    das dachte ich mir, dass das schon in so eine Richtung hinausläuft
    Ich habe wie gesagt nur die I2C-Ports (SDA,SCL) frei + einen Interrupt Pin (INT0).
    Wäre super wenn's da was gäbe...

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    FÜr I2C gibt's eine Reihe von EEPROMS u. SRAMS
    https://www.roboternetz.de/wissen/in...%C3%9Cbersicht
    Am besten dann bei den Herstellern stöbern, bis du was findest.
    Die I2C Programmierung ist dabei normalerweise nicht problematisch.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Ne blöde Frage: was heißt bei der EEPROM beschreibung immer das "k bit" ?
    Ist damit eine Übertragungsrate gemeint?

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Und noch was: der Übersicht nach gibt es ja nur SRAMs der maximalen Größe von 256 Bytes. Das wäre doch viel zu klein!? Gibt es keine größeren I²C Srams?

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    k-Bit ist die Größe in Einheiten zu 1024
    mit der I2C Rate hat das nix zu tun, das sind die üblichen 100- 400 kHZ

    Du mußt ein bisschen rumsuchen, z.B.
    www.alldatasheet.com

    u. www.reichelt.de

    (EE 24LC 32 P , < 1 € )
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress