Volani funkci v C pres tabulku vektoru
Petr Labaj
labaj na volny.cz
Středa Březen 28 01:41:27 CEST 2012
Diky.
Takze myslite, ze neexistuje varianta skakat primo podle te tabulky
vektoru (coz by v assembleru urcite slo jako indirect call), ale musim
to z te Flash vytahat do RAM (do tech pointeru) a volat to az pres ne.
Myslel jsem prave jestli neexistuje nejaka konstrukce, ktera by v C
udelala nejak elegantne ekvivalent toho indirect call podle konstaty
ve Flash.
PL
*************************************
From: "Miroslav Šinko" <sinkomiro na gmail.com>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Wednesday, March 28, 2012 1:31 AM
Subject: Re: Volani funkci v C pres tabulku vektoru
Par poznamok bez testovania:
zadefinujte si typ pointera na funkcie. nie je to nutne, ale sprehladni:
typedef void(*fpFunc1)(int par1);
typedef int (*func2)(int par1, char *par2);
vytvorte instancie pointerov:
fpFunc1 pFunc1;
fpFunc2 pFunc2;
do pointerov teraz treba priradit adresy z tabulky, toto asi z hlavy
nedam celkom spravne. nejak takto:
pFunc1 = (fpFunc1)*(0x100000);
pFunc2 = (fpFunc2)*(0x100004);
vsetky 3 predchadzajuce kroky sa daju napisat v jednom riadku na
funkciu, ale by to bolo neprehladne.
potom volanie:
pFunc1(par1);
iRet = pFunc2(par1, "par2");
miro
On 28. 3. 2012 0:59, Petr Labaj wrote:
> Potreboval bych pres tabulku vektoru volat v C knihovni funkce, ktere
> budou ulozene nekde ve Flash.
>
> Vyrobit tu tabulku vektoru na definovane adrese snad nebude moc
> velky problem, v linker scriptu tomu vyrobim sekci na pevne adrese
> a udelam tu tabulku treba v ASM:
>
> .section ".vectors"
> .long func1
> .long func2
>
> Ale jak pak ty funkce volat z jineho programu v C, kdyz jedine co vim je,
> ze funkce maji prototypy napr.
>
> void func1 (int par1);
> int func2 (int par1, char *par2);
>
> a ze tabulka vektoru zacina na absolutni adrese treba 0x100000, tedy
> ze adresa funkce func1 je ulozena na 0x100000 a adresa funkce func2
> je na 0x100004.
>
> Diky za kazdy tip.
> PL
Další informace o konferenci Hw-list