mikrocontroller.net

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


Autor: Jannis C. (kabelwurm)
Datum:

Bewertung
0 lesenswert
nicht 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.
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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jannis C. (kabelwurm)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
    unsigned char tmp = 1;

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jannis C. (kabelwurm)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht alles im AVR-GCC-Tutorial.

Autor: Jannis C. (kabelwurm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super
past, das Programm ist fast fertig.
Danke an alle.
Gruß Jannis

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.