Forum: Compiler & IDEs AVR GCC und inline Assembler


von klaus kloos (Gast)


Lesenswert?

Hallo zusammen

Ich beschäftige mich erst seit kurzem mit dem AVR /GCC und habe ein paar 
Fragen zum inline-Assembler.

Ich will mit einem Zeiger auf einen 16Bit Wert im PRGMEM zugreifen. Also 
so etwas wie PRG_RDB() aber für 16bit
Ich habe es auch fast geschafft, kann aber das zweite Register nicht 
ansprechen.

lengthMin ist die in einem Register liegende Zielvariable, aktRectP der 
Zeiger auf den Programmspeicher.

  _asm_ (        \
    "lpm %[reg0in],z+" "\n\t"      \
    "lpm %[reg1in],z+" "\n\t"      \
    : [reg0out] "=r" (lengthMin)    \
    : [inAdr] "z" (aktRectP), [reg0in] "r" (lengthMin), [reg1in] "r" 
(lengthMin)    \
  );

reg1in sollte das Register über reg0in sein. Wie bekomme Ich das hin?

Gibt eine Möglichkeit die Warnung  über das uninitialisierte lengthMin 
weg zu bekommen, ohne dieser Variablen vorher einen Wert zuweisen zu 
müssen?

Dann habe Ich noch ein Problem in prgmspace.h. Dort wird ein define 
'__AVR_ENHANCED__' angesprochen, das Ich nirgendwo finden kann, das aber 
wohl gesetzt ist. Ich arbeite auf einem Mega16.
Wo kann Ich diese Definition finden?

Vielen Dank schon mal fürs nachdenken.

gruß Klaus

von Joerg Wunsch (Gast)


Lesenswert?

Zum inline-Assembler kann ich Dir nicht viel sagen außer daß
Du Dir vielleicht mal Eric Weddington's vorgeschlagenes neues
Interface für pgmspace.h ansehen kannst.  Hat er meines Wissens
an die avr-libc-dev Liste geschickt, und in deren Archiven kannst
Du über die Homepage des Projektes suchen.

_AVR_ENHANCED_ wird für den »enhanced core« IMHO durch den
Compiler selbst gesetzt.  Das sind alle ATmegas außer dem
ATmega103.

von klaus kloos (Gast)


Lesenswert?

Vielen Dank

Die Mailingliste habe ich gefunden. Ich werde es dort mal probieren.

Gruß Klaus

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.