mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Inline Assembler


Autor: kuki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
asm volatile ("ldi R30,low(Sprungtabelle)"::);
asm volatile ("ldi R31,high(Sprungtabelle)"::);

Fehlermelung: C:\...\ccQVaaaa.s:1673: Error: garbage at end of line

ich habe dies alles in Assembler programmiert und compaliert, da 
funktioniert das ohne Probleme, jetzt wollt ich den Code in C 
transportieren und dann krieg ich diese Fehlermeldung... Was mach ich 
falsch?

kann ich aus C auf ne Assemlberfunktion zugreifen?!

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Garbage at end of line heisst es so praktisch immer, wenn einfach etwas 
nicht funktioniert.

Konkret vermute ich mal, dass deine Funktionen low(...) und high(...) 
nicht funktionieren. Versuche es mal mit lo8(...) und hi8(...).

Gruss

Michael

Autor: kuki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das wars danke

;-)

Autor: kuki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, zu früh gefreut...
ich wollte den Zeiger Z R30 (low) R31 (high)
auf das Label Sprungtabelle zeigen lassen, wenn ich
asm volatile ("ldi R30,lo8(Sprungtabelle)"::);
asm volatile ("ldi R31,hi8(Sprungtabelle)"::);

ausführe, dann zeigt der Pointer irgendwo hin, aber nicht auf die 
Sprungtabelle :-(

ich hab das mit
ldi R30,low(Sprungtabelle)
ldi R31,high(Sprungtabelle)

in Assembler probiert und da funktioniert die Zuweisung

hat wer noch ein tipp für mich?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum machst du diese Anweisungen noch in Assembler? Das geht doch auch 
recht problemlos in C.

MW

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo genau ist denn "irgendwo"? Wenn da ein Faktor 2 falsch ist, dann ist 
das wieder die alte Geschichte, daß die Adresse in 16-Bit-Worten 
angegeben wurde, im Z-Register aber in Bytes stehen muß. Könnte es das 
sein?

Autor: kuki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mciahel Wilhelm: der Assembler-Code sind etwa 600 Zeilen, aber diese 
beiden Funktionieren nicht
@ Philipp:
also er sollte auf 0x057A zeigen
aber zeigt auf 0x0AF4

da ist der Faktor 2 dazwischen...

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.