Forum: Mikrocontroller und Digitale Elektronik ab Register r26 kein Benutzerzugriff?


von Haar Schneider (Gast)


Lesenswert?

Hi
habe leider sehr viele Register zu belegen, siehe unten
Aber bei r26 bis r37 meckert der Compiler
"Register already defined by the .DEF directive."

.def temp = r16
.def tempA = r17
.def tempB = r21
.def temp2 = r22
.def temp3 = r23
.def aaa = r24
.def bbb = r25
.def links = r26
.def rechts = r27
.def null = r28
.def eins = r29
.def zwei = r30
.def drei = r31
.def vier = r32
.def fuenf = r33
.def sechs = r34
.def sieben = r35
.def acht = r36
.def neun = r37

welche soll ich denn sonst nehmen?

von Dirk (Gast)


Lesenswert?

Hi,

seit wann hat nen Avr soviele Register?


Gruß,
Dirk

von SiO2 (Gast)


Lesenswert?

siehe <prozessor>.inc

von Andy (Gast)


Lesenswert?

Hi,
was ist den das für ein avr.Hätt ich auch gern mit so vielen
Registern.
bei mir ist bei r31 schluss.
gruss
Andy

von HerrMueller (Gast)


Lesenswert?

Die Register 26/ 27 28/29 30/31   sind als X Y und Z Register in der
Include Datei vereinbart. Man kann sie trotzdem benutzen. Die
Compilermeldung ist nur eine Warnung.   Die höheren Register sind mir
auch nicht bekannt ( bei AVR)

von Jan (Gast)


Lesenswert?

Die Register ab r32 aufwärts dürften nur sehr wenige Controller haben.
Ansonsten ist das nur eine Warnung, dass das Register schon mit einem
anderen Namen belegt ist. Brauchst du im Prinzip nicht zu beachten,
solange du nicht die Register mit beiden Namen ansprichst und so
Durcheinander schaffst.

von Hannes L. (hannes)


Lesenswert?

Wenn du so viele "Variablen" brauchst, warum versuchst du es nicht mit
SRAM? Viele AVRs (aber nicht alle) verfügen über SRAM. Das Datenblatt
des jeweiligen AVRs gibt dir sicherlich Auskunft darüber.

...

von Florian (Gast)


Lesenswert?

Hi. Du hast ja auch noch Register 0-15. Die kannst auch nehmen. Man muß
halt schaun, da bei denen nicht alle Befehle funktionieren.

Ab r26 sind die Register für die Pointer (xl,xh; yl,yh; zl,zh)schon
vordefiniert. Und deshalb sollte man sie auch nicht für andere Zwecke
nehmen.

Warum speicherst du die Register nicht ins Sram ab und liest sie dann
mit einem temp register aus?

Das würde dann so aussehn:



.def temp   = r16
.def tempA  = r17
.def tempB  = r21
.def temp2  = r22
.def temp3  = r23
.def aaa    = r24
.def bbb    = r25

.equ links  = 0x0060
.equ rechts = 0x0061
.equ null   = 0x0062
.equ eins   = 0x0063
.equ zwei   = 0x0064
.equ drei   = 0x0065
.equ vier   = 0x0066
.equ fuenf  = 0x0067
.equ sechs  = 0x0068
.equ sieben = 0x0069
.equ acht   = 0x006A
.equ neun   = 0x006B


Dann kannst du es so machen:

lds temp2,0x0060  ;aus dem Register laden
;irgenetwas berechnen mit temp2
sts 0x0060,temp2  ; und den Wert wieder speichern


Wäre vielleicht sinnvoller

Gruß Florian

von Haar Schneider (Gast)


Lesenswert?

ach es gibt nur 31 ?? was ist denn das für ein schrott? na werd wohl den
plan ändern.

von Bri (Gast)


Lesenswert?

wieso "nur" 31 Register? Auf welchen Prozessoren programmierst du denn
sonst so und wie viele haben die denn?

von Rolf Magnus (Gast)


Lesenswert?

> ach es gibt nur 31 ??

Nein, es gibt 32. Ziemlich viel, nicht?

> was ist denn das für ein schrott?

Hm? Die x86er im PC haben 4 (7, wenn man die Offset-Register
mitzählt).

Dir ist schon klar, daß Register nur da sind, um Operanden und mal kurz
ein Zwischenergebnis abzuspeichern und nicht als RAM-Ersatz für Dutzende
von Variablen?

von Hannes L. (hannes)


Lesenswert?

> ach es gibt nur 31 ?? was ist denn das für ein schrott? na werd
> wohl den plan ändern.

Hmmm... Da hast du wohl "die Rechnung ohne den Wirt gemacht"...

Vielleicht solltest du doch erstmal das Datenblatt lesen...

Wenn man erstmal verstanden hat, dass der Adressbereich

- 16 "dumme" Register (kein immidiate)
- 16 "bessere" Register (incl. Doppelregister/Pointer)
- 32 "hochwertige" (und "schnelle") I/Os (Bit-Zugriff möglich)
- 32 "schnelle" I/Os (Byte-Zugriff mit IN/OUT)
- bis zu 160 "blöde" I/Os (Extendet-I/O im SRAM-Bereich)
- internes SRAM
- externes SRAM via Speicherinterface

hat, dann sollte man damit auch klarkommen.

Welchen AVR benutzt du eigentlich?

...

von Erkan (Gast)


Lesenswert?

> was ist denn das für ein schrott?
Wenn, dann hast Du Schrott in der Birne!
Mach Dich erst mal mit Lektüre vertraut und lerne die Grundlagen bevor
Du irgend wie bescheuert los legts.

von Haar Schneider (Gast)


Lesenswert?

tschulduigung, ist natürlich kein schrott, ist mir mal eben
rausgerutscht :)

aber in der tat braucht man wohl extra sram. nun gut, die vielen
register kann ich mir ersparen, wenn ich den queltext ausweite und ein
bissl mehr "denke".

danke für die infos

von Haar Schneider (Gast)


Lesenswert?

ich nutze den 90s8515 ohne sram

von Simon K. (simon) Benutzerseite


Lesenswert?


von jornbyte (Gast)


Lesenswert?

@ Haar Schneider
Wir haben alle mal angefangen. Nur das Datenblatt sollte man schon vor
dem Posten mal gelesen haben.

von Haar Schneider (Gast)


Lesenswert?

aber atmel ist schon was feines, ne?
hab vorher nur mit PIC zutun gehabt. Wahr sehr viel umständlicher
alles.
Wenn ich da an die Bank-wechsel denke und sie 1:4 Teilung des Taktes.
Da lob ich mir den AVR

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.