Forum: Mikrocontroller und Digitale Elektronik ein unklarer Befehl


von Andi (Gast)


Lesenswert?

hi, ich verstehe den folgenden Befehl nicht so ganz

ldi r16, RAMEND
out SPL, r16

da wird das Register mit ramend geladen und dann soll es das niedrige 
byte vom RAM ausgeben.

aber was ist dieses RAMEND??

von Benedikt K. (benedikt)


Lesenswert?

Andi wrote:
> aber was ist dieses RAMEND??

Die Adresse an dem das RAM fertig ist, also die höchste Adresse die vom 
RAM belegt ist.

von John S. (linux_80)


Lesenswert?

Hi,
RAMEND wird in der Include-Datei gesetzt, die zum verwendeten AVR 
gehört.
Mit diesen Zeilen wird der Stackpointer gesetzt, der üblicherweise nach 
unten wächst, deshalb fängt er am Ende an ;-)

von Andi (Gast)


Lesenswert?

also der befehl bewirkt quasi nur, dass ich ab nun unterprogramme 
aufrufen kann, versteh ich das richtig?

von Benedikt K. (benedikt)


Lesenswert?

Genau. Und Interrupts.

von Andi (Gast)


Lesenswert?

na gut. danke euch allen

von Martin .. (xeox) Benutzerseite


Lesenswert?

sollte das bei 8-bit prozessoren nicht so eingegeben werden..?

ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16

lg
xeox

von Benedikt K. (benedikt)


Lesenswert?

Martin ... wrote:
> sollte das bei 8-bit prozessoren nicht so eingegeben werden..?

Kommt drauf an, ob der Controller mehr oder weniger 256Bytes RAM hat 
(bzw. ob der Stackpointer 8 oder 16bit groß ist, denn bei neueren AVRs 
ist der Stackpointer auch bei Controllern mir <128Bytes RAM teilweise 
16bit groß, denn viele AVRs gibt es je nach Typ z.B. mit 128/256/512 
Bytes RAM und bei denen ist der Pointer dann immer 16bit groß).

von spess53 (Gast)


Lesenswert?

Hi

>sollte das bei 8-bit prozessoren nicht so eingegeben werden..?

Nur wenn der RAM > 256 Bytes ist.

MfG Spess

von Martin .. (xeox) Benutzerseite


Lesenswert?

> Nur wenn der RAM > 256 Bytes ist.
eher >= 256 bytes (256=0x0100), was bei 90% der cpu' der fall ist.. ;)

von Benedikt K. (benedikt)


Lesenswert?

Martin ... wrote:
>> Nur wenn der RAM > 256 Bytes ist.
> eher >= 256 bytes (256=0x0100), was bei 90% der cpu' der fall ist.. ;)

Stimmt auch nicht ganz, siehe was ich geschrieben habe. Dazu kommt auch 
noch, dass der RAM nicht bei 0 beginnt.

von spess53 (Gast)


Lesenswert?

Hi

OK. Dann ersetzt 'RAM' mit 'Data Memory'.

MfG Spess

von Benedikt K. (benedikt)


Lesenswert?

Ja. Ich muss mich auch selbst noch korrigieren:
SPH existiert anscheinend doch nur, wenn er gebraucht ist:
Note that the data space in some implementations of the AVR architecture 
is so small that only SPL is needed. In this case, the SPH Register will 
not be present.
Es stört aber nicht, SPH immer zu beschreiben, das macht auch der GCC 
so. Dann ist man wenigstens auf der sicheren Seite, und man muss weniger 
beachten, wenn man die Software auf einem anderen AVR verwendet.

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.