Při pokusech s programováním v C jsem narazila na problém. Mám strukturu a potřebovala bych znát offset některé položky v té struktuře, tak abych ten offset mohla použít v inline assembleru. Překladač mám SDCC.
Struktura vypadá nějak takhle:
Kód: Vybrat vše
struct task_struct {
signed char state;
signed char counter;
char priority;
void * tstack; /* task stack */
int signal;
....
};
Kód: Vybrat vše
__asm
....
xor A
....
ld IX,(#_current)
ld L,A
ld H,A
add HL,SP ; HL = puvodni SP
ld _tstack(IX),L ; Ulozi do current.tstack
ld _tstack+1(IX),H
....
__endasm
S tím _tstack to nefunguje, to linker zahlásí neznámý symbol.
![Sad :(](./images/smilies/icon_sad.gif)
Mohla bych to tam napsat na tvrdo, že to je 3, ale jde mi o to, aby to fungovalo, i když tu strukturu pozměním nebo když změním překladač a ten tu strukturu jinak zapakuje. Zkrátka aby to bylo přenositelné, když už se patlám s tím C.
![Confused :?](./images/smilies/icon_confused.gif)
Poradí prosím někdo, jak to udělat?
Edit: Našla jsem makro offsetof(s, m), ale nevím, jak ho s tím inline assemblerem použít.
![Sad :(](./images/smilies/icon_sad.gif)