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
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
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
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
.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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.