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.