Forum: Mikrocontroller und Digitale Elektronik Warum Variablen


von Bilderich (Gast)


Lesenswert?

Warum Variablen wenn mir doch Register zur verfügung stehen !?

von Mario (Gast)


Lesenswert?

Variablen sind erstmal einfach Werte welche zur Laufzeit veränderlich
sind. Dazu kann man Register, RAM und EEPROM zählen.

Mit Registern gehen meist mehr Operationen oder zumindest am
schnellsten.

Auf RAM wicht man aus wenn die Register nicht reichen (mehr RAM als
Register ist die Norm) oder es kompliziert wäre Daten dort abzulegen
(Adressierung des RAM über Register, z.B. bei Puffern oder Strings).

EEPROM ist normalerwise schnarchlahm im Vergleich zum Rest, dafür
behält er die Daten auch ohne Strom oder über einen Reset hinaus.

mk2

von Peter D. (peda)


Lesenswert?

"Warum Variablen wenn mir doch Register zur verfügung stehen !?"

Warum Kaffe, wenn ich ne Tasse habe ?

Das eine ist der Inhalt, das andere eine Möglichkeit, wo ich diesen
hinein tun kann.


Peter

von Khani (Gast)


Lesenswert?

Variablen & Co KG

Also, nach Lektüre meine µController und µProzessoren folgendes Urteil
:

Variablen beim Programmieren (denn  nur da gibt es sie) sind Namen für
bestimmte Sachen. Unter diese Sachen fallen Register, Speicherstellen
in RAM, EEPROM und FLASH, Ports - kurz gesagt alles was man will.

Jetzt zu der eigentlichen Frage : Warum soll ich damit arbeiten ?
Für den Programmierer ist es einfacher mit den Variablen zu arbeiten,
da er diesen einen für seinen Zweck sinnvollen Namen zuteilen kann.
Manche Variablen sind dabei schon in der Prozessor- (Controller-)
Architektur festgelegt. Die Architektur ist hier nicht die
Hardwareimplementation sondern der Teil des Prozessors, der für den
Programmierer sichtbar ist. Einige Beispiele : Warum sollte man bei
einem AVR-µController die Variable PORTB verwenden ? Ganz einfach : Das
ist viel leichter, als den Port B irgendwo im Adressbereich des
Controllers unterzubringen. Dann müsste man ja die Adresse kennen und
auf diese zugreifen. Zweites Beispiel : Ich benutze eine Variable
count, mit der ich Schleifendurchläufe zähle. Diese bilde ich
meinetwegen auf das Register R17 ab. Wenn ich jetzt überall R17
hinschreiben müsste, dann wäre das für mich viel unlesbarer.

Variablen werden beim Compilieren in Adressen aufgelöst. Das heißt
diese Namen sind im OpCode nicht mehr vorhanden und können auch nicht
mehr wieder zurück aufgelöst werden (es sei denn es handelt sich um
Architekturvariablen wie Ports oder Counters oder so etwas).

Ich hoffe ich habe da etwas Klarheit in die Sache gebracht.

MfG, Khani

von Mario (Gast)


Lesenswert?

<pingelmodus>
...
Warum sollte man bei
einem AVR-µController die Variable PORTB verwenden ? Ganz einfach :
Das
ist viel leichter, als den Port B irgendwo im Adressbereich des
Controllers unterzubringen. Dann müsste man ja die Adresse kennen und
auf diese zugreifen.
...

PORTB ist eine Konstante. Port B liegt natürlich im Adressbeich des
Controllers (sonst könnte er ja nicht zugreifen) - dank der
RISC-typischen Harvard-Architektur ist es allerdings ein eigener nur
für I/O Register (neben den Addressbereichen für Register, RAM, EEPROM
und Flash). Unter der Adresse "0" können sich beim AVR also
(mindestens?) 4 verschiedene Variablen (bzw. beim Flash Konstanten)
verbergen.

Und der "counter" aus deinem Beispiel ist auch keine Variable,
sondern der NAME der Variablen der vom Assembler in Deinem Fall in R17
abgebildet wird.
</pingelmodus>

mk2
SCNR

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.