Forum: Mikrocontroller und Digitale Elektronik rcall und ähnliches funktioniert nicht


von derwissel (Gast)


Lesenswert?

tag auch

ich bin momentan dabei, mir das programmieren von AVR's anzueignen, 
benutze zu dem zweck das AVR studio, möchte einen ATMega8 programmieren 
und habe da so ein problem:

der befehl rcall wird übersprungen: wenn ich assemble und run auswähle, 
und dann mit F10 jeden schritt einzeln abspule, wandert er vom ende der 
stackpointer initialisierung einfach weiter zur routine reset.. woran 
liegt das?
nochwas: auch ältere programme, bei denen der rcall funktioniert hat, 
funktionieren nun nicht mehr.. was hab ich kaputtgemacht?

dann im anschluss gleich noch ne 2. frage: es ist ja möglich, mit 
.include weitere .asm dateien einzubinden.. nur verändert sich dabei in 
einem anderen programm irgendwie das "hauptfile" also das, welches beim 
assemble zuerst ausgeführt werden sollte.. das sollte "main.asm" sein, 
der assembler fängt aber immer mit "tools.asm" an.. was kann man da tun?

danke schonmal
derwissel

.include "m8def.inc"         ;Befehlssatz für ATMega8 laden



;Definitions

.def temp =r16
.def ram  =r17
.def ctr1 =r18
.def ctr2 =r19
.def ctr3 =r20
.def ctr4 =r21
.cseg

.equ ena=1

;Main

ldi temp, $FF
out DDRD, temp
ldi temp, $3
out DDRB, temp

ldi ram, high(RamEnd)
out SPH, ram
ldi ram, low(RamEnd)
out SPL, ram

rcall init

;LCD

reset:
ldi temp, $00
out portD,temp
ret

von crazy horse (Gast)


Lesenswert?

erstmal gar nichts, F10 bewirkt ein step over, d.h. alles, was sich 
dahinter verbirgt, wird nicht step für step simuliert. F11 macht echte 
Einzelschritte.

von derwissel (Gast)


Lesenswert?

omg das is arm.. aber naja..

hat denn noch jemand ne idee warum diese verknüfungen zwischen den 
programmen nicht klappen? habs mittlerweile nochmal aber mit den 
gleichen namen für die files getestet.. das will einfach nicht gehen.. 
ich weise ihm als initial file main.asm zu, aber egal was ich mache, er 
startet in tools.asm

von Falk (Gast)


Lesenswert?

Du musst im Project Explorer die gewünschte Datei als Hauptdatei 
festlegen, da gibts ein Menu (Rechte Maustaste?) "Set assembler entry 
file" oder so.

MFG
Falk

von D. W. (dave) Benutzerseite


Lesenswert?

Stehen die .include-Anweisungen am Anfang oder am Ende von der 
Hauptdatei?

von Topsoft (Gast)


Lesenswert?

Hallo,

die Sprungmarke Init ist bei dir nicht vorhanden, gehe aber mal davon 
aus das du sie hier nur nicht gepostet hast. Sonnst würde es ja auch zu 
einem Compiler Fehler kommen. Wenn ich die Marke einfüge kann ich das 
Stück Programmcode im Simulator nachvollziehen, alles funzt wie zu 
erwarten.

Gruß Topsoft

von derwissel (Gast)


Lesenswert?

also: im project explorer ist als entry file die main.asm angegeben, und 
die includes stehen am anfang (ich kenns nur so?)
trotzdem wird halt die tools.asm scheinbar als entry file benutzt..

@topsoft: crazy horse hats ja schon gepostet, war falsche 
programmbenutzung XD
das geht jetzt auch alles

von Uwe (Gast)


Lesenswert?

Hi!
.include-Anweisungen werden da ausgeführt wo sie stehen.
Definitionen sollten schon am Anfang stehen, andere Programme an genau 
der Stelle wo sie eingefügt werden sollen.

Viel Erfolg, Uwe

von derwissel (Gast)


Lesenswert?

sauber das geht danke

so jetzt tritt ein neues problem zutage:

ich benutze im main.asm einen rcall, der in dem file lcd.asm eine 
routine anspricht, die wiederum per rcall routinen aus tools aufruft.. 
die ret's von diesen routinen bringen mich aber direkt ins main.asm, was 
nicht so soll..
nochmal in code

main.asm
rcall init
anderes file
init:
rcall wait5ms
anderes file
wait5ms:
ret -> geht nach rcall init zurück

ich würde mir das so erklären, dass da der stackpointer nicht greift..
was macht man da? stackpointer in die betreffenden .asm files einbauen?

oder liegts an was anderem

von Karl H. (kbuchegg)


Lesenswert?

das liegt mit Sicherheit an was anderem.

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.