<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=3167&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-05-24T13:35:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3167&amp;mode</id>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-05-24T13:35:57+01:00</updated>
<published>2013-05-24T13:35:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37556#p37556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37556#p37556"/>
<title type="html"><![CDATA[Re: volatile w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37556#p37556"><![CDATA[
Ajjjj mea maxima culpa  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> Przez &quot;nieblokujące&quot; podejście do programowania tak się odzwyczaiłem od wszelkich pętelek opóźniających, że w ogóle o tym nie pomyślałem  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> A sam niedawno dopisywałem &quot;volatile&quot; w identycznej sytuacji, bo mi &quot;profesjonalna i firmowa&quot; biblioteka durniała po włączeniu optymalizacji  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez Gość — 24 maja 2013, o 13:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pagosa747]]></name></author>
<updated>2013-05-24T12:13:15+01:00</updated>
<published>2013-05-24T12:13:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37549#p37549</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37549#p37549"/>
<title type="html"><![CDATA[Re: volatile w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37549#p37549"><![CDATA[
<div class="quotetitle">pagosa747 napisał(a):</div><div class="quotecontent"><br />Zdecydowanie demonstruje użycie 'volatile' lecz nie wyjaśnia jego zastosowania .<br /></div><br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />ano dlatego że gdy nie dasz volatile dla zmiennej t to kompilator z uwagi na włączoną optymalizację -Os usunie z kodu całą tą pętlę uznając że ona nic nie robi i do niczego nie jest potrzebna. (nie będzie opóźnienia)<br /><br />jeśli zaś dasz volatile - to NAKAZUJESZ kompilatorowi BEZWZGLĘDNIE aby pod żadnym pozorem nie optymalizował działań ze zmienną t i wtedy taka pętla zostanie skompilowana i zadziała (będzie opóźnienie)<br /></div><br /><br />I to jest właśnie to czego mi brakowało , jak zwykle proste i zrozumiałe wytłumaczenie problemu .<br /><br />Dziękuję bardzo i pozdrawiam .<br /><br />Teraz widzę jak niewiele jeszcze wiem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=629">pagosa747</a> — 24 maja 2013, o 12:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-05-24T11:55:08+01:00</updated>
<published>2013-05-24T11:55:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37545#p37545</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37545#p37545"/>
<title type="html"><![CDATA[Re: volatile w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37545#p37545"><![CDATA[
<div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />Według mnie jest tam zmienna lokalna  A definiowanie jej jako ulotnej nie ma chyba większego sensu.<br /></div><br /><br />w tym przypadku może mieć sens i ma - chociaż przykład jest hmmm powiedziałbym że nie wydumany ale  ..... hmm hmmm - no dobra<br /><br />w przerwaniu użyto pętli opóźniającej:<br /><br />for (t = 0; t &lt; 2000; ++t);<br /><br />spróbuj sobie skompilować ten przykład bez volatile i z volatile i zobacz że kod raz będzie mniejszy (gdy nie ma volatile) a raz będzie większy gdy jest volatile ... a wiesz dlaczego ?<br /><br />ano dlatego że gdy nie dasz volatile dla zmiennej t to kompilator z uwagi na włączoną optymalizację -Os usunie z kodu całą tą pętlę uznając że ona nic nie robi i do niczego nie jest potrzebna. (nie będzie opóźnienia)<br /><br />jeśli zaś dasz volatile - to NAKAZUJESZ kompilatorowi BEZWZGLĘDNIE aby pod żadnym pozorem nie optymalizował działań ze zmienną t i wtedy taka pętla zostanie skompilowana i zadziała (będzie opóźnienie)<br /><br />reasumując - przykład ten pokazuje inny sposób wykorzystania specyfikatora volatile - chociaż jest nieszczęśliwy - tyle że autor opracowania napisał wyraźnie że to wydumany przykład - tylko po to aby zaprezentować sposób wykorzystania volatile.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 24 maja 2013, o 11:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-05-24T11:40:00+01:00</updated>
<published>2013-05-24T11:40:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37542#p37542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37542#p37542"/>
<title type="html"><![CDATA[Re: volatile w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37542#p37542"><![CDATA[
<div class="quotetitle">#ciamciak# napisał(a):</div><div class="quotecontent"><br />Według mnie powinna być tam zmienna lokalna.<br /></div> Według mnie jest tam zmienna lokalna <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> A definiowanie jej jako ulotnej nie ma chyba większego sensu.<p>Statystyki: Napisane przez Gość — 24 maja 2013, o 11:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2013-05-24T11:17:59+01:00</updated>
<published>2013-05-24T11:17:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37540#p37540</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37540#p37540"/>
<title type="html"><![CDATA[Re: volatile w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37540#p37540"><![CDATA[
Według mnie powinna być tam zmienna lokalna. Chyba że komuś zależało, żeby po zakończeniu przerwania t widoczne na zewnątrz miało wartość 2000. Choć i tak trzeba by ją gdzieś wcześniej zadeklarować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 24 maja 2013, o 11:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pagosa747]]></name></author>
<updated>2013-05-24T10:27:03+01:00</updated>
<published>2013-05-24T10:27:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37539#p37539</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37539#p37539"/>
<title type="html"><![CDATA[volatile w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3167&amp;p=37539#p37539"><![CDATA[
Witam .<br /><br />Mam takie małe pytanko odnośnie 'volatile' . Po przeczytaniu wyjaśnienia w niebieskiej książce Mirka i uzupełnieniu ewentualnych braków <a href="http://mirekk36.blogspot.co.uk/2011/08/test.html"  class="postlink">tutaj</a> byłem przekonany , że wiem wszystko o tym specyfikatorze . <br /><br />Przeglądając jednak sieć parę dni temu natknąłem się na prezentowany poniżej fragment <a href="http://www.mimuw.edu.pl/~marpe/mikrokontrolery/w7_c.pdf"  class="postlink">dokumentu</a><br /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Obsługa przerwań (3)<br /> Nieco wydumana procedura obsługi przerwania INT0 zmienia<br />stan wyjścia co drugi raz:<br />[syntax=c]ISR(INT0_vect) {<br />        static uint8_t toggle = 0;<br />        volatile uint16_t t;<br />    for (t = 0; t &lt; 2000; ++t);<br />        if ((PIND &amp; (1 &lt;&lt; PD2)) == 0)<br />        toggle = !toggle;<br />    if (toggle)<br />        PORTA ^= 1 &lt;&lt; PA0;<br />}[/syntax]<br /> Aktywne czekanie w procedurze obsługi przerwania jest<br />wyjątkowo złym rozwiązaniem!<br /> Zostało użyte, aby uniknąć problemu drgania styków klawisza<br />i zademonstrować użycie słowa kluczowego volatile.<br /></div><br />Zdecydowanie demonstruje użycie 'volatile' lecz nie wyjaśnia jego zastosowania .<br /><br />O ile definiowanie wewnątrz przerwania zmiennej ze specyfikatorem 'static' jest dla mnie oczywiste ,nie bardzo jakoś jest dla mnie zrozumiałe , dlaczego zmienna definiowana wewnątrz przerwania opatrzona jest specyfikatorem 'volatile' ? Jaki ma to wpływ na zachowanie się programu po kompilacji ? <br /><br />Szukałem odpowiedzi w sieci ale nie udało mi się znaleźć nic konkretnego co by mogło wyjaśnić powyższe zastosowanie 'volatile' , poza umieszczoną na wielu stronach regułą , że :<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />ZAWSZE ale to ZAWSZE - jeśli korzystamy ze zmiennej zarówno w przerwaniu jaki i w dowolnej funkcji programu - TRZEBA użyć specyfikatora volatile.<br /></div><br /><br />Wydaje mi się jednak , że to bardziej odnosi się do zmiennej definiowanej w funkcji ,w czasie działania której przerwanie może być wywołane i dokonywać zmian na tej zmiennej a nie do zmiennej definiowanej w przerwaniu , która poza nim nie jest widoczna dla innych funkcji .<br /><br />Tak więc nie wiem czy autorzy tego <a href="http://www.mimuw.edu.pl/~marpe/mikrokontrolery/w7_c.pdf"  class="postlink">opracowania</a> wzięli sobie tę regułę zbyt mocno do serca i wszędzie definiują zmienne 'volatile' czy jednak jak zwykle czegoś nie wiem i patrzę na to w zły sposób. <br /><br />Dziękuję za jakiekolwiek wyjaśnienie i pozdrawiam .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=629">pagosa747</a> — 24 maja 2013, o 10:27</p><hr />
]]></content>
</entry>
</feed>