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 ?
Schreib mal lo8(-(comp)), ich glaube mich zu entsinnen, dass das den Knoten auflöst.
Hallo Ja, lo8 und hi8 für die oberen und unteren Bytes. Gruss Michael
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.