Mega8 SRAM Offset

Gast #64622
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
Gast #64626
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
Gast #64629
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
#64630
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.

...
Gast #64631
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

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