2 Befehle in ASM des AVR

Gast #564478
Lesenswert?
• ▲
▼
Hallo,

wie es aussieht mindestens ein Leerzeichen und dann eben der nächste 
Befehl. Zumindest hat er bei mir so nicht gemault und das Programm sah 
noch genauso aus.

PS: sowas habe ich zu 64er Basic-Zeiten gemacht, konnte man 2 Byte 
sparen. :-)

Freiwillig würde ich sowas heute nicht mehr machen, hat keinen Nutzen 
und erzeugt wunderbar unlesbaren Code.

Über die erwähnte Problematik mit Macros bin ich bisher noch nicht 
gestolpert.


Gruß aus Berlin
Michael
OP #564484
Lesenswert?
• ▲
▼
Im allgemeinen mache ich das auch nicht.
Aber ich habe in der Interrupttabelle ORG davorgesetzt, damit die 
Interrupts auch bei einem Controllerwechsel richtig stehen. Und ORG und 
den nachstehenden Sprungbefehl wollte ich auf eine Zeile setzen. Man 
sieht gleich, was zusammengehört und die Programmliste wird kürzer. 
Somit weniger zu scrollen.

mfg
Quehl
Gast #564563
Lesenswert?
• ▲
▼
Hallo,

wenn Du vertrauen zu Deinen Programmen hast ;)
1
;*************** Verktor-Liste ************************
2

3
.CSEG
4
      rjmp    Reset
5

6
.ORG  OC0Aaddr
7
      rjmp    irq_1ms
8
            
9
;*************** Programm-Beginn **********************
10

11
;******************************************************
12
;  Initialisierungsroutine
13
;******************************************************
14

15
.ORG  INT_VECTORS_SIZE
16

17
; Hardware initialisieren
18

19
Reset:
20
      ldi    TEMP_A,low(RAMEND)    ; Stack an das interne Ram-Ende
21
      out    SPL,TEMP_A

ich schreibe nur die Vektoren rein, die ich benutzte.
INT_VECTORS_SIZE ist den AVR-Includes mit der Länge der Vaektortabelle 
belegt.

Ich zerlege meine Projekte sowieso in mehrere Files, dann wird nichts so 
lang zum Scrollen.

Gruß aus Berlin
Michael

OP #565403
Lesenswert?
• ▲
▼
.ORG und Rjmp wollte ich in eine Zeile schreiben, weil ich das 
übersichtlicher finde.

In mehreren Dateien aufteilen sehe ich auch Probleme. Da kann ich nicht 
sehen, welche Register schon vergeben sind, wie die zeitl. Abläufe sind 
u.s.w.. Ich hatte nämlich auch daran gedacht, für jede Aufgabe eine 
Include Datei zu verwenden, aber die Überlagerungen können dann auch zu 
Fehlern führen. Ein Fehler taucht in einer Datei auf, deren Ursache in 
einer anderen Datei liegt. Da kann man aber lange suchen.

mfg
Quehl
Gast #565485
Lesenswert?
• ▲
▼
Hallo,

wird sicher jeder seine Version finden müssen.

Alle Definitionen sind bei mir in einem include, da gibt es feste 
Blöcke, die ich immer benutze und die eben leer bleiben, wenn ich sie 
nicht brauche. Ich habe immer 4 Temp-Register auf r16...r19, von denen 
nur sicher ist, daß in denen nichts sicher ist. ;)

Überschneidungen in dem Sinn kann es nicht geben, weil auch ein µC nur 
an einer Programmstelle zu einer Zeit sein kann. Daten, die über längere 
Programmstrecken gültig sind, werden je nach Zugriffshäufigkeit auf die 
restlichen Register oder in das SRAM gelegt.

Wenn ich dann wirklich mal davon abweiche (Subroutine benutzt die 
Temp-Register, aufrufende Routienen aber braucht die noch), gibt es eben 
push vor dem Aufruf und pop nach der Rückkehr.

Gruß aus Berlin
Michael

#565503
Lesenswert?
• ▲
▼
Wolfram Quehl wrote:

> In mehreren Dateien aufteilen sehe ich auch Probleme.

Ich nicht.

> Da kann ich nicht
> sehen, welche Register schon vergeben sind, wie die zeitl. Abläufe sind
> u.s.w..

Das geht schon. Nur die Register werden zentral definiert, der Code 
kriegt aber seine eigenen Unterfunktionen.

Hier mal ein Beispiel:

Beitrag "Zeit + Temperatur auf LCD mit AVR"


Monsterdateien sind irgendwann nicht mehr lesbar.


Peter

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