mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Befehle in ASM des AVR


Autor: Wolfram Quehl (quehl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Beschreibung des Assemblers vom AVR steht, daß man 2 Befehle in 
eine Zeile schreiben kann. Womit werden diese Befehle getrennt? Das 
steht nicht da.

mfg
Quehl

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo steht das mit den 2 Befehlen pro Zeile?

Autor: Wolfram Quehl (quehl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Datei AVRASM.CHM
AVR Assembler 2 Syntax
ganz unten Multiple Instruktions per line

mfg
Quehl

Autor: Michael U. (Gast)
Datum:

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

Autor: Wolfram Quehl (quehl)
Datum:

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

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

.CSEG
      rjmp    Reset

.ORG  OC0Aaddr
      rjmp    irq_1ms
            
;*************** Programm-Beginn **********************

;******************************************************
;  Initialisierungsroutine
;******************************************************

.ORG  INT_VECTORS_SIZE

; Hardware initialisieren

Reset:
      ldi    TEMP_A,low(RAMEND)    ; Stack an das interne Ram-Ende
      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


Autor: Wolfram Quehl (quehl)
Datum:

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

Autor: Michael U. (Gast)
Datum:

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


Autor: Peter Dannegger (peda)
Datum:

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

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.