Forum: Mikrocontroller und Digitale Elektronik was heißt eigentlich "iwr"


von h2oundco (Gast)


Lesenswert?

Hallo,

bin auf der Seite 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten#Einfache_Tastenentprellung_und_Abfrage
im Code:
[avrasm]
.def iwr0      = r1
.def iwr1      = r2
[avrasm]
draufgestoßen.

von hans (Gast)


Lesenswert?


von Uwe .. (uwegw)


Lesenswert?

InterruptWorkRegister

von h2oundco (Gast)


Lesenswert?

Danke für die schnelle Antwort

von Peter D. (peda)


Lesenswert?

Wenn man r0, r1, r... schreibt wird der Code sehr schnell 
unübersichtlich.
Daher legt man fest, welche Register welche Funktion haben sollen und 
gibt ihnen Namen. Und da man schreibfaul ist, kürzt man die Namen ab.


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Daher legt man fest, welche Register welche Funktion haben sollen und
>gibt ihnen Namen. Und da man schreibfaul ist, kürzt man die Namen ab.

Wird lustig, wenn es mehr Funktionen, als Register gibt. Und
.def iwr0      = r1 ist auch nicht sehr klug gewählt -> Ergebnisregister 
von 'mul' und Konsorten. Da hat jemand den Unsinn von GCC nachgemacht.

MfG Spess

von Martin (Gast)


Lesenswert?

> .. kürzt man die Namen ab ...

... und dann wird es wieder unübersichtlich.

Bezeichner müssen aussagekräftige Namen haben und der Quellcode 
informative Kommentare.

von Peter D. (peda)


Lesenswert?

spess53 schrieb:
> Wird lustig, wenn es mehr Funktionen, als Register gibt.

Damit ist die Funktion von Registern gemeint, wie:
- Arbeitsregister für Interrupts
- SREG-Sicherungsregister
- Arbeitsregister fürs Main
- Argumentenregister
- Returnwerteregister
- Zählregister in Schleifen

spess53 schrieb:
> .def iwr0      = r1 ist auch nicht sehr klug gewählt

Das ist eben der Vorteil von Definitionen, braucht man die 
Multiplikation, kann man das leicht und nur an einer Stelle ändern.


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Damit ist die Funktion von Registern gemeint, wie:

Habe ich auch gemeint. Aber ab einer bestimmten Programmgröße kann ein 
Register nicht nur eine Funktion haben. Z.B. eine SQRT64-Funktion die 
etwa 2/3 der Register benötigt. Das schmeißt sofort dein schönes Schema 
über den Haufen. Und solche Funktionen habe ich mehrere. Bei 
Spielzeugprogrammen von Anfängern mag das vielleicht hilfreich sein. 
Aber sehr schnell kann aus der Lust Frust werden. Aber das soll jeder 
selbst entscheiden. Ich programmiere lieber, als meine Zeit mit dem 
Umdefinieren von Registern oder movw-Orgien zu verschwenden.

MfG Spess

von Peter D. (peda)


Lesenswert?

spess53 schrieb:
> Z.B. eine SQRT64-Funktion die
> etwa 2/3 der Register benötigt. Das schmeißt sofort dein schönes Schema
> über den Haufen.

Nö.
Dann benutzt Du eben nur für diese Funktion einige Register anders.
Die Regeln sollen helfen, einen Großteil der Aufgaben zu erleichtern, 
sie müssen garnicht für alles passen.
Der Mensch ist kein Compiler, er darf die Default-Regeln auch mal außer 
Kraft setzen.
Nur die Interruptregister sind exklusiv reserviert.

Man kann es aber auch wie ein Compiler machen, wenn die Register für 
Parameterübergabe nicht mehr ausreichen, nimmt er eben SRAM.

Man muß nicht zu 100% optimalen Code schreiben. Man sollte immer Aufwand 
und Nutzen abwägen. Daher schreibe ich auch große Programme in C.
In Assembler ist für mich bei bei 2kB Flash die Schmerzgrenze erreicht.


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Nö.
>Dann benutzt Du eben nur für diese Funktion einige Register anders.

Die Funktion liegt aber in einer Lib, die von mehreren Programmen 
benutzt wird. Eigene Defs in einer Lib erzeugen beim AVR-Assembler2 
Warnungen und, wenn ich mich recht erinnere, beim AVR-Assembler1 sogar 
Fehler. Die  Verwendung zusätzlicher Libs macht dann das Chaos perfekt.
Also verbietet sich für wiedervewendbaren Code die Benutzung von .def. 
Und damit wird die Ausnahme zu Regel.

>Nur die Interruptregister sind exklusiv reserviert.
?

>In Assembler ist für mich bei bei 2kB Flash die Schmerzgrenze erreicht.

Wenn ich z.B. alle Routinen meiner GLCD-Lib für T6963 einbinde, wären 
davon schon 1,5kB weg, ohne eine Codezeile geschrieben zu haben. Sagt 
also nichts über den wirklichen Programmieraufwand aus.

MfG Spess

von Peter D. (peda)


Lesenswert?

spess53 schrieb:
>>Nur die Interruptregister sind exklusiv reserviert.
> ?

Das Main darf sie nicht benutzen, da ja jederzeit ein Interrupt 
zuschlagen kann und diese dann zerstört.
Interruptregister gehören nur den Interrupts, damit diese nicht mit 
Push/Pop-Orgien wertvolle CPU-Zeit verplempern.
In C geht das nicht, daher dauern Interrupts deutlich länger.


spess53 schrieb:
> Wenn ich z.B. alle Routinen meiner GLCD-Lib für T6963 einbinde, wären
> davon schon 1,5kB weg, ohne eine Codezeile geschrieben zu haben.

Nun, die kommt ja nicht aus der Luft geflogen, sondern muß auch erstmal 
geschrieben worden sein.
Ich würde sowas nie in Assembler schreiben. Schon allein, um sie auf 
anderen MCs (Z.B. 8051, Cortex-M3) sofort verwenden zu können. Zum 
mehrmals neu Schreiben und Debuggen habe ich definitiv keine Lust.


Peter

von spess53 (Gast)


Lesenswert?

Hi

>Das Main darf sie nicht benutzen, da ja jederzeit ein Interrupt
>zuschlagen kann und diese dann zerstört.

Was hat das mit der Verwendung von .def zu tun? Abgesehen von der 
Tatsache, das es in den meisten Fällen nicht notwendig ist so 
superschnell zu reagieren sollte man sich die 2,3 Register merken 
können/müssen.
Denn jeder sollte sich im Klaren sein: Entweder selbst definierte 
Registerbezeichner, aber dann konsequent und mit den o.g. 
Nebenwirkungen, oder die vordefinierten Registerbezeichner. Beides zu 
vermischen ist Harakiri

>Nun, die kommt ja nicht aus der Luft geflogen, sondern muß auch erstmal
>geschrieben worden sein.

Ja. Aber die Lib ist seit etwa 12 Jahren bei verschiedensten Projekten 
im Einsatz. Das macht 128 Byte Code/Jahr. Pro Projekt noch weniger. Also 
nicht wirklich eine Belastung.

>Ich würde sowas nie in Assembler schreiben. Schon allein, um sie auf
>anderen MCs (Z.B. 8051, Cortex-M3) sofort verwenden zu können. Zum
>mehrmals neu Schreiben und Debuggen habe ich definitiv keine Lust.

Das hat aber jetzt gar nichts mit der Verwendung von .def zu tun.

MfG Spess

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.