Hallo Zusammen, wie kann ich bei einem ATXmega128A1 folgendes Array in den internen SRAM legen und darauf zugreifen? unsigned char array[24576]; Vielen Dank.
Kann so eine Frage ernst gemeint sein? Wie soll man 25KB in 8KB unterbringen?
OK Sorry, da war ich ein bisschen ungeduldig, dass hätte ich auch noch selber herrausfinden können. Wenn das Array nun max. 8KB groß ist, wie funktioniert das dann?
Da die CPU auch Platz im SRAM fuer den STACK braucht, muss dass Array deutlich kleiner als das SRAM werden... Im Program einfach unsigned char array[<size>] schreiben...
So hat ers ja oben auch schon geschrieben. Wie genau meinst du denn deine Frage überhaupt genau? Wofür brauchst du denn so ein großes Array??
Lasst die Anfänger (z. B mich) doch bitte wissen, was size in diesem Kontext bewirkt/bedeutet. Man kennt "size of", aber nur size?
Achso, <size> soll nur ein Platzhalter sein, und nun dacht ich schon, dass wär der Trick für die maximale Größe, ohne das man was rechnen muss.
Die maximale moegliche Groesse laesst sich nur schwer, wenn ueberhaupt berechen. Interrupts und Funktionsaufrufe brauchen Platz auf dem Stack, und wenn rekursive Aufrufe vorkommen, haengt die noetige Stackgroesse auch noch von den Daten ab.
Erstmal vielen Dank für die Antworten. Ich möchte ein Bild auf einem Display darstellen und es dazu in SRAM speichern. Ich habe jetz auch verstanden das, dass mit dem internen nicht funktioniert. Ich nutze das AVR X-Plained Board und möchte nun das externe SDRAM nutzen und nutze dazu die AVR1312 von Atmel. Nur leider bekomme ich einen haufen an Fehlermeldungen, da einige Sachen nicht definiert sind, wie zum Beispiel EBI_CS_ASPACE_t Wo bekomme ich die fehlenden Definitionen her?
...oder könnte ich das Array auch in Flash legen? Wie kann ich das Flash beschreiben (Befehle)?
Moin 1. Nur blockweise, 2. nur 10.000 bis 1.000.000 mal je nach flash dann ist der flasch im eimer. 3. nur sehr langsam. somit sicher nicht das was du willst. ggf eine alternative mcu?
Ich möchte zur Laufzeit eimalig Daten von einer SD-Karte lesen und ins Flash ablegen und diese dann auslesen und aufs Display schreiben. Ich verspreche mir das, dass lesen des Flashs schneller geht als der Zugriff auf die SD-Karte über SPI. Oder halt die Variante mit dem SDRAM, dass ist ja auf jeden Fall schneller nur bekomme ich beim Compilieren wie oben beschrieben die Fehlermeldungen. Irgendwie drehe ich mich im Kreis und komme kein Stück weiter.
Du denkst, die Daten per SPI zu lesen, ins Flash zu schreiben, wieder auszulesen und am Display anzuzeigen geht schneller, als die Daten per SPI zu lesen und gleich anzuzeigen? Hmmm....????
Wenn ich die Daten einmalig per SPI ins Flash schreibe und dann zum Beispiel zwischen zwei Bildern hin und her wechseln möchte geht das denke ich ein bisschen schneller. Oh man schrieb: > Hol dir doch nen anderen Controller mit ausreichend RAM. Ich habe 8MB externes RAM. Kann es nur leider nicht bedienen weil ich den Code nicht Compilieren kann, weil er einige Definitionen nicht findet und ich keine passende Header finde wo die Variablen definiert sind. Hat noch keiner den Code aus der AVR1312 benutzt?
Matthias Laubnitz schrieb: > Ich habe 8MB externes RAM. Kann es nur leider nicht bedienen weil ich > den Code nicht Compilieren kann, weil er einige Definitionen nicht > findet und ich keine passende Header finde wo die Variablen definiert > sind. Wie wäre es, wenn du dieses Problem erst mal angehen würdest, anstelle dass du dich in noch komplizierteren Lösungen verstrickst?
Das mache ich ja nur leider finde ich keine Lösung und habe daher hier um Hilfe gebeten (siehe oben), aber leider bisher ohne Erfolg und daher bin ich auf die Flash Variante gekommen. Also ich bekomme von AVRStudio5 folgende Fehlermeldungen
20 Sekunden googeln ergibt, dass Atmel offenbar da ein paar Namen geändert hat und es verabsäumt hat, den Driver Code auf neueren Stand zu bringen. Schau ich in meiner älteren WinAvr Installation rein, dann findet sich in iox128a1.h (der Header Datei, die letztendlich durch -include avr/io.h hereingezogen wird) zb
1 | /* Chip Select adress space */
|
2 | typedef enum EBI_CS_ASPACE_enum |
3 | {
|
4 | EBI_CS_ASPACE_256B_gc = (0x00<<2), /* 256 bytes */ |
5 | EBI_CS_ASPACE_512B_gc = (0x01<<2), /* 512 bytes */ |
6 | EBI_CS_ASPACE_1KB_gc = (0x02<<2), /* 1K bytes */ |
7 | EBI_CS_ASPACE_2KB_gc = (0x03<<2), /* 2K bytes */ |
8 | EBI_CS_ASPACE_4KB_gc = (0x04<<2), /* 4K bytes */ |
9 | EBI_CS_ASPACE_8KB_gc = (0x05<<2), /* 8K bytes */ |
10 | EBI_CS_ASPACE_16KB_gc = (0x06<<2), /* 16K bytes */ |
11 | EBI_CS_ASPACE_32KB_gc = (0x07<<2), /* 32K bytes */ |
12 | EBI_CS_ASPACE_64KB_gc = (0x08<<2), /* 64K bytes */ |
13 | EBI_CS_ASPACE_128KB_gc = (0x09<<2), /* 128K bytes */ |
14 | EBI_CS_ASPACE_256KB_gc = (0x0A<<2), /* 256K bytes */ |
15 | EBI_CS_ASPACE_512KB_gc = (0x0B<<2), /* 512K bytes */ |
16 | EBI_CS_ASPACE_1MB_gc = (0x0C<<2), /* 1M bytes */ |
17 | EBI_CS_ASPACE_2MB_gc = (0x0D<<2), /* 2M bytes */ |
18 | EBI_CS_ASPACE_4MB_gc = (0x0E<<2), /* 4M bytes */ |
19 | EBI_CS_ASPACE_8MB_gc = (0x0F<<2), /* 8M bytes */ |
20 | EBI_CS_ASPACE_16M_gc = (0x10<<2), /* 16M bytes */ |
21 | } EBI_CS_ASPACE_t; |
jetzt machst du dein iox128a1.h auf und scrollst da mal durch, ob du etwas ähnliches da drinnen findest. ("Chip select adress space" könnte ein Suchebgriff sein). Wenn ja, dann hast du den Namen auf den EBI_CS_ASPACE_t umbenannt wurde und mit diesem Namen tauscht du dann im Driver Code erst mal aus. (Laut meinen Googel Treffern reicht das. Funktional hat sich offenbar nichts geändert, die Dinge sind lediglich ein wenig anders benannt worden) Und wenn ich mir die Fehlermeldungen so ansehe, dann ist das grob geschätzt immer der gleiche Fehler, der dafür verantwortlich zeichnet: EBI_CS_ASPACE_t heisst nicht mehr so, sondern ein wenig anders.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.