Forum: Mikrocontroller und Digitale Elektronik Inline Assembler


von Tom (Gast)


Lesenswert?

Hi,

bin gerade dabei ein paar Zeilen Inline-Assembler in meinen C-code 
einzufügen. Leider hab ich von Assembler keine Ahnung.

Alles andere passt, nur diese paar Zeilen bekomme ich nicht hin:

uc_8 *ptr;
uc_8 data;
ptr = (uc_8 *)&buffer;
ptr += counter;
counter++;
data = *ptr;

counter = 0x00;


Wäre super wenn mir jemand helfen könnte. Hab mir schon das AVR-Tutorial 
angeschaut. Doch auch damit haut es nicht hin.

von antworter (Gast)


Lesenswert?

meinst Du

data = buffer[counter++] ??

von Tom (Gast)


Lesenswert?

> meinst Du

>data = buffer[counter++]


Ja genau

von Tom (Gast)


Lesenswert?

Nur weiß ich nicht wie ich diese Zeilen in Assembler schreiben soll...

von antworter (Gast)


Lesenswert?

Das sollte im Rahmen dieses Tutorials auftauchen, bzw. sich von den dort 
genannten Beispielen ableiten lassen:

http://www.nongnu.org/avr-libc/user-manual/inline_asm.html


Viel Erfolg !

von antworter (Gast)


Lesenswert?

Auszug:



...but both versions will fail during the assembly stage of the 
compiler, if you explicitely need Z, like in

ld r24,Z

If you write

ld r24, %a0

with a lower case a following the percent sign, then the compiler will 
create the proper assembler line.



Also genau das, was Du suchst

von Tom (Gast)


Lesenswert?

Kapier ich nicht so recht.

Was würde denn diese beiden Zeilen übersetzt bedeuten?

counter++;

counter = 0x00;

von antworter (Gast)


Lesenswert?

Nimm Dir mehr als 9 Minuten mit dem Tutorial und Du wirst lernen, wie 
man das macht...

von Blair (Gast)


Lesenswert?

dein counter steht ja in irgendeinem register

inc registername (entspricht registername++)
counter=0x00 (selbstredend)

blair

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.