Warum Variablen

Gast #62315
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
Gast #62317
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
Gast #62318
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

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