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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-19T17:04:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4840&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2013-11-19T17:04:37+01:00</updated>
<published>2013-11-19T17:04:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57734#p57734</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57734#p57734"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57734#p57734"><![CDATA[
NOP w asemblerze to znaczy nic nie rób i zajmuje to 1 cykl zegarowy. Warunek While będzie wykonywany tyle razy ile będzie zawierać zmienna n plus parę cykli na obsługę samej pętli. Takie coś potrzebne jest już do bardzo dokładnych wyliczeń. Pamiętam jak mozolnie w Commodore+4 dobierałem ilość NOP żeby wyjść z obrazem poza ramkę obrazu czyli zamiast oryginalnych 25 lini uzyskałem 33(!) linie tekstowe. Każdy NOP był tam na wagę złota, bo inaczej wszystko się rozjeżdżało i nie było synchronizacji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 19 lis 2013, o 17:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ZgłebiaczTajników]]></name></author>
<updated>2013-11-19T16:46:43+01:00</updated>
<published>2013-11-19T16:46:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57732#p57732</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57732#p57732"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57732#p57732"><![CDATA[
Ok a jak działa ta funkcja delay()?<br />[syntax=c]// delay for n cycles<br />static void delay(int n)<br />{<br />    while(n--)<br />asm volatile (&quot;nop&quot;);<br />}[/syntax]<br />Jest lepsza? Co to robi? <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=1483">ZgłebiaczTajników</a> — 19 lis 2013, o 16:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2013-11-19T14:05:04+01:00</updated>
<published>2013-11-19T14:05:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57721#p57721</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57721#p57721"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57721#p57721"><![CDATA[
Genialne w swej prostocie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ! Nie używam co prawda delay, ale warto wiedzieć co tam siedzi i jak to obejść, a przy okazji stosowanie makr mi się utrwala <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=1922">SylwekK</a> — 19 lis 2013, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-19T11:26:39+01:00</updated>
<published>2013-11-19T11:26:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57704#p57704</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57704#p57704"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57704#p57704"><![CDATA[
<div class="quotetitle">krzysztof napisał(a):</div><div class="quotecontent"><br />nie sposób zapamiętać niestety każdego słowa z książki nawet jeśli czyta się ją kilka razy od deski do deski<br /></div><br /><br />Ależ to zrozumiałe i dlatego opisałem to jeszcze raz - co za problem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> im częściej to się na forum pojawi tym częściej ktoś trafi na to <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />A jeśli chodzi o delaye to jak najbardziej najlepiej ich unikać jak ognia. Nie mniej z nimi jest tak jak np z alkoholem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> też jest dla ludzi ale trzeba stosować z umiarem i z głową <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Myślę, że kiedyś pokażę taką ciekawostkę ... jak z delaya zrobić prawie timer programowy <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .... oczywiście to będzie proteza i nie warto tego stosować na co dzień szczególnie rozumiejąc już normalne timery programowe - ale myślę że takie inne spojrzenie na pewne podejście do zagadnienia - zawsze pomoże komuś inaczej bądź lepiej zrozumieć co oznacza &quot;NIEBLOKUJĄCY charakter&quot; funkcji itp <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=54">mirekk36</a> — 19 lis 2013, o 11:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysztoffx]]></name></author>
<updated>2013-11-19T11:13:38+01:00</updated>
<published>2013-11-19T11:13:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57701#p57701</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57701#p57701"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57701#p57701"><![CDATA[
generalnie staram się nigdy tej biblioteki nie używać bo poznany dzięki Tobie Mirku mechanizm timerów programowych jest równie prosty w obsłudze a ma charakter nieblokujący <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> nie sposób zapamiętać niestety każdego słowa z książki nawet jeśli czyta się ją kilka razy od deski do deski <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=1459">krzysztoffx</a> — 19 lis 2013, o 11:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rescue1]]></name></author>
<updated>2013-11-19T10:36:55+01:00</updated>
<published>2013-11-19T10:36:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57700#p57700</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57700#p57700"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57700#p57700"><![CDATA[
Prawda! <br />Dzięki tej malutkiej funkcji upchnąłem w jednym ze swoich początkujących programów 3 (słownie TRZY) zmienne opóźnienia i zmieściłem się z tym w ATTINY13 <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />my_delay ( u mnie zwana opozniarka <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />) częto ratuje życie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1819">rescue1</a> — 19 lis 2013, o 10:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-11-19T07:17:40+01:00</updated>
<published>2013-11-19T07:17:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57683#p57683</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57683#p57683"/>
<title type="html"><![CDATA[Re: Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57683#p57683"><![CDATA[
Ale natknąłeś się na to co niestety przechodzi z bólem każdy początkujący w C a nie wiesz o pewnej oczywistej rzeczy, którą po raz kolejny wytłumaczę ... bo pewnie w Bluebooku umknęło ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Do funkcji opóźniających typu _delay_xx() w AVR GCC przekazujemy TYLKO I WYŁĄCZNIE stałe dosłowne. Co ciekawe mogą to być wtedy nawet liczby zmiennoprzecinkowe np: 0.3 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pod żadnym pozorem nie można używać zmiennych a szczególnie jeszcze robić takich obliczeń w nawiasach w miejscu argumentu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... dlaczego i skąd się bierze nagle takie zwiększenie objętości kodu ? ... to dość proste ....<br /><br />otóż argumentem funkcji jest liczba zmiennoprzecinkowa - która jednak, gdy podamy ją w postaci stałej dosłownej zostaje zawsze zamieniona przez kompilator na liczbę całkowitą i dzięki temu kompilator nie musi dociągać biblioteki do obsługi liczb zmiennoprzecinkowych <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to stąd następuje taki przyrost kodu .... Przez dociągnięcie tej biblioteki - stąd podstawowy wniosek że przede wszystkim należy unikać jak ognia liczb zmiennoprzecinkowych - szczególnie w małych prockach .....<br /><br />No zwykle w tym momencie ktoś się dziwi - to jak to ? w takim razie jak uzyskać zmienną ilość opóźnienia jeśli nie można zastosować zmiennej jako argument - ano można można .... ale z kolei tak (też ten sposób już niejednokrotnie pokazywałem na forum nie tylko w książce) <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zobacz:<br /><br />[syntax=c]void my_delay( uint16_t ms ) {<br />   while( ms-- ) _delay_ms(1);<br />}[/syntax]<br /><br />jak widzisz wystarczy jedna mała funkcja i po zawodach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> wtedy możesz jej użyć tak:<br /><br />[syntax=c]for ( i=0 ; i &lt; 100; i++)<br />        {<br />           PORTB ^= led;<br />           my_delay_ms(i*20);<br />        }[/syntax]<br /><br />bez obaw że ci kod przyrośnie i będzie się coś źle działo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 lis 2013, o 07:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysztoffx]]></name></author>
<updated>2013-11-19T01:49:31+01:00</updated>
<published>2013-11-19T01:49:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57678#p57678</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57678#p57678"/>
<title type="html"><![CDATA[Ciekawostka _delay_ms()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4840&amp;p=57678#p57678"><![CDATA[
Bawiłem się dzisiaj różnymi funkcjami bibliotecznymi i sprawdzałem ilość zużywanej przez nie pamięci <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Wpisując :<br />[syntax=c]for ( i=0 ; i &lt; 100; i++)<br />{<br />    PORTB ^= led;<br />    _delay_ms(20);<br />}[/syntax]<br />kompilator grzecznie kulturalnie wyrzucił (dla ATMega8):<br />Program:     100 bytes (1.2% Full)<br />(.text + .data + .bootloader)<br />Data:          0 bytes (0.0% Full)<br />(.data + .bss + .noinit)<br /><br />ale kiedy w funkcji _delay_ms() użyłem wyrażenia:<br />[syntax=c]for ( i=0 ; i &lt; 100; i++)<br />{<br />   PORTB ^= led;<br />   _delay_ms(i*20);<br />}[/syntax]<br />kompilator poinformował mnie że zjadł pół procesora  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br />Program:    3640 bytes (44.4% Full)<br />(.text + .data + .bootloader)<br />Data:        264 bytes (25.8% Full)<br />(.data + .bss + .noinit)<br />Pewnie większość osób to wie ale ja osobiście byłem w głębokim szoku... Cały &quot;program&quot; miał może 20 linii kodu.... Myślę że dla początkujących jak ja przypadkowe zastosowanie funkcji w ten sposób byłoby niezłą zagadką <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> Program w assemblerze ma 1800 linii podczas gdy program w którym wykorzystuję enkoder,lcd2x16,IR i rozbudowane menu tmf'a zajmuje 1400  <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" /><br /><br />PS. kolejny argument żeby bibliotekę delay.h omijać szerokim łukiem  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1459">krzysztoffx</a> — 19 lis 2013, o 01:49</p><hr />
]]></content>
</entry>
</feed>