In C Integer in Register laden und auslesen, was brauche ich dafür?

OP #2081457
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
Gast
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?
Gast
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
Gast
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.
OP
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
Gast
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.
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
OP
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.