AVR-GCC a pointer na funkci
Miroslav Sinko
sinkomiro@rocketmail.com
Středa Leden 2 15:00:07 CET 2008
--- Jan Smrz <jan.smrz@honeywell.com> wrote:
> >> Skuste spravny zapis:
> >>
> >> void (* volatile reply_gen)(void);
> >>
> >> PS: http://kcomputing.com/answers.html :-)
>
> A vida, dekuji. Zkousel jsem ruzne zapisy toho volatile, ale toto me
> nenapadlo.
No to funguje, pred poslanim som to overil na vasom priklade, prelozene
v GCC 4.2.2 s -O1 a -Os
fa: 29 e4 ldi r18, 0x49 ; 73
fc: 30 e0 ldi r19, 0x00 ; 0
fe: 8b e4 ldi r24, 0x4B ; 75
100: 90 e0 ldi r25, 0x00 ; 0
102: 18 9b sbis 0x03, 0 ; 3
104: 05 c0 rjmp .+10 ; 0x110 <main+0x28>
106: 30 93 61 00 sts 0x0061, r19
10a: 20 93 60 00 sts 0x0060, r18
10e: f9 cf rjmp .-14 ; 0x102 <main+0x1a>
110: 90 93 61 00 sts 0x0061, r25
114: 80 93 60 00 sts 0x0060, r24
118: f4 cf rjmp .-24 ; 0x102 <main+0x1a>
> Logika zapisu pointeru v C mi totiz pri slozitejsich
> zapisech
> nejak unika :-( Pri te prilezitosti bych se zeptal, jak by se
> zapsalo,
> kdybych mel promennou typu napr. long int a a promennou a bych chtel
> pretypovat jako pointer na fci s parametry void vracejici void?
Ja to kvoli svojej vlastnej prehladnosti riesim tak, ze si (spravidla v
headri) vytvorim typ pre pozadovany pointer na funkciu. Napr. typ
pointera na void fn(void):
typedef void (*fpFnc)(void);
pripadne zlozitejsi priklad z praxe :-)
typedef DWORD
APIENTRY(*fpRasGetSubEntryProperties)(LPSTR,LPSTR,DWORD,RASSUBENTRY*,LPDWORD,LPBYTE,LPDWORD,void*,void*,void*,void*);
Potom majme skutocny pointer na danu funkciu deklarovany:
fpFnc fpProc1;
a nejaku premennu:
unsigned long l;
Pretypovanie je jednoduche:
fpProc1 = (fpFnc)l;
miro
____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
Další informace o konferenci Hw-list