mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kontrollerregister R16 bzw R17 in Variable speichern (inline-assembler?)


Autor: Detlev Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen

Kann ich den Inhalt ein Kontrollerregister (assembler) R16 bzw. R17 
mittels Ansi-c in eine Variable speichern. Meine Idee wäre 
inline-assembler aber ich weis nicht wie und ich finde auch keinen 
Forums Beitrag zu diesem Thema

Danke für die Hilfe

Detlev

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für welchen µC in welchem Compiler?

Autor: Detlev Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATMega128 --> IAR aber ich bin auch mit einer Lösung für gcc (WinAVR) 
zufrieden ich benutze beiden

Danke

Detlev

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ANSI-C" kennt keinen Inline-Assembler, auch sein Nachfolger, ISO-C99
kennt sowas nicht.

Die Inline-Assembler zwischen IAR und GCC unterscheiden sich dramatisch,
und in diesem Falle schlägt der GCC den IAR um Längen: beim IAR hat
man keinerlei Möglichkeit, dass der Compiler einem irgendwelche
Parameter des umgebenden C-Codes (wie bspw. die Stelle, an der sich
eine lokale Variable befindet) mit in die Inline-Asm-Anweisung hinein
gibt.  Man muss einfach wissen, wo der Compiler gerade was abgelegt
hat, und dieses Wissen könnte natürlich bereits mit der nächsten
Compilerversion zu Halb- oder Unwissen verkümmert sein.

Beim GCC geht das ungefähr so:
#include <stdint.h>
...
  uint8_t save_r16, save_r17;

  asm volatile("mov %[sr16], r16" "\n\t"
               "mov %[sr17], r17"
               : [sr16] "=r" (save_r16), [sr17] "=r" (save_r17)
               );

Details unter:

http://www.nongnu.org/avr-libc/user-manual/inline__asm.html

Denk aber auch dran, dass das, was für den IAR die Register r16 und
r17 sind, für den AVR-GCC in der Regel die Register r24 und r25
sind.  Vielleicht beginnst du ja lieber damit, dein eigentliches
Problem zu beschreiben.

Autor: Detlev Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke sollte helfen wenn ich noch fragen habe komme ich zurück und 
stelle Sie

Autor: Detlev Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt jetzt jemand eine Seite indem ich asm inline für den IAR Kompiler 
abkupfer oder erlernen kann

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Detlev Neumann schrieb:
> Kennt jetzt jemand eine Seite indem ich asm inline für den IAR Kompiler
> abkupfer oder erlernen kann

Frag' doch bei IAR's Support nach, hast schließlich eine hübsche
Stange Geld für den Compiler bezahlt.

Aber wie schon geschrieben, dort ist das nichts weiter als:
   asm("mov r12, r16");
   asm("mov r13, r17");

Irgendwelche Parameter kennt der meines Wissens nicht.

Autor: Detlev Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und die Lösung ist z.B.

      asm ("STS LWRD((save_R16)),R16");
      asm ("STS LWRD((save_R17)),R17");

wer suchet der findet :-)

Apropo Support meine Version ist so alt da gibt es keinen Support aber 
man muss sich nur zu helfen wissen


Danke für den denk anstoss

Gruß

Daniel

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Detlev Neumann schrieb:
> Und die Lösung ist z.B.
>
>       asm ("STS LWRD((save_R16)),R16");
>       asm ("STS LWRD((save_R17)),R17");

Das geht aber natürlich nur für globale Variablen.

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.