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