mikrocontroller.net

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


Autor: Fabian Braun (fabbraun)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian Braun (fabbraun)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

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.