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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-06T14:11:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5485&amp;mode</id>
<entry>
<author><name><![CDATA[Sheep]]></name></author>
<updated>2014-01-10T21:00:17+01:00</updated>
<published>2014-01-10T21:00:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64563#p64563</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64563#p64563"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64563#p64563"><![CDATA[
Tak to prawda co napisał @MirkoT, musimy sami zdecydować co dla nas jest najważniejsze przy każdym projekcie z osobna. <br /><br />Teraz tylko znaleźć kompromis pomiędzy wydajnością a zajętością programu - odwieczny dylemat programisty <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dziękuję za link, z chęcią przeczytam co ma sam Atmel do przekazania nam w tej kwestii <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=542">Sheep</a> — 10 sty 2014, o 21:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-01-10T20:52:47+01:00</updated>
<published>2014-01-10T20:52:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64560#p64560</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64560#p64560"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64560#p64560"><![CDATA[
A kiedyś ktoś tu wrzucił taki link odnośnie optymalizacji<br /><a href="http://www.atmel.com/Images/doc8453.pdf"  class="postlink">http://www.atmel.com/Images/doc8453.pdf</a><br />I tam można poczytać, że zazwyczaj to co jest krótsze wykonuje się dłużej<br />to co zajmuje więcej pamięci jest szybsze<br />Coś za coś.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 10 sty 2014, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sheep]]></name></author>
<updated>2014-01-09T20:17:09+01:00</updated>
<published>2014-01-09T20:17:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64431#p64431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64431#p64431"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64431#p64431"><![CDATA[
A więc napisałem szybki benchmark, wrzucam dla pokoleń<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#includujcie swoją bibliotekę do hd44780 by wyświetlać wynik<br />#include &lt;stdlib.h&gt; //potrzebna dla itoa<br /><br /><br />int przebieg=0;<br />char bufor&#91;16&#93;=&quot;&quot;;<br /><br />ISR(TIMER0_OVF_vect)<br />{<br />przebieg++;<br />}<br /><br />void timer_start(void)<br />{<br />TCCR0=(1&lt;&lt;CS00);//|(1&lt;&lt;CS00);<br />TIMSK=(1&lt;&lt;TOIE0);<br />TCNT0=0;<br />}<br /><br />void timer_stop(void)<br />{<br />TIMSK=0;<br />TCCR0=0;<br />}<br /><br />}<br />int main(void)<br />{<br /><br />lcd_init();<br />pos(0,0);<br />lcd(&quot;czas: &quot;);<br /><br />timer_start();<br />sei();<br />/*<br />tutaj wrzucacie swój kod, który poddajecie benchmarkowi ;)<br />*/<br /><br />timer_stop();<br /><br />itoa(przebieg,bufor,10); //konwersja liczby na ascii<br />lcd(bufor);            //wyswietla ilosc przebiegow, jesli timer sie przepelnił<br />lcd(&quot; &quot;);<br />itoa(TCNT0,bufor,10);   //konwersja liczby na ascii<br />lcd(bufor);       // a tu wartosc rejestru TCNT0<br /><br />while(1)<br />{<br /><br />}<br /><br />}[/syntax]<br /><br />Wartość preskalera musicie dobierać ręcznie do swoich potrzeb i do tego, jak Wasz kod wykonuje się szybko, im mniejszy preskaler tym większa dokładność pomiaru, wynik nie jest w żadnych jednostkach typu us czy ms, dla ciekawskich można policzyć uwzględniając prędkość zegara. Ja w swoim 'teście' musiałem preskaler ustawić na 0 ale przy 4 Mhz praktycznie każda jedna instrukcja zwiększała mi wartość TCNT0 o 4 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Mój test polegał na sprawdzeniu czasu wykonywania się 8 razy tej samej instrukcji sprawdzającej z przesuwaniem. Sprawdziłem while, for, oraz (uwaga!) 8 ifów wpisanych ręcznie.<br />while - 159<br />for - 149<br />8x if - 93<br /><br />Jasną sprawą jest fakt, że ostatnia opcja nie jest optymalna jeśli chodzi o zapis oraz pojemność zajętego flasha, lecz jest to mój pierwszy projekt, w którym szybkość wykonywania kodu jest dla mnie ważniejsza, niż utrata 80 bajtów, jak to zwykle jest odwrotnie szukając oszczędności na każdym bajcie.<br /><br />Aha i nie lekceważcie porad bardziej doświadczonych by stosować zmienne 8 bitowe tam, gdzie jest to wystarczające, bowiem zarezerwowanie pamięci dla zmiennej 16 bitowej zajmuje więcej czasu procesorka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Zachęcam Was do pomiarów różnych fragmentów swoich kodów i ich optymalizacje, jeśli macie efekt pływania np. podczas wyświetlania jakichś skomplikowanych siatek z ledami <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=542">Sheep</a> — 9 sty 2014, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sheep]]></name></author>
<updated>2014-01-09T11:19:43+01:00</updated>
<published>2014-01-09T11:19:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64378#p64378</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64378#p64378"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64378#p64378"><![CDATA[
no to wtedy mam po prostu ilość overflowow timera + reszta z niedoliczonego do 255 rejestru TCNT0, czy tak to rozumować?<br /><br /><br />wstawienie diody jako zabezpieczenie przy overflow oznaczałoby, że muszę po prostu manipulować preskalerem, ale macie rację - tracę wtedy na dokładności pomiaru przy szybko wykonywanych fragmentach kodu<br /><br /><div class="quotetitle">squeez napisał(a):</div><div class="quotecontent"><br />zależy od przedziałów czasowych i posiadanego sprzętu)<br /></div> przede wszystkim od posiadanego sprzętu, ani oscyllo ani analizatora, ale trzeba sobie radzić <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=542">Sheep</a> — 9 sty 2014, o 11:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-01-09T09:45:04+01:00</updated>
<published>2014-01-09T09:45:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64372#p64372</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64372#p64372"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64372#p64372"><![CDATA[
<div class="quotetitle">Sheep napisał(a):</div><div class="quotecontent"><br />nie bardzo rozumiem?<br /></div><br /><br />No pomyśl - jeśli np jak sam stwierdziłeś timer 8-bitowy zliczy do 255 to się przepełni i będzie = 0 ... ty wtedy zapalasz diodę żeby wydłużyć czas jego tykania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale tracisz np na rozdzielczości czasowej ... a tymczasem zamiast zapalić diodę LED inkrementujesz zmienną np<br /><br />starszy_bajt++;<br /><br />i na koniec pomiaru możesz złożyć sobie pomiar z tego 8-bitowego timera tak jakbyś działał z timerem 16 bitowym<br /><br />starszy_bajt PLUS TCNT0<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... i masz 16 bitową wartość ile było tyknięć <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> — 9 sty 2014, o 09:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-11-06T14:11:23+01:00</updated>
<published>2014-01-09T09:42:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64371#p64371</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64371#p64371"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64371#p64371"><![CDATA[
<span style="color: #BFFFBF">.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 9 sty 2014, o 09:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sheep]]></name></author>
<updated>2014-01-09T09:26:12+01:00</updated>
<published>2014-01-09T09:26:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64368#p64368</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64368#p64368"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64368#p64368"><![CDATA[
błyskawiczna odpowiedź, dziękuje bardzo! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />nie wiedziałem, że tak się robi, po prostu taki sposób pomiaru wpadł mi do głowy i chciałem spytać czy jest dobry <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />faktycznie można zwiększyć  częstotliwość timera, ustawić zmienną inkrementowaną i jej wartość oglądać  - też opcja <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />która da ci kolejny starszy bajt pomiaru takiego czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br />nie bardzo rozumiem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=542">Sheep</a> — 9 sty 2014, o 09:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-01-09T09:22:44+01:00</updated>
<published>2014-01-09T09:22:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64366#p64366</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64366#p64366"/>
<title type="html"><![CDATA[Re: Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64366#p64366"><![CDATA[
no ale tak się robi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a diody LED wcale nie trzeba zapalać tylko można w przerwaniu inkrementować jakąś zmienną, która da ci kolejny starszy bajt pomiaru takiego czasu <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> — 9 sty 2014, o 09:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sheep]]></name></author>
<updated>2014-01-09T09:20:38+01:00</updated>
<published>2014-01-09T09:20:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64364#p64364</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64364#p64364"/>
<title type="html"><![CDATA[Prosty benchmark wykonywanego kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5485&amp;p=64364#p64364"><![CDATA[
Witam wszystkich,<br /><br />Czy ktoś bawił się pomiarem czasu jaki potrzebuje procesor na wykonanie danego fragmentu kodu? Nie chodzi tutaj o dokładny czas a raczej zmierzenie szybkości wykonania się kodu przed i po optymalizacji i porównanie. <br />W programach na PC łatwo wykorzystuje się pomiar czasu przed i po wykonaniu kodu a wynikiem jest po prostu różnica czasowa. Jedyne na co wpadłem to:<br /><br />1) uruchomienie timera 8 lub 16 bitowego <br />2) wykonywanie danego fragmentu kodu<br />3) zatrzymanie timera<br />4) wyświetlenie wartości TCNT0 lub OCRA na wyświetlaczu np. za pomocą itoa()<br />5) zabezpieczenie przed wyzerowaniem się timera - zapalenie diody w przerwaniu od przepełnienia co oznacza, że musimy 'zwolnić'  z timerkiem<br /><br />Czy ktoś ma jakiś pomysł? Czy moja koncepcja przedstawiona wyżej jest w miare skuteczna?<br />Jest jeszcze możliwość z funkcją while wraz z zapaleniem diody, ale program przed i po optymalizacji wykonuje się tak szybko, że zauważenie zapalenia się diody jest prawie niewykonalne za jasności i tym samym zauważenie różnicy nie jest możliwe. Kod pomimo, że wykonuje się szybko używam w programie bardzo często dlatego zależy mi na optymalizacji.<br /><br />Jakiekolwiek sugestie będą mile widziane <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam<br /><br />Mikołaj<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=542">Sheep</a> — 9 sty 2014, o 09:20</p><hr />
]]></content>
</entry>
</feed>