Forum: Mikrocontroller und Digitale Elektronik C Pointer in Assembler ändern?


von Chris H. (toffer)


Lesenswert?

Hey Leute,
ich stehe gerade auf dem Schlauch. Ich habe folgenden code

.extern cpointer //ist in meinem c-code dann uint_8* cpointer

diese lade ich dann in assembler mit

LDI    ZL,lo8(cpointer)
LDI    ZH,hi8(cpointer)

So nun mach ich

LD    R18,Z+

und jetzt möchte ich den neuen Wert von Z (wurde ja inkrementiert) 
wieder auf cpointer zurückschreiben. Wie mach ich das?

Vielen Dank!

Gruß Toffer

von Hc Z. (mizch)


Lesenswert?

Dein Code macht nicht das, was die Beschreibung sagt.

Damit lädst Du nach Z nicht cpointer, sondern &cpointer (die Adresse von 
cpointer) und liest nicht *cpointer (das, worauf cpointer zeigt), 
sondern direkt das LSB von cpointer (cpointer & 0xff).

Richtig wäre:
1
lds ZL, cpointer
2
lds ZH, cpointer+1  ; Z = cpointer
3
ld r18, Z+          ; r18 = *cpointer++
4
sts cpointer, ZL    ; cpointer++ zurückspeichern
5
sts cpointer+1, ZH

von Chris H. (toffer)


Lesenswert?

Ja das war wohl schon ein wenig spät :D

Vielen dank für deine Hilfe, so gehts!

Gruß Toffer

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.