Forum: Mikrocontroller und Digitale Elektronik [AVR] Register R0 und R1 direkt in C oder Inline Assembler


von Vog M. (meiker01)


Lesenswert?

Hallo, ich habe folgende Frage:

Kann ich mit GCC/Atmel Studio direkt auf das Registerpaar R0/R1 
zugreifen oder auch einzeln das Register R0 bzw. R1 verändern?

So etwas wie dem Z-Pointer mit dem Registerpaar R30/R31 wäre super.

Wenn das nicht gehen sollte. Wie kann ich dies mit Inline Assembler 
machen? Die Variable > v_var_r0 < soll in das Register R0 übertragen 
werden. Kann mir bitte jemand die Zeile geben.

Danke.

: Bearbeitet durch Admin
von Stefan F. (Gast)


Lesenswert?

Das würde ich lieber unterlassen, denn die Register werden von C 
verwendet.

Ich möchte dir diese Doku nahe legen: 
https://www.nongnu.org/avr-libc/user-manual/index.html
Im Abschnitt "User Manual" sind viele häufig gestellte Fragen 
beantwortet, so auch deine.

https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage
https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_regbind
https://www.nongnu.org/avr-libc/user-manual/inline_asm.html#c_names_in_asm
https://www.nongnu.org/avr-libc/user-manual/inline_asm.html

von Falk B. (falk)


Lesenswert?

Vog M. schrieb:
> Wenn das nicht gehen sollte. Wie kann ich dies mit Inline Assembler
> machen? Die Variable > v_var_r0 < soll in das Register R0 übertragen
> werden.

Nö, das soll sie nicht. Das ist nur dein Tunnelblick.
Sage, was du INSGESAMT erreichen willst. Siehe Netiquette.

> Kann mir bitte jemand die Zeile geben.

Sim Sala Bim

von Vog M. (meiker01)


Lesenswert?

Ich möchte einen Bootloader schrieben. Dazu muss ich die Register R0 und 
R1 (ein word) die Daten ablegen und mittels Z-Pointer (den ich direkt in 
C ansprechen kann) in passende Adresse von tempieren Page 
(Zwischenspeicher) laden.

Siehe hierzu AVR109 Seite 4. OK, einige werden jetzt schrieben, da gibt 
es doch eine Bibliothek dazu, nimm die doch diese. Ich möchte es gerne 
selbst machen und im Detail auch dann verstehen.

von Falk B. (falk)


Lesenswert?

Vog M. schrieb:
> Siehe hierzu AVR109 Seite 4. OK, einige werden jetzt schrieben, da gibt
> es doch eine Bibliothek dazu, nimm die doch diese. Ich möchte es gerne
> selbst machen und im Detail auch dann verstehen.

Dann nimm reinen ASM oder gescheite ASM-Funkionen. Dein Misch Masch ist 
Unsinn, der Rest der Welt kann das auch richtig.

von Vog M. (meiker01)


Lesenswert?

Falk B. schrieb:

> Sim Sala Bim

ha ha ha

Beitrag #6578755 wurde von einem Moderator gelöscht.
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Vog M. schrieb:
> Ich möchte es gerne
> selbst machen und im Detail auch dann verstehen.

Dann schau dir die Beispiele an, wie man es ggf. mit Inline ASM richtig 
macht. Z.B. den STK500 Bootloader, der auch beim Arduino benutzt wird. 
Siehe Anhang. Die wichtigen "Zutaten" liegen in boot.h vom avr gcc.

Beitrag #6578764 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Vog M. schrieb im Beitrag #6578755:
> Kein Mensch braucht Unsinn von dir


Nunja...



Das R1 ist halt in Gcc das zero Register.

Also ist es in C/C++ immer Null, hat auch so zu bleiben und ist damit 
aus C/C++ heraus nicht sinnvoll zugreifbar.

Jegliches Abweichen davon muss "repariert" werden BEVOR C/C++ das Heft 
wieder in die Hand bekommt, oder derbe Sorgen und Nöte drohen.



Darum hat der Vorredner schon vollkommen recht.

Vielleicht nicht nett genug, für dich, formuliert.....

von Vog M. (meiker01)


Lesenswert?

Ich habe mich gestern Abend wieder in Assembler eingelesen und habe 
meine Frage selbst beantworten können.
Eigentlich wollte ich nun meine Lösung hier präsentieren. Stelle nun 
aber fest, dass ein Post von mir gelöscht wurde.

Wenn ich dort schreibe, dass ich keine unsinnigen Kommentare von Falk B. 
haben möchte, der mich herabsetzt. Ist das nicht nur ein Oberlehrer, 
sondern auch herabsetzend. Polemik bringt er natürlich auch mit seinem 
>Sim Sala Bim<.  Nach unkonstruktiven Beiträge postet er noch Code, die 
mit meiner eigentlichen Frage ziemlich wenig zu tun hat.

Auch  Arduino Fanboy D. bemerkt den schlechten Still von Falk B. auch:
> Vielleicht nicht nett genug, für dich, formuliert.....<



Die Kommentare wie von Falk B. sind in der zwischen Zeit wohl 
akzeptiert. Ich kenne das Forum aus meiner Studienzeit Anfang/Mitte der 
2000. Naja… nicht alles aber vieles war besser…
Was mich etwas erstaunt, dass der liebe Admin nicht alle herabsehende 
Post von Falk B. gelöscht hat, sondern nur meine Gegen-Post dazu. Hätte 
er doch alle löschen, das wäre doch OK.
Ich schaue zukünftige lieber im englisch sprachigen Raum um wie bei 
stack overflow. Die Oberlehrer und Polemik kann ich mir sparen.
Ciao.

Ich schaue hier nicht mehr herein, aber eine Frage zu Falk B.: Weshalb 
gibt es den Inline-Assembler? Ich kann es Ihnen beantworten. Das man 
dies direkt in den C Code hereinschreiben kann. Wenn Sie das unsinnig 
finden…

von Einer K. (Gast)


Lesenswert?

Alles klar!
Keine Fragen mehr!

Du hattest eine echte Scheißidee.
Das haben mehrere Leute versucht dir zu sagen.
Hat dich nicht wirklich interessiert.
Jetzt bist du beleidigt.

So kommt es halt, wenn man sich zu sehr mit seinen Fantasieren 
identifiziert.
Bei schlechten Nachrichten wird dann halt der Bote getötet.

Vog M. schrieb:
> Eigentlich wollte ich nun meine Lösung hier präsentieren. Stelle nun
> aber fest, dass ein Post von mir gelöscht wurde.
Wir sind unwürdig!

Ich danke dir für diese Strafe.
Verbeuge mich vor deiner Weisheit.

Schlag mich nochmal!


Vog M. schrieb:
> Auch  Arduino Fanboy D. bemerkt den schlechten Still von Falk B. auch:
>> Vielleicht nicht nett genug, für dich, formuliert.....
Du irrst, wenn du mein Sprüchlein zu deinen Gunsten interpretierst.

Alles klar!
Keine Fragen mehr!

von Stefan F. (Gast)


Lesenswert?

Vog M. schrieb:
> Ich schaue hier nicht mehr herein

Ok, auf Wiedersehen :-)

von Falk B. (falk)


Lesenswert?

Stefan ⛄ F. schrieb:
> Vog M. schrieb:
>> Ich schaue hier nicht mehr herein
>
> Ok, auf Wiedersehen :-)

Sollte es eher heißen, auf Nimmerwiedersehen?

Oder klassisch. So long, and thanks for all the fish. ;-)

von Stefan F. (Gast)


Lesenswert?

Falk B. schrieb:
> Sollte es eher heißen, auf Nimmerwiedersehen?

Der kommt wieder, du wirst sehen.

von Falk B. (falk)


Lesenswert?

Vog M. schrieb:
> Ich habe mich gestern Abend wieder in Assembler eingelesen und habe
> meine Frage selbst beantworten können.

Hilfe zur Selbsthilfe. Der elementare Kern dieses Forums.

> Wenn ich dort schreibe, dass ich keine unsinnigen Kommentare von Falk B.
> haben möchte, der mich herabsetzt. Ist das nicht nur ein Oberlehrer,
> sondern auch herabsetzend.

Passend zum Wetter.

https://de.wikipedia.org/wiki/Generation_Snowflake

> Polemik bringt er natürlich auch mit seinem
>>Sim Sala Bim<.

Noch ein Tip.

https://de.wikipedia.org/wiki/Humor

> Nach unkonstruktiven Beiträge postet er noch Code, die
> mit meiner eigentlichen Frage ziemlich wenig zu tun hat.

Ansichtssache.

> Ich schaue hier nicht mehr herein, aber eine Frage zu Falk B.:

Dann wirst du die erhellende Antwort leider verpassen.

> Weshalb
> gibt es den Inline-Assembler? Ich kann es Ihnen beantworten. Das man
> dies direkt in den C Code hereinschreiben kann.

Das ist korrekt, wenn gleich unvollständig. Inlineassembler hat sicher 
seine Berechtigung und Vorteile, erfordert aber die Einhaltung 
bestimmter Konventionen. Man kann nicht einfach irgendwelche Daten in 
beliebige Register schreiben, denn damit schießt man dem Compiler ins 
Knie. Ich wage die These, daß Inline-ASM eher mehr Kenntnisse und das 
Einhalten von Konventionen erfordert als 100% ASM in einer reinen 
ASM-Funktion. Von der bisweilen arg kryptischen Syntax ganz zu 
schweigen.

> Wenn Sie das unsinnig
> finden…

Hab ich nie behauptet. Meine Anmerkung bezog sich auf deinen planlosen, 
naiven Misch Masch aus C und ASM.

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.