AVR-GCC a pointer na funkci
Andrej Jancura
hw_aj@zoznam.sk
Úterý Leden 1 21:39:36 CET 2008
Ahoj,
Jan Smrz wrote / napísal(a):
> Zdravim a preji vseho nejlepsiho.
>
> Mam tady kousek kodu a potreboval bych poradit s avr-gcc. Prikladam
> silne ocesany fragment kodu. V podstate by se behem preruseni mela volat
> rutina rep1 nebo rep2 v zavislosti na portu B ctenem v hlavni smycce.
> Problem je ten, ze pri zapnute optimalizaci se prirazeni do promenne
> rep_gen zcela vynecha a ja vubec nechapu proc.
>
> Konkretne kod:
>
> for (;;)
> {
> if (PINB & 0x01)
> reply_gen = rep1;
> else
> reply_gen = rep2;
>
> }
>
> se prelozi takto:
>
> c8: 86 b3 in r24, 0x16 ; 22
> ca: fe cf rjmp .-4 ; 0xc8 <main+0x1c>
>
>
> Nadefinovani reply_gen jako "volatile void (*reply_gen)(void)"
> vygeneruje spoustu varovani o nekompatibilite typu a stale je v kodu
> vynecha. Tak nevim.
Uz si to presne nepamatam, ale mam pocit, ze ten pointer na funkciu mas
nadefinovany nejak cudne. Skus to najprv bez volatile a zatvoriek po *.
Inak, ja by som to riesil bez pointerov priamo cez volanie funkcie.
A.
Další informace o konferenci Hw-list