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
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:
...führt zu einem Error:Code:float Abc[8192];
error: size of array 'Abc' is too large...führt zu keinem Error.Code:float Abc[8191];
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.
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.
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
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
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.
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...
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.
Ne blöde Frage: was heißt bei der EEPROM beschreibung immer das "k bit" ?
Ist damit eine Übertragungsrate gemeint?
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?
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.
Lesezeichen