mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR mega 168, AVR GCC, Stackpointer initialisieren


Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja, ich wollte allerdings mein Programm komplett in assembler schreiben!

Autor: Florian Pfanner (db1pf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...dann würde ich den GCC weg lassen und im AVR-Studio bei 'Neues 
Projekt' auf Assembler klicken...

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und weiß keiner wie man das unter AVR GCC macht?

        ldi     temp,  _SP_L_

        out     SPL, temp

        ldi     temp, _SP_H_

        out     SPH, temp





So funktionierts nicht :(

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr-gcc mach folgendes:
     a4e:  cf ef         ldi  r28, 0xFF  ; 255
     a50:  d4 e0         ldi  r29, 0x04  ; 4
     a52:  de bf         out  0x3e, r29  ; 62
     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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,

und was muss ich jetzt genau eintippen, damit ich den mist initialisiert 
bekomme?


Also für SPL und SPH.

Oder macht man das unter dem AVR GCC auch anders?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den SP am oberen RAM-Ende initialisieren macht (u.a.) der 168er beim 
Reset alleine. Das braucht man nicht programmieren. Mal ganz nebenbei.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und du darfst das Assembler-Gerümpel nicht in .c Dateien schreiben. 
Schon klar, oder?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.