Forum: Compiler & IDEs STS und hi8() in AVR-GCC assembler


von Fabian B. (fabbraun)


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

von Fabian B. (fabbraun)


Lesenswert?

hallo zusammen

man merkt wirklich dass ich schon lange nicht mehr mit meinem AVR
gespielt habe.
VERGESST ALLES WAS ICH GEFRAGT HABE!!! eigentlich müsste man dieses
post löschen, ist ja peinlich :-(

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.