www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie und wozu werden die Daten-Register unter C verwendet?


Autor: Sepp -o- (sepp_o)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Salve

Ich verwende meißtens C CodevisionAVR zum Programieren.

Jetzt stellt sich mir eine Frage.

Wie werden die einzelnen Datenregister verwendet?

Werden sie auch bei der Verwendung von unsigned char bzw. unsigned int
Variablen verwendet oder wird bei diesen Variablen dierekt auf den SRAM
zugegriffen?

Mich interresiert es desswegen weil ich mir eine Include erstellen will
um meine LCD-Display's auch aus C herraus ansprechen zu können.
Ich verwende die Assembler-includes von ...HanneS... als Anleitung.

Da ich zur einfacheren Ansteuerung die Datenregister dierekt  verwenden
will/muß, möchte ich wissen in wie weit diese Register beim Arbeiten mit
normalen Variablen und Funktionen verwendet werden.

mfg Sepp

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie C das managt, weiß ich auch nicht.
Aber du musst das nicht (wie ich) über Exclusiv-Register machen. Du
kannst im Prinzip alle Variablen im SRAM halten, nur dauert dann der
Zugriff etwas länger.

Der empfundene "Nachteil", dass dir C nicht freiwillig erzählt, wo es
die Werte speichert ist ja eigentlich ein "Vorteil" von C, dass man
sich darum nicht kümmern muss.

Wenn du in C auf LCD zugreifen willst, dann schau dich mal bei Peter
Fleury um. Ich selbst habe mir das nicht angesehen, aber ich
programmiere auch nicht in C.

...

Autor: Aleksej (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es steht ja alles in der Hilfedatei von CodeVision.
So weit, wie ich mich daran erinnere, sind ja einige Registers fuer
spezifische Aufgaben vom Compiler verwendet, die kann man nicht
ueberschreiben. 4 davon verwendet der Compiler fuer die Uebergabe von
Variablen (so was aehnliches wie Stack), deshalb geht's bei CodeVision
nur einn DWord an die Routine zu uebergeben (deshalb soll man lieber
Pointer einsetzen). Und einige Registers kann man fuer irgendwelche
eigene Zwecke einsetzen.

Autor: Sepp -O- (Sepp_O) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass CodeVision einige Register für seine eigenen Routinen verwendet
habe ich schon rausgefunden.

Leider habe ich in der Hilfe noch nicht gesehen welche genau.
(Wie's aussieht wird immer die Obere Hälfte der Datenregister
verwendet.)

Mich interresiert die Verwendung der Register nämlich auch weil ich
demnächst mit einem AVR-Mikrocontroller arbeiten möchte, welcher neben
den Datenregistern kein SRAM hat(ATtiny15), ich aber sollange es geht
mit C arbeiten möchte.

mfg Sepp

Autor: Sepp -O- (Sepp_O) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@...HanneS...

Ich will die Register bei den LCD-Routinen vor allem dazu verwenden um
aus ihnen einfach boolsche Variablen zu basteln.

PORTD.1 = 1;
und
if(PIND.1 == 1)
{
}
ist doch viel schöner als:
PORTD |= 2;
und
if((PIND & 2) == 2)
{
}

Sowas ist leider nur mit Registern möglich.

Und außerdem muß ich, wenn ich mit dem ATmega15 in C programieren will
sowiso auf die Daten-Register zurückgreifen.

mfg Sepp

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na den Tiny15 solltest du aber zum Anlass nehmen, dich etwas mit ASM zu
beschäftigen. Einfacher als ASM geht es nunmal nicht. Da hast du den
vollen Überblick über die Ressourcen. Und etwas ASM-Wissen wird dir
beim Umgang mit C keinesfalls schaden, C erzeugt auch nur ASM.

...

Autor: Sepp -O- (Sepp_O) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ASM kann ich.
Sogar ziemlich einigermaßen gut ;o))

Es gibt da da leider ein fast unüberwindliches Problem.

Ich bin STINKEND FAUL!!!

Und außerdem lebe ich nach dem Motto:
Wieso einfach (mit ASM) wenn es kompliziert auch fast so einfach(mit C
) ist.

mfg Sepp

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;-)

...

Autor: Sepp -o- (sepp_o)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK du hast gewonnen.

Ich werde jetzt auch teilweise in ASM programieren.

Man kann bei Code Vision AVR zwar auf die Register zugreifen, aber da
hat man nur scherereien.
(Ich bekomme einen Fehler gemeldet, aber leider nicht wo, was, warum.)

Ich werde also doch lieber beim ATtiny15 auf ASM umsteigen.
(Es würde zwar funktionieren ihn in C zu programieren aber dass ist mir
zu stressig.)

mfg Sepp

PS.: Ich raufe mir gerade meine letzten Haare aus.
Dieses ****** LCD Display will sich ums Verrecken nur unter ASM
initialisieren lassen.
(Dabei ist ihm egal ob ich da meinen oder deinen Code verwende.)

Sobald ich aber auf C umsteige werden mir nur schwarze Blöcke
entgegengeworfen.

Ich vermute mal stark dass ich da irgendwo Timingprobleme habe.

Aber irgendwo ist leider eine etwas ungenaue Ortsangabe und ich muß
weiter lustiges Fehlerraten spielen.

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.