AVR mega 168, AVR GCC, Stackpointer initialisieren

Gast #965726
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 #965731
>Hallo, ich wollte mal ebend fragen, ob mir jemand sagen kann, wie ich
>beim AVR GCC in assembler den Stackpointer initialisieren kann.

Das macht der schon für dich. Das musst du nicht in Assembler tun.
Gast #965751
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
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
>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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.