<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<tt>Dekuji vsem za odpovedi.</tt><br>
<br>
Petr Tomasek wrote:
<blockquote cite="mid20080102055743.GA20388@ebed.etf.cuni.cz"
type="cite">
<pre wrap="">On Tue, Jan 01, 2008 at 02:06:53PM -0800, Miroslav Sinko wrote:
</pre>
<blockquote type="cite">
<pre wrap="">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: <a class="moz-txt-link-freetext" href="http://kcomputing.com/answers.html">http://kcomputing.com/answers.html</a> :-)
</pre>
</blockquote>
</blockquote>
<tt>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?<br>
</tt><br>
<blockquote cite="mid20080102055743.GA20388@ebed.etf.cuni.cz"
type="cite">
<pre wrap="">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.
</pre>
</blockquote>
<tt>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.<br>
<br>
<br>
</tt>Jan Waclawek wrote:
<blockquote cite="midPC1770200801012201440170f9d45d56@pc" type="cite">
<blockquote type="cite">
<pre wrap="">Inak, ja by som to riesil bez pointerov priamo cez volanie funkcie.
</pre>
</blockquote>
<pre wrap=""><!---->
Joj, ale ked to je nemoderne a nehodne praveho Ceckara... :-)
</pre>
</blockquote>
<tt>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.<br>
<br>
J.S.<br>
<br>
<br>
<br>
</tt><tt><br>
</tt>
</body>
</html>