Warum Variablen wenn mir doch Register zur verfügung stehen !?
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
"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
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
<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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.