Hallo zusammen, ich habe eine Funktion, bei der es wirklich einmal auf den letzten Takt ankommt. Diese wird als Assembler-Modul geschrieben. In diesem Modul muss ich nun auf Einträge in einer globalen Struktur zugreifen. Wie gelingt das? Beispiel: in global.h ist definiert: struct test{ uint8_t Array[3]; uint16_t Word; }tst; in my_funct möchte ich: extern tst.Array lds temp, tst.Array lds tempB, tst.Array +1 Momentan befürchte ich, dass der Compiler die Position nicht ermitteln kann - obwohl sie eigentlich bekannt sein sollte... Momentan bin ich etwas ratlos. Viele Grüße, Hendrik
henne schrieb: > Hallo zusammen, > > ich habe eine Funktion, bei der es wirklich einmal auf den letzten Takt > ankommt. Diese wird als Assembler-Modul geschrieben. > > In diesem Modul muss ich nun auf Einträge in einer globalen Struktur > zugreifen. Wie gelingt das? > > Beispiel: > > in global.h ist definiert: > > struct test{ > uint8_t Array[3]; > uint16_t Word; > }tst; > > Momentan befürchte ich, dass der Compiler die Position nicht ermitteln > kann - obwohl sie eigentlich bekannt sein sollte... Der Compiler kann das auch nicht bestimmen ;-) Ist aber garnicht nötig Der Zugriff geht einfach per
1 | lds r25, tst+3 ; low-byte von .Word |
Allerdings musst du sicherstellen, daß nicht vielleicht Füllbytes in der Struktur erzeugt werden:
1 | struct test |
2 | {
|
3 | uint8_t Array[3]; |
4 | uint16_t Word; |
5 | } __attribute__((packed)) tst; |
oder genau wissen, wo diese evtl. sitzen und das im Asm berücksichtigen. Als Anhaltspunkt kannst du einfach in die Assembler-Ausgabe des Compilers schauen, zB mit -save-temps bei GCC (s-File). Johann
Danke, Johann! Das hatte ich so auch schon gemacht - nur darf dabei die Struktur von keinem nachträglich geändert und das asm-Modul vergessen werden... Deshalb hatte ich noch Hoffnung, dass es an mir liegt ;-) VG, Hendrik
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.