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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-10T22:22:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=5778&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-02-10T22:22:01+01:00</updated>
<published>2014-02-10T22:22:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=69789#p69789</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=69789#p69789"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=69789#p69789"><![CDATA[
Procesor ma takie nóżki oznaczone OC1A i OC1B na których możesz sobie uruchomić PWM i wtedy korzysta się z OCR1A i OCR1B<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 10 lut 2014, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-08T17:58:43+01:00</updated>
<published>2014-02-08T17:58:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=69298#p69298</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=69298#p69298"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=69298#p69298"><![CDATA[
okej a do do czego służy rejestr OCR1B skoro CTC wykorzystuje OCR1A to po co OCR1B ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 8 lut 2014, o 17:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2014-02-06T19:47:11+01:00</updated>
<published>2014-02-06T19:47:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68845#p68845</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68845#p68845"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68845#p68845"><![CDATA[
<div class="quotetitle">spider12 napisał(a):</div><div class="quotecontent"><br />OK jak to zobrazować wyżej kolega PKoz napisał że  avr studio  pokazuje to gdzie  kompilator skacze<br />z instrukcji po instrukcji<br />co się dzieje z tym programem patrząc z perspektywy asemblera<br />Zobaczcie kod powyżej c tylko  że w asemblerze :<br /><br />Jeśli dalej tego nie zrozumiem to  poprostu uznam że tak musi być <br /><br />[syntax=asm]0000006c &lt;main&gt;:<br />  6c:87 b3       inr24, 0x17; 23<br />  6e:80 6c       orir24, 0xC0; 192<br />  70:87 bb       out0x17, r24; 23<br />  72:8e b5       inr24, 0x2e; 46<br />  74:85 60       orir24, 0x05; 5<br />  76:8e bd       out0x2e, r24; 46<br />  78:80 ed       ldir24, 0xD0; 208<br />  7a:95 ed       ldir25, 0xD5; 213<br />  7c:9d bd       out0x2d, r25; 45<br />  7e:8c bd       out0x2c, r24; 44<br />  80:89 b7       inr24, 0x39; 57<br />  82:84 60       orir24, 0x04; 4<br />  84:89 bf       out0x39, r24; 57<br />  86:78 94       sei<br />  88:ff cf       rjmp.-2      ; 0x88 &lt;main+0x1c&gt;<br /><br />0000008a &lt;__vector_9&gt;:<br />  8a:1f 92       pushr1<br />  8c:0f 92       pushr0<br />  8e:0f b6       inr0, 0x3f; 63<br />  90:0f 92       pushr0<br />  92:11 24       eorr1, r1<br />  94:8f 93       pushr24<br />  96:88 b3       inr24, 0x18; 24<br />  98:80 58       subir24, 0x80; 128<br />  9a:88 bb       out0x18, r24; 24<br />  9c:8f 91       popr24<br />  9e:0f 90       popr0<br />  a0:0f be       out0x3f, r0; 63<br />  a2:0f 90       popr0<br />  a4:1f 90       popr1<br />  a6:18 95       reti<br /><br />000000a8 &lt;_exit&gt;:<br />  a8:f8 94       cli<br /><br />000000aa &lt;__stop_program&gt;:<br />  aa:ff cf       rjmp.-2      ; 0xaa &lt;__stop_program&gt;[/syntax]<br /></div><br /><br /><br />No ale co ma się dziać? Program realizuje po kolei instrukcje asemblera.<br /><br />A co robi każdy z rozkazów to już musisz sprawdzić w książce o asemblerze choćby na ATmegi.<br /><br />Np. ostatni rozkaz to właśnie tzw. koniec programu. Program skacze w kółko w to samo miejsce (stop program) w pustej pętli.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 6 lut 2014, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danny]]></name></author>
<updated>2014-02-06T19:32:54+01:00</updated>
<published>2014-02-06T19:32:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68838#p68838</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68838#p68838"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68838#p68838"><![CDATA[
<div class="quotetitle">kila napisał(a):</div><div class="quotecontent"><br />To tak w wielkim skrócie, bo oczywiście z pętli while program może przeskoczyć do innej funkcji, zadeklarowanej przez użytkownika, ale nie ważne <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Lub np. do obsługi przerwania. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Zawsze potem po wykonaniu tego co jest (jak kolega wyżej napisał w innej funkcji) lub po &quot;obsłużeniu&quot; przerwania - program zawsze wraca do main w miejsce o jeden rozkaz dalej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1505">danny</a> — 6 lut 2014, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kila]]></name></author>
<updated>2014-02-05T17:33:49+01:00</updated>
<published>2014-02-05T17:33:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68566#p68566</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68566#p68566"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68566#p68566"><![CDATA[
To może ja jeszcze spróbuję Cię nakierować.<br /><br />Program na PC jest tak jakby skończony tak? Znaczy to, że np taki Pasjans - teoretycznie po wygranej partii jest koniec. Teoretycznie podkreślam. Program możesz zamknąć i spoko.<br /><br />Na mikroprocesorach nie jest już tak prosto. Program na uP NIGDY ale to NIGDY nie może się skończyć. Dlatego jest ta pętla while. Pętla ta wykonuje swoje ciało dopóki warunek w nawiasie jest prawdą. Jak wiadomo z algebry i logiki Boola, 1 jest zawsze prawdą, także pętla while(1) będzie wykonywana aż do odcięcia zasilania. <br /><br />A funkcja main musi być, gdyż jest to główne ciało programu. Program idzie zawsze od góry do dołu. Czyli jesteśmy w głównym ciele - funkcji main. Wykonują się jakieś procedury, np inicjacja przerwań itp, bo to się ma wykonać tylko raz. Ustawianie portów na odpowiedni tryb we/wy itd. Potem program napotyka na pętle while, do której wchodzi i nigdy nie wyskoczy. <br /><br />To tak w wielkim skrócie, bo oczywiście z pętli while program może przeskoczyć do innej funkcji, zadeklarowanej przez użytkownika, ale nie ważne <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=699">kila</a> — 5 lut 2014, o 17:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-02T16:35:11+01:00</updated>
<published>2014-02-02T16:35:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68057#p68057</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68057#p68057"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68057#p68057"><![CDATA[
OK jak to zobrazować wyżej kolega PKoz napisał że  avr studio  pokazuje to gdzie  kompilator skacze<br />z instrukcji po instrukcji<br />co się dzieje z tym programem patrząc z perspektywy asemblera<br />Zobaczcie kod powyżej c tylko  że w asemblerze :<br /><br />Jeśli dalej tego nie zrozumiem to  poprostu uznam że tak musi być <br /><br />[syntax=asm]0000006c &lt;main&gt;:<br />  6c:87 b3       inr24, 0x17; 23<br />  6e:80 6c       orir24, 0xC0; 192<br />  70:87 bb       out0x17, r24; 23<br />  72:8e b5       inr24, 0x2e; 46<br />  74:85 60       orir24, 0x05; 5<br />  76:8e bd       out0x2e, r24; 46<br />  78:80 ed       ldir24, 0xD0; 208<br />  7a:95 ed       ldir25, 0xD5; 213<br />  7c:9d bd       out0x2d, r25; 45<br />  7e:8c bd       out0x2c, r24; 44<br />  80:89 b7       inr24, 0x39; 57<br />  82:84 60       orir24, 0x04; 4<br />  84:89 bf       out0x39, r24; 57<br />  86:78 94       sei<br />  88:ff cf       rjmp.-2      ; 0x88 &lt;main+0x1c&gt;<br /><br />0000008a &lt;__vector_9&gt;:<br />  8a:1f 92       pushr1<br />  8c:0f 92       pushr0<br />  8e:0f b6       inr0, 0x3f; 63<br />  90:0f 92       pushr0<br />  92:11 24       eorr1, r1<br />  94:8f 93       pushr24<br />  96:88 b3       inr24, 0x18; 24<br />  98:80 58       subir24, 0x80; 128<br />  9a:88 bb       out0x18, r24; 24<br />  9c:8f 91       popr24<br />  9e:0f 90       popr0<br />  a0:0f be       out0x3f, r0; 63<br />  a2:0f 90       popr0<br />  a4:1f 90       popr1<br />  a6:18 95       reti<br /><br />000000a8 &lt;_exit&gt;:<br />  a8:f8 94       cli<br /><br />000000aa &lt;__stop_program&gt;:<br />  aa:ff cf       rjmp.-2      ; 0xaa &lt;__stop_program&gt;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 2 lut 2014, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-02T16:07:08+01:00</updated>
<published>2014-02-02T16:07:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68052#p68052</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68052#p68052"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68052#p68052"><![CDATA[
Bo <br />[syntax=c]TIMSK |= (1&lt;&lt;TOIE1);[/syntax]<br />odblokowuje przerwania tylko dla Timera1 w trybie przepełnienia (Overflow).<br /><br />Żeby procesor mógł zobaczyć, że ów Timer zgłosił przerwanie musi być również włączone globalne zezwolenie na przerwania czyli ustawiony bit I w rejestrze SREG. Można to zrobić poprzez sei() ale można by zrobić też tak[syntax=c]SREG |= (1&lt;&lt;I);[/syntax]<br /><br />Czyli żeby procesor zobaczył, że jakiś moduł zgłosił przerwanie muszą być włączone globalne przerwania i przerwania dla konkretnrgo modułu.<br /><br />W Elportalu znalazłem dwa rysunki z Oślej łączki. Przeanalizuj je a dużo ci się wyjaśni<br /><a href="http://forum.atnel.pl/_obrazki/o/204/d67e3a98832dc66ad5bce59732e7ee5d.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/204/d67e3a98832dc66ad5bce59732e7ee5d.png" alt="Obrazek" /></a><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/204/845bd3a4a56b2f1dfdba2bb935dc4d36.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/204/845bd3a4a56b2f1dfdba2bb935dc4d36.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 2 lut 2014, o 16:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-02T15:46:30+01:00</updated>
<published>2014-02-02T15:46:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68051#p68051</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68051#p68051"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68051#p68051"><![CDATA[
Jeśli odblokujemy raz:<br /><br /> TIMSK |= (1&lt;&lt;TOIE1); // ustawienie przerwania od przepełnienia<br /><br />to po co drugi zezwalać na przerwanie<br /><br />sei();<br /> <br />dokładnie tego nie rozumiem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 2 lut 2014, o 15:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-02-02T13:12:21+01:00</updated>
<published>2014-02-02T13:12:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68031#p68031</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68031#p68031"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68031#p68031"><![CDATA[
<div class="quotetitle">spider12 napisał(a):</div><div class="quotecontent"><br />od którego momentu zaczyna zliczać impulsy timer od<br />TIMSK |= (1&lt;&lt;TOIE1); // ustawienie przerwania od przepełnienia<br /><br />czy może od<br /><br />sei(); //zezwolenie na globalne przrwanie<br /></div><br />Timery w AVR zaczynają zliczać impulsy od momentu ustawienia preskalera czyli po tej lini<br />[syntax=c]TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12);  // ustawienie preskalera na 1024[/syntax]<br />impulsy taktujące procesor są podawane na wejście licznikowe Timera. Czyli od tego czasu po każdym impulsie jest zwiększana wartość rejestru TCNTx. Można powiedzieć że Timer zaczął liczyć. Jeśli nie odblokujemy przerwań to Timer będzie tak sobie liczył od 0 do MAX i tak w kółko ale przerwania od niego nie będą obsługiwane. Flaga przerwania będzie ustawiona bo przy każdym przekręceniu licznika jest ustawiana ale do puki nie odblokujemy przerwań <br />[syntax=c]TIMSK |= (1&lt;&lt;TOIE1); // ustawienie przerwania od przepełnienia<br /><br />sei(); //zezwolenie na globalne przrwanie[/syntax] to procek jej nie zobaczy i nie przejdzie do funkcji obsługi przerwania.<br /><br /><div class="quotetitle">spider12 napisał(a):</div><div class="quotecontent"><br />a co to jest sei();<br /></div><br />sei() włącza globalne zezwolenie na przerwania czyli ustawia 8 bit (bit I) w rejestrze SREG.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 2 lut 2014, o 13:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-02T12:18:06+01:00</updated>
<published>2014-02-02T12:18:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68019#p68019</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68019#p68019"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68019#p68019"><![CDATA[
pokaż jak to zrobić kolego PKoz <br /><br />Wielka prośba to sobie to zobacze i przeanalizuje<br /><br />czyli po wejściu w przerwanie rejestr TCNT1 jest wyzerowany i zaczyna liczyc od zera wraca i znów zaczyna liczyc od zera stąd te 4 sekundy odstepu midzy przerwaniami a nie 1 s<br /><br /> od kiedy timer zaczyna przechodzić w przerwanie czy od ustawienia bitu <br /><br />TIMSK |= (1&lt;&lt;TOIE1);<br /><br />a co to jest sei(); <br /><br />tak naprawde to wiem tle że musi być w main gdy korzysta się z przerwania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 2 lut 2014, o 12:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-02-02T11:47:32+01:00</updated>
<published>2014-02-02T11:47:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68007#p68007</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68007#p68007"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=68007#p68007"><![CDATA[
Tak bardzo obrazowo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Wyobraź sobie że TCNT1 jest takim licznikiem który liczy w kółko od 0 .. MAX i od początku<br />a przerwanie Overflow wykonuje się gdy licznik doliczy do TOP (czyli jak nic nie wpiszesz to do MAX)<br /><br />i teraz w main wpisujesz do TCNT1 nową wartość (ustawiasz w nim nawą wartość MAX)<br />jak licznik doliczy do MAX to wywoła się przerwanie , tylko jest mały szkopuł <br />ten licznik nie zacznie znowu liczyć od zera tylko leci dalej do swojego starego MAX<br />i dlatego żeby licznik zliczał równe (prawie równe) odcinki czasu trzeba <br />zaraz w przerwaniu najlepiej na samym początku wpisać ponownie nową wartość MAX<br />żeby nasztępne przerwanie wykonało się ponownie w tym samym czasie <br />i tak w kółko.<br />Jest inny tryb licznika (nie każdego) który wyręcza nas z wpisywania MAX to<br />tryb CTC ale to inna bajka <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=1044">Zaba</a> — 2 lut 2014, o 11:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-02T10:35:30+01:00</updated>
<published>2014-02-02T10:35:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67992#p67992</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67992#p67992"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67992#p67992"><![CDATA[
dlaczego  gdy w przerwaniu wpisze jeszcze raz do rejestru licznika TCNT1 wartość to program działa inaczej  tzn. dioda led mruga co sekunde prawidołowo zgodnie z założeniem, inaczej jest gdy tego wpisu nie ma, dlaczego trzeba ta wartość wpisywac dwa razy w przerwaniu i funkcji main<br /> jeśli się chce by dioda mrugała co sekunde.<br /><br />sami zobaczcie może na swoich zestawach ATB <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ISR (TIMER1_OVF_vect){<br /><br />       TCNT1 = 54736; //wpiasanie wartosci początkowej <br />      PORTB ^= (1&lt;&lt;PB7); // miganie diodą<br /><br />}</div><br /><br /><br /><br />przecież gdy wpisze ją raz to po co drugi ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 2 lut 2014, o 10:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-02-02T10:08:18+01:00</updated>
<published>2014-02-02T10:08:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67988#p67988</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67988#p67988"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67988#p67988"><![CDATA[
<div class="quotetitle">karolek napisał(a):</div><div class="quotecontent"><br />opcja jest : )<br />można uzyć goto<br /></div><br /><br />Jak ktoś to przeczyta ... (i nie piszę tego złośliwie broń boże do kolegi karolek bo kolega być może jeszcze mocno czegoś nie rozumie), ale jak ktoś to przeczyta to niech splunie trzy razy przez lewe ramię, obróci się wokoło 2 razy i ZAPOMNI o tym tzn o GOTO w języku C (poważnie - najlepiej zapomnieć że jest taka instrukcja w C i nigdy jej nie używać - a SZCZEGÓLNIE jak się jest początkującym)<br /><br />Nie wspomnę już że w wielu przypadkach ludzie używając jej - robią to TOTALNIE niestety bez sensu, składu i ładu - tak jak zresztą w powyższym przykładzie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Poza tym nadal to co powiedziałem jest prawdą - FUNKCJA WYKONA SIĘ TYLKO RAZ .... nie ma innej opcji a to że tu kolega wystrzelił z kocim GOTO oznaczać by mogło tylko i wyłącznie fakt - że stworzy nową pętlę nieskończoną wewnątrz funkcji czyli niejako zastąpi while() - to tyle<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 lut 2014, o 10:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Waszek]]></name></author>
<updated>2014-02-02T10:07:14+01:00</updated>
<published>2014-02-02T10:07:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67987#p67987</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67987#p67987"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67987#p67987"><![CDATA[
Funkcji goto raczej się nie używa, po to są pętle, żeby z nich skorzystać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Czemu by nie zrobić pętli w pętli ?:P<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2204">Waszek</a> — 2 lut 2014, o 10:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karolek]]></name></author>
<updated>2014-02-02T08:29:09+01:00</updated>
<published>2014-02-02T08:29:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67983#p67983</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67983#p67983"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67983#p67983"><![CDATA[
<div class="quotetitle">spider12 napisał(a):</div><div class="quotecontent"><br />jak to rozumieć czyli instrukcjie w main wykonują sie raz i koniec ???<br /></div><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />... a że jest to nietypowa bo startowa funkcja to ona może w ogóle TYLKO RAZ się wykonać po restarcie procesora. <span style="color: #0000BF">Nie ma innej opcji</span>.<br /></div><br />opcja jest : )<br />można uzyć goto <br /><br />[syntax=c]int main() {<br /><br />label1:<br />   while (1)<br />   {<br />   goto label1;<br />   }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2535">karolek</a> — 2 lut 2014, o 08:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-02T08:14:41+01:00</updated>
<published>2014-02-02T08:14:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67981#p67981</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67981#p67981"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67981#p67981"><![CDATA[
ok, może moje pytanie jest banalne ale zadałem je tylko dlatego by lepiej to sobie wszytsko wyobrazić;) <br /><br />a co się dzieje gdy już wykona się miganie diodą w tym przypadku poniżej i prgram wraca do main <br />moje pytanie brzmi gdzie?  <br />do while przeciez tam w ciele while nic nie ma <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />od którego momentu zaczyna zliczać impulsy timer od <br />TIMSK |= (1&lt;&lt;TOIE1); // ustawienie przerwania od przepełnienia<br /><br />czy może od<br /><br /> sei();  //zezwolenie na globalne przrwanie<br /><br /><br /> czytałem o tym w ksiązece jednak chciałbym przeczytać wasze wypowiedzi na ten temat by lepiej to zzrozumieć  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br /><br /><br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">/*Program wykorzystuje timer1 16 bitowy i ma zapalać dioda led  */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />int main (void) {<br /><br />   DDRB |= (1&lt;&lt;PB7)|(1&lt;&lt;PB6);  // ustawienie kierunku pinów portu PB<br />   TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12);  // ustawienie preskalera na 1024<br />   TCNT1 = 54736;  //wpiasanie wartosci początkowej <br />    TIMSK |= (1&lt;&lt;TOIE1); // ustawienie przerwania od przepełnienia<br /><br />    sei();  //zezwolenie na globalne przrwanie<br />   while (1){<br /><br />   }<br /><br />}<br /><br />ISR (TIMER1_OVF_vect){<br /><br />       <br />      PORTB ^= (1&lt;&lt;PB7); // miganie diodą<br /><br />}</div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 2 lut 2014, o 08:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-02-01T22:59:19+01:00</updated>
<published>2014-02-01T22:59:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67962#p67962</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67962#p67962"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67962#p67962"><![CDATA[
<div class="quotetitle">PKoz napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent">Jak to? To w C nie można tworzyć pętli nieskończonych?<br /></div><br />Nic takiego nie twierdze.<br />Twierdze tylko, że funkcja main() jest wywoływana przez system operacyjny, z systemu pobiera parametry i zwraca wartość.<br />Jest to zgodne zarówno z konwencją K&amp;R, ANSI i C9X.</div><br />A, jasne. Źle Cię zrozumiałem.<br />No a jak to się ma do pisania systemów operacyjnych?<br />Przecież kiedy startuje jądro to nie ma jeszcze &quot;systemu&quot;, bo dopiero się uruchamia. Gdzieś tam na samym początku też musi<br />być &quot;jakaś&quot; funkcja main() która nie ma skąd wziąć parametrów i nigdzie ich nie zwróci, bo przecież podobnie nie zakończy <br />działania. No chyba, że &quot;położymy&quot; system.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 1 lut 2014, o 22:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-02-01T22:42:59+01:00</updated>
<published>2014-02-01T22:42:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67956#p67956</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67956#p67956"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67956#p67956"><![CDATA[
<div class="quotetitle">spider12 napisał(a):</div><div class="quotecontent"><br />jak to rozumieć czyli instrukcjie w main wykonują sie raz i koniec ???<br /></div><br /><br />DOKŁADNIE TAK, funkcja main() tak jak każda inna funkcja, po wywołaniu wykonuje się TYLKO JEDEN RAZ <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tylko jeden raz , a że jest to nietypowa bo startowa funkcja to ona może w ogóle TYLKO RAZ się wykonać po restarcie procesora. Nie ma innej opcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 lut 2014, o 22:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-02-01T21:40:19+01:00</updated>
<published>2014-02-01T21:40:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67931#p67931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67931#p67931"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67931#p67931"><![CDATA[
<div class="quotetitle">PKoz napisał(a):</div><div class="quotecontent"><br />Wbrew pozorom pytanie kolegi spider12 nie jest całkiem bez sensu. Funkcja main() jest jak każda inna, ma listę parametrów i ma zwracaną wartość.<br /><br />Problem leży w tym, że język C został stworzony dla maszyn z systemem operacyjnym  (Unix). System wywołuje funkcję main() i po jej zakończeniu odbiera od niej wartość. Dla AVR'ów nie ma systemu operacyjnego, nie ma więc jak uruchomić funkcji main(), ani gdzie przekazać wartości funkcji main().<br /><br />Problem ten został rozwiązany w ten sposób, że funkcja main() uruchamia się sama (z resetem procesora) i kończy się nieskończoną pętlą. Jest to sprzeczne ze standardem języka C, ale działa.<br /></div><br />Jak to? To w C nie można tworzyć pętli nieskończonych?<br />Podobno C bardzo dobrze nadaje się (nadawał) do pisania systemów operacyjnych. Czy SO nie działa w pętli nieskończonej?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 1 lut 2014, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[barney]]></name></author>
<updated>2014-02-01T20:32:59+01:00</updated>
<published>2014-02-01T20:32:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67900#p67900</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67900#p67900"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67900#p67900"><![CDATA[
Panowie, zamiast uprawiać filozofie wystarczy spojrzeć w listing programu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />int main (void)<br />{<br />PORTB = 0xFF;<br />}[/syntax]<br />[syntax=asm]popo.elf:     file format elf32-avr<br /><br />Sections:<br />Idx Name          Size      VMA       LMA       File off  Algn<br />  0 .text         0000007a  00000000  00000000  00000054  2**1<br />                  CONTENTS, ALLOC, LOAD, READONLY, CODE<br /><br />Disassembly of section .text:<br /><br />00000000 &lt;__vectors&gt;:<br />   0:0c 94 2a 00 jmp0x54; 0x54 &lt;__ctors_end&gt;<br />   4:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />   8:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />   c:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  10:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  14:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  18:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  1c:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  20:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  24:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  28:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  2c:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  30:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  34:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  38:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  3c:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  40:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  44:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  48:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  4c:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br />  50:0c 94 34 00 jmp0x68; 0x68 &lt;__bad_interrupt&gt;<br /><br />00000054 &lt;__ctors_end&gt;:<br />  54:11 24       eorr1, r1<br />  56:1f be       out0x3f, r1; 63<br />  58:cf e5       ldir28, 0x5F; 95<br />  5a:d4 e0       ldir29, 0x04; 4<br />  5c:de bf       out0x3e, r29; 62<br />  5e:cd bf       out0x3d, r28; 61<br />  60:0e 94 36 00 call0x6c; 0x6c &lt;main&gt;<br />  64:0c 94 3b 00 jmp0x76; 0x76 &lt;_exit&gt;<br /><br />00000068 &lt;__bad_interrupt&gt;:<br />  68:0c 94 00 00 jmp0; 0x0 &lt;__vectors&gt;<br /><br />0000006c &lt;main&gt;:<br />  6c:8f ef       ldir24, 0xFF; 255<br />  6e:88 bb       out0x18, r24; 24<br />  70:80 e0       ldir24, 0x00; 0<br />  72:90 e0       ldir25, 0x00; 0<br />  74:08 95       ret<br /><br />00000076 &lt;_exit&gt;:<br />  76:f8 94       cli<br /><br />00000078 &lt;__stop_program&gt;:<br />  78:ff cf       rjmp.-2      ; 0x78 &lt;__stop_program&gt;[/syntax]<br /><br />Wektor resetu skacze do 54 (inicjalizacji pamięci). Jak widać 60 wywołuje maina, a po jego zakończeniu (74-ret) zostanie wywołane 64-skok do 76.<br />Zostaną więc wyłączone wszystkie przerwania, a potem program będzie cały czas skakał do 78 (taki assemblerowy while(1);).<br /><br />Tak więc po zakończeniu/wyjściu z funkcji main w przypadku AVRów, mikrokontroler wyłącza globalnie przerwania i przechodzi do nic nie robiącej pętli nieskończonej.<br /><br />Dlatego też, jeżeli main służy nam tylko do inicjalizacji przerwań, a potem program wykonuje się tylko w nich, to na końcu maina należy dodać while(1);, bo inaczej uC z niego by wyszedł i wykonał standardowe cli.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=973">barney</a> — 1 lut 2014, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2014-02-01T20:32:04+01:00</updated>
<published>2014-02-01T20:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67899#p67899</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67899#p67899"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67899#p67899"><![CDATA[
Jeżeli w main() lub w funkcjach z main() wywoływanych nie zapętlisz programu to program będzie szedł dalej czyli będą wykonywane kolejne komendy zapisane we flaszu po main(). Da to oczywiście nieoczekiwane rezultaty. Prawdopodobnie zwiecha lub reset procesora. Dopóki jeszcze procesor dycha przerwania oczywiście będą się wykonywały.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 1 lut 2014, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-02-01T19:31:08+01:00</updated>
<published>2014-02-01T19:31:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67878#p67878</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67878#p67878"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67878#p67878"><![CDATA[
Tak instrukcje w main wykonują się tylko raz<br />Ty zapętlasz program w niekończącej się pętli głównej (while(1))<br /><br />Tak powrót z przerwania jest do pętli głównej<br />a konkretnie do miejsca o jedną instrukcje za momentem w którym<br />przerwanie zostało wywołane<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 1 lut 2014, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gedo]]></name></author>
<updated>2014-02-01T19:30:22+01:00</updated>
<published>2014-02-01T19:30:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67877#p67877</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67877#p67877"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67877#p67877"><![CDATA[
jak na moje to wszystko w pętli main wykonuje się raz, następnie wchodzimy do pętli nieskończonej while i tam sobie lecimy w kółko. Wystąpi przerwanie to wykonuje się kod w przerwaniu i wraca do punktu w którym wystąpiło przerwanie czyli w pętli while <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=690">gedo</a> — 1 lut 2014, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[spider12]]></name></author>
<updated>2014-02-01T19:17:50+01:00</updated>
<published>2014-02-01T19:17:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67868#p67868</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67868#p67868"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67868#p67868"><![CDATA[
jak to rozumieć czyli instrukcjie w main wykonują sie raz i koniec ??? <br /><br />raz ustawiają się bity w rejestrach ???<br /><br />a co z przerwaniami jesli program wychodzi z przerwania ISR to czy wraca do pętli nie skończonej, czy wykonuje się main po powrocie od początku czyli od: DDRB |= (1&lt;&lt;PB7)|(1&lt;&lt;PB6); ??<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />int main (void) {<br /><br />   DDRB |= (1&lt;&lt;PB7)|(1&lt;&lt;PB6);<br />   TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12);<br />   TCNT1 = 54736;<br />    TIMSK |= (1&lt;&lt;TOIE1);<br /><br />    sei();<br />   while (1){<br /><br />   }<br /><br />}<br /><br />ISR (TIMER1_OVF_vect){<br /><br />       TCNT1 = 54736;<br />      PORTB ^= (1&lt;&lt;PB7);<br /><br />}<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=322">spider12</a> — 1 lut 2014, o 19:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-02-01T17:41:10+01:00</updated>
<published>2014-02-01T17:41:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67824#p67824</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67824#p67824"/>
<title type="html"><![CDATA[Re: funkcja main]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5778&amp;p=67824#p67824"><![CDATA[
<div class="quotetitle">spider12 napisał(a):</div><div class="quotecontent"><br />hej słyszałem że funkcja main to rodzaju pętla taka jak while i for co się dzieje w main na lini :<br />&quot;}&quot; czy następuje skok ku górze do lini:<br /></div><br /><br />A powiedz gdzie to słyszałeś ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />no bo chyba nie powiesz że z tej książki?<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />Jeśli jej nie masz to polecam bo na prawdę warto ugruntować sobie taką podstawową wiedzę - bez tego ciężko dalej iść<br /><br />------------------------------------------<br /><br />main() - to funkcja jak wyżej kolega słusznie powiedział<br /><br />while() - to jedna z pętli w języku C<br /><br />i jedno nie ma za bardzo z drugim nic do czynienia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 lut 2014, o 17:41</p><hr />
]]></content>
</entry>
</feed>