Forum: Compiler & IDEs In C Integer in Register laden und auslesen, was brauche ich dafür?


von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
Ich möchte auf einem Attiny24 einen Integer in das Register R16 
schreiben.
mit Standart C Befehl klapt das aber nicht. Der Compiler meckert.
1
R16 |= (1<<1);
Was muss ich definieren,was deklarien um den Integer zu schreiben und 
später auszulesen?
Beispiel wäre nett.
Als Neulig habe ich erstmal die Suche benutzt, die aber leider nichts 
brauchbares zu Tage förderte.
Gruß Jannis

von Rolf Magnus (Gast)


Lesenswert?

Jannis C. schrieb:
> Hallo,
> Ich möchte auf einem Attiny24 einen Integer in das Register R16
> schreiben.
> mit Standart C Befehl klapt das aber nicht.

In C gibt es keine Register. Die handhabt der Compiler intern für dich. 
Warum glaubst du denn, direkt auf ein Register zugreifen zu müssen?

> Der Compiler meckert.

Und er sagt nur "Fehler", ohne irgendeinen Hinweis darauf, um welchen 
Fehler es sich handeln könnte?

von Oliver (Gast)


Lesenswert?

Die Prozessorregister liegen genauso im Adressbereich, wie die 
IO-Register. Insofern schau dir die makros zu PORTx an, und bau dir eins 
mit der passenden Adresse (steht im Datenblatt).

Wie üblich aber die entscheidende Frage:

Warum?

So etwas macht man, wenn man ganz genau weiß, was man da tut. Als 
Neuling ist das selten der Fall.

Oliver

von Rolf Magnus (Gast)


Lesenswert?

Oliver schrieb:
> So etwas macht man, wenn man ganz genau weiß, was man da tut.

Nein, das macht man gar nicht. r16 wird vom Compiler verwendet, und wenn 
man da am Compiler vorbei eigenmächtig was reinschreibt, stiftet man 
damit heilloses Chaos.

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
1) Ich habe mich als Neuling bezeichnet, weil das meine erste Anwendung 
von Variablen wird.
2)Ich habe mal in einem Assembler-Tutorial gelesen, dass man dierekt 
zugreifen kann. In meinem Jugendlichen Leichtsinn habe ich das 
übernommen.
3)Ich brauche für ein Programm zur Steuerrung einer 
Car-System-Kehrschleife eine Möglichkeit Werte temporär zu Speichen
4)Was für Befehle verwendet man in diesem Fall, wenn man mit Variablen 
arbeitet?
Gruß Jannis

von Rolf Magnus (Gast)


Lesenswert?

Jannis C. schrieb:
> 3)Ich brauche für ein Programm zur Steuerrung einer
> Car-System-Kehrschleife eine Möglichkeit Werte temporär zu Speichen
> 4)Was für Befehle verwendet man in diesem Fall, wenn man mit Variablen
> arbeitet?

Die Lösung steht ja eigentlich schon da: Man definiert eine Variable, 
z.B.
1
    unsigned char tmp = 1;

Die ordnet der Compiler dann automatisch irgendeinem noch nicht 
anderweitig genutzten Register zu.

von Peter D. (peda)


Lesenswert?

Jannis C. schrieb:
> Ich möchte auf einem Attiny24 einen Integer in das Register R16
> schreiben.

Das geht schonmal garnicht.
Integer sind >= 16Bit, die AVR-Register sind aber nur 8Bit.

Und dann laß gefälligst die Finger von CPU-Registern, die gehören allein 
dem Compiler.

Du darfst nur IO-Register und Variablen benutzen. Schließlich willst Du 
ja in C programmieren.


Peter

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
wie verwende ich denn die 8-Bit Register?
Kann ich dann auch schreiben wenn ich erst die Variable definiere und 
dann schreibe:  Variable+1 Geht das?
Was für Operationen gibt es? Und wie sehen die aus?
Kleine Liste wäre nett.
Gruß Jannis

von Silvan K. (silvan) Benutzerseite


Lesenswert?

Steht alles im AVR-GCC-Tutorial.

von Jannis C. (kabelwurm)


Lesenswert?

Super
past, das Programm ist fast fertig.
Danke an alle.
Gruß Jannis

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.