STS und hi8() in AVR-GCC assembler

OP #284979
Lesenswert?
• ▲
▼
Hallo Allerseits

Nach Langem habe ich nun endlich wieder einmal Zeit gefunden um mich
mit meinem AVR zu beschäftigen und somit auch wiedereinmal dieses tolle
Forum zu nutzen! :-)

Ich habe ein C-Projekt und nutze AVR-GCC. Da die Interruptroutine in C
zu lange dauerte. Schreibe ich sie nun in Assembler, in einem separaten
*.S-File. Das hat eignetlich alles gut geklappt, jedoch bin ich auf ein
kleines Problem gestossen:

Mit folgendem Code lade ich eine Variable (Pointer auf ein Array), was
natürlich auch funktioniert:
  LDI  r31, hi8(RDSEnc_pcBiphaseOutputSignalNext)
  LDI  r30, lo8(RDSEnc_pcBiphaseOutputSignalNext)


Dieser Pointer (also hier in Assembler das Z-Register) wird dann
genutzt um etwas auszulesen und wird inkrementiert. Der neue Wert
(alter Wert + 1) will ich dann natürlich wieder zurück in den Speicher
der C-Variable schreiben...
  STS  hi8(RDSEnc_pcBiphaseOutputSignal), r31
  STS  lo8(RDSEnc_pcBiphaseOutputSignal), r30

..., was zu meiner Verwunderung nicht funktioniert hatte, und mir diese
Fehlermeldung ausgespuckt hatte:
====================================================
../../RDSInt.S: Assembler messages:
../../RDSInt.S:56: Error: `,' required
../../RDSInt.S:56: Error: register name or number from 0 to 31
required
../../RDSInt.S:56: Error: garbage at end of line
====================================================


Als ich dann das Ganze nach langem herumsurfen auf diese Art probiert
habe...
  STS    RDSEnc_pcBiphaseOutputSignal+1, r31
  STS    RDSEnc_pcBiphaseOutputSignal, r30

..., hat's natürlich geklappt.


Jetzt zu meiner eigentlichen Frage: Wieso funktioniert Variante 1
nicht, und Variante 2 schon? Gibt's dafür eine Erklärung oder ist das
einfach "ist so weil ist so!"?

Danke für eure Hilfe

Fab

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.