Forum: Mikrocontroller und Digitale Elektronik Mega8 SRAM Offset


von Boris (Gast)


Lesenswert?

Hallo und Guten Abend,

ich versuche mittels des Z-Pointers (R30,R31) auf die Daten im SRAM
zuzugreifen. Laut Doku hat das SRAM einen Offset von 0x0060. Also
initalisiere ich die beiden Register folgendermaßen:

ldi r31, hi8(Table + 0x0060)
ldi r30, lo8(Table + 0x0060)

Die Daten sind im MemoryWindow (Data) herrlich anzusehen, nur wenn
ich mittels lpm das Register 0 geladen wird, steht da leider nicht der
erwartete Wert.

Benutzte ich den falschen Offset?
Danke
Gruß
Boris

von Andreas Buhr (Gast)


Lesenswert?

per lpm lädst du aus dem Programmspeicher, also vom Programmcode (Load
Programm Memory).

Aus dem SRAM lädst Du mittels ld, ldd. In den SRAM schreibst Du mit st
std

Andreas

von auch Boris (Gast)


Lesenswert?

hallo boris,
du kannst mit dem befehl lpm üer das register 0 nur aus dem flash
lesen, du must den befehl ld oder lds verwenden.

ich hoffe es hilft dir weiter ??
gruss
boris

von Boris (Gast)


Lesenswert?

Habs mittlerweile auch gemerkt!
Wer lesen kann...

Trotzdem Danke! ;-)

von el gig (Gast)


Lesenswert?

hey!

würde gerne das 1k internal sram vom atmega8 nutzen, hab aber wenig
(bis keine ahnung von asm)...

könntet ihr mir 2 routinen zum schreiben und lesen ins intere sram vom
mega8 mailen, wenn möglich in c (für den gcc, winavr2006) ?
wenn asm, bitte dazusagen wo welche adressen einzutragen sind?


vielen dank&gruss,
peter

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

unsigend char n[1024];

... und voll!

Oder nicht?

von Mike (Gast)


Lesenswert?

und mit n[x] =   kannst du dann sogar geziehlt auch eine Adresse
zugreifen :-)

von el gig (Gast)


Lesenswert?

...bedeutet das, dass ich, wenn ich ganz normale variablen verwende
(bzw. arrays) schon das interne sram nutze?
schade.
hatte gehofft, noch ca 900 chars irgendwo ablegen zu können... der
mega8 hängt sich nämlich bei (sonst kleinem programm) bei einem
char-array von ca 500 werten auf.

das heisst, ich muss auf die etwas umständliche lösung eines ext. rams
zurückgreifen, oder?

aber danke,
peter

von Hannes L. (hannes)


Lesenswert?

Der Mega8 hat neben seinen 32 Registern 1024 Bytes SRAM (das ist schon
recht viel).
Da du in C programmierst, werden alle deine Variablen im SRAM abgelegt.
Jedes Char braucht ein Byte, jedes Int zwei Bytes, bei Arrays schlägt es
richtig zu.
Dann gibt es noch den Stack, der natürlich auch im SRAM liegt und bei
jedem Interrupt oder Funktionsaufruf Platz braucht. Und wenn ich mich
nicht irre, dann führt C noch einen weiteren Stack zur
Parameterübergabe bei Funktionsaufrufen. Auch das braucht SRAM.

Ich würde mal sagen, dass dein SRAM knapp wird und daher dein Stack in
den Variablenbereich wächst, was natürlich zu undefiniertem Verhalten
des Controllers führt. Ein AVR ist kein PC mit unendlichen Ressourcen,
man sollte also effizient mit den wenigen vorhandenen Ressourcen
umgehen und die Programme so schreiben, dass sie nicht mehr Speicher
brauchen als zur Verfügung steht.

Du suchst noch Platz für Chars. Was soll das werden? Sind das
Konstanten (die sich zur Laufzeit nicht ändern, z.B. Menütexte)?
Dann kann man diese im Flash ablegen, das spart SRAM.

...

von Andreas Buhr (Gast)


Lesenswert?

Ja, ganz normale Variablen werden im internen SRAM abgespeichert.

Die Lösung mit dem externen RAM ist sehr umständlich. Nimm einfach den
nächstgrößeren Atmel, dann hast Du Platz :-)

viele Grüße

Andreas

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

>Dann kann man diese im Flash ablegen, das spart SRAM.

oder ins EEPROM...

von Hannes L. (hannes)


Lesenswert?

> oder ins EEPROM...

Richtig...
Nur ist mir dieses im allgemeinen etwas zu schade für Konstanten, die
zur Laufzeit nicht verändert werden. Das nutze ich dann lieber für
Variablen, die auch ein Ausschalten überleben sollen (änderbare
Parameter).

...

von el gig (Gast)


Lesenswert?

...danke Leute für die Antworten, werd weiterprobieren...

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.