.def und include beim AVR Assembler

Gast #2746167
Lesenswert?
• ▲
▼
Beim Einbinden mit include fremder Quelltexte kommt man nicht umhin mit 
mehrfach definierten Registern zu arbeiten.

.def a1=r16

<include fremderCode.asm>
; Registerdefinition im fremden Code
.def a2=r16

Wenn die Register sauber über den Stack laufen, ist das kein Problem, 
hier wird das Register R16 sowohl über a1 als auch über a2 erreicht.

Meine Frage ist wie man die Warnungen des Assemblers umgeht: vor lauter 
Warungen wegen doppelt definierten Registern findet man die wirklich 
relevanten nicht mehr.

Wie definiert man ohne Warnungen?
#2746262
Lesenswert?
• ▲
▼
Holler,

mein Ratschlag ist, die Definitionen im fremden Code so zu ändern (mit 
Crtl-H: Replace), dass sie gleich den eigenen sind. Danach kannst Du die 
".def"s im fremden Code löschen.
Begründung: Früher oder später wirst im fremden Code etwas ändern 
wollen. Dabei kommst Du garantiert mit den eigenen und den fremden 
Definitionen durcheinander. So nach dem Motto
...
ldi a1,0x01
ldi a2,0x03
add a1,a2    ; Du erwartest als Ergebnis 0x04, heraus kommt aber 0x06
...

Solche Fehler sind dann sehr schwer zu finden.
Deshalb: Wenn überhaupt ".def"s, dann einheitlich im gesamten Programm.

mare_crisium
Gast #2746312
Lesenswert?
• ▲
▼
Hi

>Wie definiert man ohne Warnungen?

Indem man diese .def-Gedödel komplett eliminiert. Für Spielzeugprogramme 
mag das ganz nett sein. Bei größeren Programmen oder bei der Erstellung 
von Librarys ist das nur noch lästig.

MfG Spess
Gast #2746583
Lesenswert?
• ▲
▼
spess53 schrieb:
> Indem man diese .def-Gedödel komplett eliminiert. Für Spielzeugprogramme
> mag das ganz nett sein. Bei größeren Programmen oder bei der Erstellung
> von Librarys ist das nur noch lästig.

Das liegt wohl eher am Programmierstiel der sich gerade bei Assembler im 
laufe der Zeit entwickelt.
Ich finde das "def-Gedödel" ganz praktisch wenn ich z.B. eine Uhr 
programmieren und benenne vorher die Register mit sekunde, minute usw. 
und brauche nachher nicht mehr nachzuschauen in welchem Register die 
Sekunden stehen. Ausserdem lese ich im Quellcode mit einem Blick heraus 
was "inc sekunden" macht, im gegensatz zu "inc r3".

Holler schrieb:
> Beim Einbinden mit include fremder Quelltexte kommt man nicht umhin mit
> mehrfach definierten Registern zu arbeiten.

Assembler ist eben mal ungeeignet um Blind aus mehreren Quellen mit Copy 
und Paste ein lauffähiges Programm zu erstellen.
Falls ich eine Library von einem anderen Programm benutze, muss ich eben 
die defs meinem Stiel anpassen. Das setzt natürlich vorraus, das ich 
(wie immer bei ASM) meinen Hirnschmalz anstrengen muss und das Programm 
analysiere und nachvollziehen kann. Das muss man ja auch wirklich nur 
einmal machen, danach passt die lib in alle nächsten projekte.

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