Variablen im RAM positionieren

Gast #5273
Lesenswert?

Moin!

Habe an einem AT90S8515 32K XRAM hängen und frage mich nun, ob und wie 
ich den GCC dazu bringen kann, bestimmte Variablen im internen und 
andere im externen RAM anzulegen, da ich vermute, dass der Zugriff auf 
externes RAM langsamer ist, als auf internes RAM.

Gruß
Frank
Admin Persönliche Seite #5274
Lesenswert?

Hallo Frank,

schau dir mal im Verzeichnis /avrgcc/avr/lib/ldscripts die Dateien mit 
der Endung .x an. Wenn du
data   (rw!x) : ORIGIN = 0x800060, LENGTH = 512
in
data   (rw!x) : ORIGIN = 0x800060, LENGTH = 8k
änderst, sollte der Compiler in diesem Fall z.B. ein externes RAM von 
8kB Größe verwenden können. Davor muss es wahrscheinlich durch Setzen 
des entsprechenden Bits im MCUCR aktiviert werden, ist aber auch möglich 
dass das der Compiler automatisch macht!

Gruß
Andreas
Gast #5275
Lesenswert?

Hallo Andreas,

danke für die Antwort, aber die Linker-Geschichte ist mir bekannt. Es 
geht darum: Wie kann ich dem Compiler sagen, dass er z.B. die Variable 
uint8_t IntRAM  in das MCU-interne RAM, die Variable  uint8_t ExtRAM 
dagegen in das externe RAM packen soll? Hintergrund der Frage: Externes 
RAM ist doch vermutlich langsamer als internes RAM, oder?

Gruß
Frank
Gast #5277
Lesenswert?

Der Zugriff auf externes RAM benötigt 3 Takte (siehe Datenblatt 8515, 
S.53 bzw. S.83) ohne Waitstate. Für einen schnelleren Zugriff auf 
internes RAM wäre ein davon unabhängiger schnellerer Bus nötig. Ich kann 
ich mir nicht vorstellen, daß Atmel sowas gemacht hat. (Zumal auf S.53 
steht, daß bei internenRAM-Zugriffen Spikes auf ALE auftreten können -> 
nur ein Bus). Also vermute ich daß internes und externe RAM von der 
Zugriffszeit identisch sind. Liege ich falsch, so möge man mich 
korrigieren.

André.

--
CAN@home - http://www.CANathome.de - Hausautomation mit AVR + CAN
Gast #5281
Lesenswert?

Hallo Lanius,

vielen Dank für den Hinweis! Wer lesen kann, ist doch klar im Vorteil 
;-)

Ich habe zwar ganz andere Seitenzahlen, aber fest steht: internes RAM: 2 
Taktzyklen, externes RAM 3 oder (mit WaisState) 4 Taktzyklen.

Damit wären wir wieder bei meiner Eingangsfrage, ob und wie man die 
Ablage der Variablen unter gcc beeinflussen kann...

Gruß
Frank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren