www.mikrocontroller.net

Forum: Compiler & IDEs Mit Sprungmarke in Assembler rechnen


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche ein Assembler Programm mit einer Sprungtabelle als
Assemblerprogramm in ein C Programm (AVR GCC 4.1.1) einzubinden.
Im orginalen Programm in AVR Studio Assembler funktionierte das:

subi ZL, low(-comp)
sbci ZH, high(-comp)

comp ist eine Sprungmarke ein paar Zeilen weiter unten in derselben
Funktion.

Das ganze habe ich schon an den GCC Assembler angepasst:

subi ZL, lo8(-comp)
sbci ZH, hi8(-comp)

aber anscheinend kann das der Assembler nicht auswerten:

tvgen.S:40: Error: can't resolve `L0' {*ABS* section} - `com {.text
section}
tvgen.S:40: Error: expression too complex
tvgen.S:41: Error: can't resolve `L0' {*ABS* section} - `com'
{.text section}
tvgen.S:41: Error: expression too complex

Ohne das - vor comp funktioniert das ganze (was aber eben ein falsches
Ergebnis liefert).

Als workaround könnte ich comp über ldi erst in Register laden und dann
aufaddieren, aber wiso soll ich Rechenzeit und Register für Operationen
verschwenden die schon zu Compilezeit feststehen ?

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

Bewertung
0 lesenswert
nicht lesenswert
Schreib mal lo8(-(comp)), ich glaube mich zu entsinnen, dass das
den Knoten auflöst.

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ja, lo8 und hi8 für die oberen und unteren Bytes.

Gruss

Michael

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Klammern bringen leider überhaupt nichts, das war das erste was ich
ausprobiert hatte. Auch das Makro pm() funktioniert nicht. (Dieses
scheint den Wert nur durch 2 zu teilen, da die Sprungmarken
Byteadressen sind, IJMP aber Wordadressen braucht.

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

Bewertung
0 lesenswert
nicht lesenswert
Schreib mal das ganze Testprogramm hier auf.

Autor: Benedikt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
In Zeile 47&48 auskommentiert.
Ich habe dieses vorübergehend durch den Code in Zeilen 39-45 ersetzt.
Das Ergebnis ist das selbe, nur dass ich das ganze jetzt zur Laufzeit
berechne, was mir nicht wirklich gefällt.

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.