Forum: Mikrocontroller und Digitale Elektronik Atmel Studio und external RAM


von Christian D. (neo87)


Lesenswert?

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?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Und was soll diese "Mitteilung" bewirken?

von Christian D. (neo87)


Lesenswert?

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

von Sauger (Gast)


Lesenswert?

Mahlzeit,

schau mal hier:
Beitrag "48KB SDRam für gcc auf xplain"
rein.

MfG

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Christian D. (neo87)


Lesenswert?

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?

von Frank K. (fchk)


Lesenswert?

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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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
}

von Christian D. (neo87)


Lesenswert?

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
Noch kein Account? Hier anmelden.