AVR-GCC a pointer na funkci
Miroslav Sinko
sinkomiro@rocketmail.com
Úterý Leden 1 23:06:53 CET 2008
Aha, takze beriem spat. GCC to prelozi spravne aj bez pgm_read.
No a teraz k povodnej otazke: ono sa to sprava presne, ako sa ma.
Nechajme bokom, preco sa optimalizatoru zda, ze cyklus nie je potrebny,
hlavne je, ze volatile problem riesi. Ibaze nie je volatile, ako
volatile! Stavim sa, ze ste zapisali:
volatile void (*reply_gen)(void);
Toto ale nie je volatile smernik! Ale smernik na funkciu, ktora vracia
volatile void, co je nezmysel. Preto tie warningy.
Skuste spravny zapis:
void (* volatile reply_gen)(void);
miro
PS: http://kcomputing.com/answers.html :-)
--- Miroslav Sinko <sinkomiro@rocketmail.com> wrote:
> Funkcie lezia vo flash. Aby bolo priradenie adresy funkcie korektne,
> musite minimalne pouzit pgm_read_word.
>
> Skusim sa s tym pohrat, este sa ozvem.
>
> miro
>
>
> --- Jan Smrz <jan.smrz@volny.cz> wrote:
>
> > 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.
> >
> > Kompletni soubory jsou v priloze.
> >
> > Dekuji,
> >
> > J.S.
> >
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping
Další informace o konferenci Hw-list