AVR-GCC a pointer na funkci

Jan Smrz jan.smrz@honeywell.com
Středa Leden 2 10:56:43 CET 2008


Dekuji vsem za odpovedi.

Petr Tomasek wrote:
> On Tue, Jan 01, 2008 at 02:06:53PM -0800, Miroslav Sinko wrote:
>   
>> 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 :-)
>>     
A vida, dekuji. Zkousel jsem ruzne zapisy toho volatile, ale toto me
nenapadlo. 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?

> To porad neresi ten problem, ze avr-gcc v kteresi ze sve 4.x verze
> je buggy natolik, ze pri "optimalizaci" se vykasle na klicove
> slovo "volatile". Me to napr. kod ve tvaru:
>
>    PORTx|=(1<<Pxy);
>    // neco mezi tim
>    PORTx&=~(1<<Pxy);
>
> "zoptimalizovalo" tak, ze prvni zapis na PORTx uplne vyhodilo! :(
>
> P.T.
>   
Asi to bude castecne zalezitost i toho GCC (zkouseno na 4.1.? a 4.2.2).
Kdyz jsem se vykaslal na pointer na fci a nadefinoval to proste jako
"void volatile *regly_gen", tak to vyhodilo stejne (volani fce jsem pak
samozrejme resil jinak). Zkusim jeste ten zapis uvedeny vyse, ale zatim
to resim napsanim "natvrdo" v "asm volatile", cehoz se optimalizace
nedotkne.


Jan Waclawek wrote:
>> Inak, ja by som to riesil bez pointerov priamo cez volanie funkcie.
>>     
>
> Joj, ale ked to je nemoderne a nehodne praveho Ceckara... :-)
>   
On ten uvedeny kod je pouze minimum pro demonstraci problemu. Ve
skutecnosti je vyber volane funkce vyrazne slozitejsi a uvedene reseni
mi pomaha minimalizovat cas straveny v preruseni.

J.S.




------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20080102/c866c567/attachment-0001.htm 


Další informace o konferenci Hw-list