<?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=6908&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-04-28T19:38:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6908&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-04-28T19:38:22+01:00</updated>
<published>2014-04-28T19:38:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79534#p79534</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79534#p79534"/>
<title type="html"><![CDATA[Re: Przekazywanie argumentów do funkcji w przerwaniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79534#p79534"><![CDATA[
Skoro matrix_cnt_l , matrix_cnt_s są globalne to funkcja licznik może być bezargumentowa, a najlepiej skoro nie używasz jej nigdzie cały jej kod wstawić do funkcji obsługi przerwania. To co teraz się stanie to zmienne będące argumentami tej funkcji, a mające takie same nazwy jak zmienne globalne przesłonią zmienne globalne, czyli do funkcji zostaną wstawione kopie wartości zmiennych globalnych. W funkcji opeować będziesz na zmiennych lokalnych i je zmienisz, a zmienne globalne pozostaną takie jak były.<br /><br />Z kolei zmienna interrupt_cnt skoro jest tylko używana w funkcji obsługi przerwania może być lokalna z modyfikatorem static. Raczej starać się należy jak najmniej używać zmiennych globalnych.  W zasadzie tylko do komunikowania się pomiędzy różnymi funkcjami.<br /><br />Zauważyłem jeszcze dziwny twór  <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" /> <br />[syntax=c]return( matrix_cnt_l , matrix_cnt_s );[/syntax]<br />Powyższa linijka powinna wygenerować ostrzeżenie. Zwrócona zostanie tylko wartość matrix_cnt_s.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 28 kwi 2014, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2014-04-28T07:19:05+01:00</updated>
<published>2014-04-28T07:19:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79496#p79496</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79496#p79496"/>
<title type="html"><![CDATA[Re: Przekazywanie argumentów do funkcji w przerwaniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79496#p79496"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Volatile gwarantuje, że zmienna nie zmieni swojej wartości bez wiedzy kompilatora.<br /></div><br />JA bym napisał, że <br />Volatile gwarantuje, że zmienna <strong>może zmienić</strong> swoją wartość bez wiedzy kompilatora<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 28 kwi 2014, o 07:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-04-28T02:18:12+01:00</updated>
<published>2014-04-28T02:18:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79494#p79494</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79494#p79494"/>
<title type="html"><![CDATA[Re: Przekazywanie argumentów do funkcji w przerwaniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79494#p79494"><![CDATA[
Volatile gwarantuje, że zmienna nie zmieni swojej wartości  bez wiedzy kompilatora.<br /><br />Z tego co ja rozumiem to volatile jest potrzebne gdy wartość zmiennej może się zmienić (czyli nastąpić przypisanie) zarówno w programie głównym jak i w przerwaniu.<br />Natomiast jeśli w przerwaniu tylko z niej korzystamy (z jej wartości przypisanej przez program główny) to to nie jest konieczne. <br /><br />Ale w dobrze by było to sprawdzić <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 28 kwi 2014, o 02:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2014-04-28T02:10:25+01:00</updated>
<published>2014-04-28T02:10:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79492#p79492</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79492#p79492"/>
<title type="html"><![CDATA[Re: Przekazywanie argumentów do funkcji w przerwaniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79492#p79492"><![CDATA[
Tak, to jest konieczne.<br /><br /><a href="http://mirekk36.blogspot.co.uk/2011/08/test.html"  class="postlink">http://mirekk36.blogspot.co.uk/2011/08/test.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 28 kwi 2014, o 02:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[#99]]></name></author>
<updated>2014-04-28T00:47:38+01:00</updated>
<published>2014-04-28T00:47:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79491#p79491</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79491#p79491"/>
<title type="html"><![CDATA[Przekazywanie argumentów do funkcji w przerwaniu.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6908&amp;p=79491#p79491"><![CDATA[
Jak w temacie, czy mogę wchodząc w przerwanie (w moim przypadku overflow) przekazać jakieś argumenty do funkcji, którą także wywołuję w przerwaniu? Przekazywane argumenty zadeklarowane są globalnie.<br />Oto funkcja main: (program ma za zadanie wyświetlić liczenie do 60 na dwóch segmentach wyświetlacza 7-segmentowego)<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;ini.h&quot;<br /><br /><br />volatile uint8_t interrupt_cnt;<br />volatile uint8_t matrix_cnt_l;<br />volatile uint8_t matrix_cnt_s;<br /><br />void ini(void);<br />uint8_t licznik( uint8_t matrix_cnt_l , uint8_t matrix_cnt_s );<br /><br />int matrix_number&#91;&#93; = { 0x84 , 0xF5 , 0x4C , 0x64 , 0x35 , 0x26 , 0x06 , 0xF4 , 0x04 , 0x24 };<br /><br />int main(void)<br />{<br />ini();<br /><br />while(1)<br />{<br />SEG3_TOG;<br />PORTD = matrix_number&#91;matrix_cnt_l&#93;;<br />_delay_ms(10);<br />SEG3_TOG;<br />SEG4_TOG;<br />PORTD = matrix_number&#91;matrix_cnt_s&#93;;<br />_delay_ms(10);<br />SEG4_TOG;<br />}<br />}<br /><br />uint8_t licznik( uint8_t matrix_cnt_l , uint8_t matrix_cnt_s )<br />{<br />matrix_cnt_s++;<br />if(matrix_cnt_s==10)<br />{<br />matrix_cnt_s = 0;<br />matrix_cnt_l++;<br />}<br />if(matrix_cnt_l==6)<br />{<br />matrix_cnt_s = 0;<br />matrix_cnt_l = 0;<br />}<br /><br />return( matrix_cnt_l , matrix_cnt_s );<br />}<br /><br />ISR(TIMER0_OVF_vect)<br />{<br />interrupt_cnt++;<br />if(interrupt_cnt&gt;=48)<br />{<br />interrupt_cnt = 0;<br />licznik( matrix_cnt_l , matrix_cnt_s );<br />}<br />}[/syntax]<br /><br /><br />Czy w tym przypadku gdy zmienna jest zadeklarowana globalnie konieczne jest użycie specyfikatora 'volatile' ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4052">#99</a> — 28 kwi 2014, o 00:47</p><hr />
]]></content>
</entry>
</feed>