AVR mega 168, AVR GCC, Stackpointer initialisieren

Gast #965726
Lesenswert?

Hallo, ich wollte mal ebend fragen, ob mir jemand sagen kann, wie ich 
beim AVR GCC in assembler den Stackpointer initialisieren kann.
Unter AVR Studio habe ich es mit LOW(RAMEND) und HIGH(RAMEND) gemacht.
Das funktioniert hier leider nicht.


Rausgefunden habe ich bereits, dass man statt .def ; #def  schreibt.
Gleiches gilt für equ.


Kann mir vielleicht jemand helfen?
Eingefüht habe ich bisher:
#include <avr/io.h>

Sonst nichts.


Vielen Dank!
Gast #965751
Lesenswert?

Ja, wie gut das ich linux benutze ;)



Ich habe halt nur ein makefile und den AVR GCC auf dem pc. Ausserdem 
Ubuntu.
SONST NIX!


Der Code läuft unter AVR Studio einwandfrei!

Ich brauch halt einfach mal die info wie man den stackpointer in ASM 
Initialisiert bzw. wie die Oberste adresse des Stackpointers heisst...
Persönliche Seite #965754
Lesenswert?

avr-gcc mach folgendes:
1
     a4e:  cf ef         ldi  r28, 0xFF  ; 255
2
     a50:  d4 e0         ldi  r29, 0x04  ; 4
3
     a52:  de bf         out  0x3e, r29  ; 62
4
     a54:  cd bf         out  0x3d, r28  ; 61

RAMEND ist für den ATmega168 0x4ff, SP liegt an 0x3d.

Die Adressen in den Makros der avr/io.h sind die RAM-Adressen der SFRs. 
Für den Zugriff per IN/OUT/SBI/CBI/SBIS/SBIC muss also ein Offset von 
0x20 brachtet werden.
Gast #965755
Lesenswert?

>Ich brauch halt einfach mal die info wie man den stackpointer in ASM
>Initialisiert bzw. wie die Oberste adresse des Stackpointers heisst...

Aus iom168.h

#define RAMEND      0x4FF

Also genauso wie beim Studio. Man sollte im makefile
vieleicht mal den verwendeten Prozessor mit eintragen ?
#965759
Lesenswert?

dude wrote:

> Ich brauch halt einfach mal die info wie man den stackpointer in ASM
> Initialisiert bzw. wie die Oberste adresse des Stackpointers heisst...

Nein, brauchst du eigentlich nicht. Auch wenn dein Projekt nur aus 
Assembler-Sourcen besteht, wird der C-Startup-Code trotzdem dazu 
gelinkt, in dem der Stackpointer initialisiert wird. Du kannst natürlich 
mit einem eigenen Linker-Script arbeiten, aber das einfachste wäre es, 
du nennst deinen Asm-Einsprung "main" und nutzt einfach den 
C-Startup-Code.

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