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


von Sepp -. (sepp_o)


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

von Hannes L. (hannes)


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.

...

von Aleksej (Gast)


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.

von Sepp -O- (Sepp_O) (Gast)


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

von Sepp -O- (Sepp_O) (Gast)


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

von Hannes L. (hannes)


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.

...

von Sepp -O- (Sepp_O) (Gast)


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

von Hannes L. (hannes)


Lesenswert?

;-)

...

von Sepp -. (sepp_o)


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.

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.