Forum: Mikrocontroller und Digitale Elektronik Inline ASM probleme


von Thorsten Hut (Gast)


Lesenswert?

Hallo,
ich habe ein Array "volatile werte[100]" und will diese in inlineASM
füllen, vorerst nur einen Wert reinschreiben, leider funktioniert dies
nicht so wie ich es mir vorgestellt habe. Hat vileicht jemand einen
Tipp?


asm volatile(
"ldi XL, low(%0)"        "\n\t"
"ldi XH,high(%0)"        "\n\t"
"LDI  _tmp_reg_, 0x55"  "\n\t"
"ST X+, __tmp_reg__"      "\n\t"
:
:"x" (werte)
);

von Isgul (Gast)


Lesenswert?

hat keiner nen tipp?

von Jan (Gast)


Lesenswert?

Auf eine 16bit-Varibale greift man nicht mit low(%0) etc. zu, sondern
mit %A0 und %B0

von Isgul (Gast)


Lesenswert?

ok, funktioniert aber auch nicht

von Isgul (Gast)


Lesenswert?

woran könnte es noch liegen?

von Isgul (Gast)


Lesenswert?

Oh, mann kann doch nicht sein, daß mi niemand helfen will

von A.K. (Gast)


Lesenswert?

unsigned char t;
    asm volatile(
  "ldi r26,lo8(%1)" "\n\t"
  "ldi r27,hi8(%1)" "\n\t"
  "LDI  %0, 0x55"    "\n\t"
  "ST X+, %0"        "\n\t"
  :
  :"r"(t), "m"(werte));

von A.K. (Gast)


Lesenswert?

Dein Code ging nicht, weil
(a) das _temp_reg_ nicht mit LDI zusammenpasst,
(b) das constraint "x" ein Register beschreibt, nicht eine
Speicheradresse,

Was du evtl. gemeint hast:
    asm volatile(
  "LDI r24, 0x55"      "\n\t"
  "ST X+, r24"         "\n\t"
  :
  : "x"(werte)
  : "r24", "r28", "r29");

von A.K. (Gast)


Lesenswert?

Sorry, "r28", "r29" weglassen, falsches Reg.

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.