Hallo, Ich habe an einen Xmega128A1 über das EBI einen 512Kbyte SRAM angeschlossen, dass funktioniert auch soweit. Nur hab ich keine Ahnung wie ich dem Atmel Studio jetzt mitteile das der RAM zu Verfügung steht? Wäre jemand so nett das nem Idioten wie mir zu erklären?
Johann L. schrieb: > Und was soll diese "Mitteilung" bewirken? Naja das der externe RAM als zusätzlicher Data Memory zur Verfügung steht und ich den ganz normal benutzen kann, so wie den internen halt. Wenn ich jetzt zum Beispiel ein Array anlegen möchte was größer ist als der interne RAM bekomm ich nen Error. Also wie teile ich dem ding mit das er das in den externen Packen soll. OMG ich hab echt keine Ahnung O.o
Aha, es gaht also um C und nicht um Assembler? Das ist ja schonmal ne Information. Im avr-gcc muss die Größe eines Objekts in signed 16 Bits passen, kann also also maximal 32767 Bytes sein. Zudem sind Zeiger 16 Bits breit, du kannst per C also 64KiB adressieren. Alles andere muss händlisch erledigt werden, wobei darauf zu achten ist daß das ABI eingehalten wird. Siehe dazu entsprechende Hinweise in der avr-gcc Doku. Den Compiler auf natrive Unterstützung für externes RAM aufzubohren war bislang niemandem wichtig genug — auch nicht Atmel. Von daher wird das im avr-gcc nicht unterstützt.
Johann L. schrieb: > Aha, es gaht also um C und nicht um Assembler? Sry, das hätte ich vielleicht dazu sagen sollen ;) > Im avr-gcc muss die Größe eines Objekts in signed 16 Bits passen, kann > also also maximal 32767 Bytes sein. > > Zudem sind Zeiger 16 Bits breit, du kannst per C also 64KiB adressieren. Okay, 64KiB würden mir vorerst ausreichen. Und um dafür muss ich dann diese Linkeroptionen(Aus oben genanntem Beitrag) "-Wl,-section-start=.data=0x804000" und "-Wl,-defsym=__heap_end=0x80ffff" mit angeben? Hab ich das jetzt richtig verstanden? Wenn ja wo muss ich das im Atmel Studio eintragen? > Alles andere muss händlisch erledigt werden, wobei darauf zu achten ist > daß das ABI eingehalten wird. Siehe dazu entsprechende Hinweise in der > avr-gcc Doku. Werde ich mir mal ansehen. > Den Compiler auf natrive Unterstützung für externes RAM aufzubohren war > bislang niemandem wichtig genug — auch nicht Atmel. Von daher wird das > im avr-gcc nicht unterstützt. Schade eigentlich. geht es den mit einem anderen Compiler?
Christian Dreihsig schrieb: >> Den Compiler auf natrive Unterstützung für externes RAM aufzubohren war >> bislang niemandem wichtig genug — auch nicht Atmel. Von daher wird das >> im avr-gcc nicht unterstützt. > Schade eigentlich. geht es den mit einem anderen Compiler? Mit IAR sicher. fchk
Christian Dreihsig schrieb: > Johann L. schrieb: >> Den Compiler auf natrive Unterstützung für externes RAM aufzubohren war >> bislang niemandem wichtig genug — auch nicht Atmel. Von daher wird das >> im avr-gcc nicht unterstützt. > > Schade eigentlich. Um Andrew Haley zu zitieren: >> "Pointing out that GCC is a co-operative project has to be done from >> from time to time. Some people seem to think that there is a GCC >> master planner who hands out tasks to the hordes of willing drones." Im avr-gcc gibt's ja bereits __memx, das auch Lesen aus dem RAM unterstützt:
1 | #include <stdlib.h> |
2 | |
3 | extern int x[]; |
4 | |
5 | int get_x (size_t i) |
6 | {
|
7 | return i[(const __memx int*) x]; |
8 | }
|
Wer das erweitern möchte, kann zB auf __memx aufbauen und ein __xram oder __ramx implementieren, das auch lesenden Zugriff erlaubt. Der Code wäre dann:
1 | #include <stdlib.h> |
2 | |
3 | extern __xram int x[]; |
4 | |
5 | int get_x (size_t i) |
6 | {
|
7 | return x[i]; |
8 | }
|
Frank K. schrieb: > Mit IAR sicher. Und wenn ich auf den IAR umsteige dann kann ich das ding wie den ganz normalen Internen RAM verwenden?
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.