Forum: Compiler & IDEs Zeiger in AVRGCC/Assembler


von Peter (Gast)


Lesenswert?

Hallo,

kann mir bitte jemand erklären, wie ich in einer externen
Assemblerfunktion auf die Adresse einer Variable zugreifen kann?

Es geht konkret um eine Assembler-ISR für INT0, die bei Aufruf den
aktuellen TCNT1-Wert in eine Variable schreiben soll.

In etwa so ("Variable" ist unsigned int):

Aufruf der ISR:
...
in r16, TCNT1L
in r17, TCNT1H

st low(Variable),r16   // speichern von r16 in Variable
st high(Variable), r17 // speichern von r17 in Variable
...

Hoffe, mich halbwegs verständlich ausgedrückt zu haben.

Herzlichen Dank!
Peter

P.S.: Bitte nicht mit RTFM antworten, ich sitze jetzt schon seit 4
Stunden über der Einbindung von Assemblerdateien und komme nicht mehr
weiter.

von Peter (Gast)


Lesenswert?

Hallo,

hat sich erledigt, mit lo8(Variable) und hi8(Variable) ins Z-Register
geht's.

Kann man so auch auf struct-Variablen zugreifen?
in etwa:
...
  ldi ZL,lo8(Variable.Var1)
  ldi ZH,hi8(Variable.Var1)

  in r16, TCNT1L
  in r17, TCNT1H

  st Z+, r16
  st Z+, r17
...
(In dieser Form funktioniert es allerdings nicht)

Danke!
Peter

von Peter (Gast)


Lesenswert?

Hat denn niemand einen Rat?

von Jörg Wunsch (Gast)


Lesenswert?

Man kann nicht, da ein struct tag kein externes Symbol ist.

von Peter (Gast)


Lesenswert?

Hallo Jörg,

danke für die Antwort!

Ist es aber vielleicht möglich, auf Arrayelemente zugreifen zu können?

Danke,
Peter

von Rufus T. Firefly (Gast)


Lesenswert?

Wenn Du deren Adresse resp. deren Offset zur Startadresse des Arrays
selber berechnest, dann ja.

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.