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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-25T12:07:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17425&amp;mode</id>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2017-01-25T12:07:07+01:00</updated>
<published>2017-01-25T12:07:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180768#p180768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180768#p180768"/>
<title type="html"><![CDATA[Re: Prośba o pomoc w optymalizacji funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180768#p180768"><![CDATA[
zainstalowałem Atmel Studio, chwilę się nim pobawiłem i jakoś czuję się nie swojo ;/<br /><br />niby tryb symulacji działa, ale przy części zmiennych mam napis &quot;Unknown location&quot; i zbytnio niewiem jak przeprowadzić &quot;test&quot; bym dostał podsumowanie ile dana funkcja zajmuje taktów procesora.<br /><br />w projekcie mam kilka warunków które oczekują na dane z magistrali TWI<br />[syntax=c]while ( !( TWCR &amp; (1&lt;&lt;TWINT) ) );[/syntax]<br /><br />jednak te dane &quot;nie nadlatują&quot; (i tryb debugowania działa w tle), czy można jakoś w symulacji zaznaczyć, że pewne rejestry mają już jakąś wartość?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 25 sty 2017, o 12:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kijas1]]></name></author>
<updated>2017-01-24T21:15:15+01:00</updated>
<published>2017-01-24T21:15:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180689#p180689</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180689#p180689"/>
<title type="html"><![CDATA[Re: Prośba o pomoc w optymalizacji funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180689#p180689"><![CDATA[
Jeśli chodzi o Atmel Studio to utwórz nowy projekt i dodaj do niego pliki źródłowe które utworzyłeś w eclipse. Nic nie musisz zmieniać. Później odpal debug z symulatorem i zobacz ile taktów zajmuje wykonanie danej funkcji dla bufora, który możesz prędzej wypełnić danymi. Symulator fajna sprawa, tym bardziej że czas wykonywania funkcji nie jest tutaj raczej przyczyną(1s przy 8MHz to naprawdę dużo taktów)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4627">kijas1</a> — 24 sty 2017, o 21:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[P3ndz3l3k]]></name></author>
<updated>2017-01-24T20:53:53+01:00</updated>
<published>2017-01-24T20:53:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180685#p180685</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180685#p180685"/>
<title type="html"><![CDATA[Re: Prośba o pomoc w optymalizacji funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180685#p180685"><![CDATA[
Jeśli chodzi o najprymitywniejszy sposób testowania czasu wykonywania jakiejś procedury to ja np. robię tak, że na samym początku zapalam diodę podłączoną do jakiegoś wolnego pinu a na końcu ją gaszę.<br />Od razu widzę co jest grane.<br />Dodatkowo kilka razy się złapałem na tym, że zbyt często wysyłałem dane do wyświetlacza na co mam sposób taki, że podłączam sobie diodę led do linii RS<br />I obserwuję co się dzieje.<br />W trybie bez sprawdzania flagi zajętości jest stałe opupuźnienie delay i jeśli wysyłamy bardzo często te dane to sam wyświetlacz nam powoduje spowolnienie.<br />Zazwyczaj na lcd nie wyświetlam nic częściej jak 10x sek są one wolne i słabo to wygląda.<br />Przed wysłaniem zmiennej na wyświetlacz wcześniej robię jej kopię i sprawdzam z aktualną wartością jeśli jest różna to wyświetlam.<br /><br />Pozdrawiam Paweł.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3709">P3ndz3l3k</a> — 24 sty 2017, o 20:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2017-01-24T20:27:54+01:00</updated>
<published>2017-01-24T20:27:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180683#p180683</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180683#p180683"/>
<title type="html"><![CDATA[Re: Prośba o pomoc w optymalizacji funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180683#p180683"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Nie wiem, czy sposób jest ciekawy, ale taki znam: symulator w (kocim, jak mawia kolega Mirek <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ) Atmel Studio.<br /></div><br /><br />hmm, nigdy nie używałem Atmel Studio ..., czy projekt z Eclipse jest kompatybilny w Atmel Studio? Czy należy dokonać jakiś przeróbek? W sumie jak jest sporo zachodu i mam skorzystać tylko raz, to może ktoś zna jeszcze jakieś inne rozwiązanie? Zaznaczę tylko, że nie mam sprzętowego debugera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 24 sty 2017, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-01-24T18:47:43+01:00</updated>
<published>2017-01-24T18:47:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180675#p180675</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180675#p180675"/>
<title type="html"><![CDATA[Re: Prośba o pomoc w optymalizacji funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180675#p180675"><![CDATA[
<div class="quotetitle">Tomek86 napisał(a):</div><div class="quotecontent"><br />Chyba, że ktoś zna ciekawy sposób na sprawdzenie czasu wykonywania poszczególnych funkcji.<br /></div><br />Nie wiem, czy sposób jest ciekawy, ale taki znam: symulator w (kocim, jak mawia kolega Mirek <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ) Atmel Studio.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 24 sty 2017, o 18:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2017-01-24T15:00:43+01:00</updated>
<published>2017-01-24T15:00:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180656#p180656</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180656#p180656"/>
<title type="html"><![CDATA[Prośba o pomoc w optymalizacji funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17425&amp;p=180656#p180656"><![CDATA[
Witam,<br /><br />mam problem natury kosmetycznej... chodzi o czas wykonywania się danej funkcji.<br /><br />Napisałem funkcję zamieniającą podany ciąg znaków na tablicę n elementów typu int. Ciąg znaków przedzielony jest &quot;separatorem&quot; i ten stanowi granicę między elementami.<br /><br />[syntax=c]uint8_t StringToInt2 ( char * string_c11, char separator, int * numbers ){<br /><br />// jeżeli ciąg znaków zawiera inne znaki niż, 0..9, separator; należy zakończyć wykonywanie funkcji.<br />if( CheckStringNumeric( string_c11, separator ) )<br />{<br />return 1;<br />}<br /><br />uint8_t stringLenth = sizeStr(string_c11);<br />uint8_t fi = 0;    // index wskazujący na początek ciągu znaków od którego zaczyna się dana liczba<br />uint8_t li = 0;    // index wskazujący na koniec ciągu znaków na którym kończy się dana liczba<br /><br />        uint8_t i = 0;<br />while(fi &lt; stringLenth)<br />{<br />char tmpBuff&#91;6&#93;;    // bufor na ciąg znaków reprezentujący liczbę<br /><br />if( ( *(string_c11 + fi) ) == separator ){<br /><br />if( 0 == li ){<br /><br />MidStr(string_c11, 0, fi, tmpBuff );<br />*(numbers + i++) = StringToInt( tmpBuff );<br />li = fi;<br />}<br />else{<br />MidStr(string_c11, li+1, fi - li - 1, tmpBuff );<br />*(numbers + i++) = StringToInt( tmpBuff );<br />li = fi;<br />}<br />}<br />fi++;<br />}<br /><br />if( 0 == li )    // zabezpieczenie przed przypadkiem gdy cały ciąg znaków jest liczbą<br />{<br />char tmpBuff&#91;6&#93;;<br />MidStr(string_c11, li, fi, tmpBuff );<br />*(numbers + i++) = StringToInt( tmpBuff );<br />}<br /><br />if( li &amp;&amp; (li &lt; fi) )<br />        {<br />char tmpBuff&#91;6&#93;;<br />MidStr(string_c11, li+1, stringLenth - li, tmpBuff );<br />*(tmp + i) = StringToInt( tmpBuff );<br />}<br /><br />return 0;<br />}[/syntax]<br /><br />Poniżej dwie dodatkowe funkcje.<br /><br />[syntax=c]void MidStr(char * string, uint8_t start_index, uint8_t len, char * buff){<br /><br />uint8_t i = 0;<br /><br />while( i &lt; len ){<br /><br />buff&#91;i&#93; = *( string + start_index + i );<br />i++;<br />}<br /><br />buff&#91;i&#93; = 0;<br /><br />}[/syntax]<br /><br />[syntax=c]uint8_t CheckStringNumeric( char * string_c11, char additionalChar )<br />{<br />register char c;<br />unsigned int registryBackup = (unsigned int)string_c11;<br /><br />/*<br /> * Sprawdzenie czy znaki w ciągu należą do zbioru 0..9<br /> * */<br />while( ( c = *string_c11++ ) )<br />{<br />if( ( c &gt;= 0x30 ) &amp;&amp; ( c &lt;= 0x39 )){}//sprawdzenie czy string zawiera prawidłowe znaki<br />else{<br />if( c != additionalChar )<br />{<br />return 1;<br />}<br />}<br />}<br />string_c11 = (char *) registryBackup;<br /><br />return 0;<br />}[/syntax]<br /><br />Nie zwróciłbym uwagi gdyby nie fakt zmiany kwarcu z 11MHz na 8MHz. Projekt wyczyszczony skompilowany pod 8MHz. Wysyłam dany ciąg znaków przez USART i na wyświetlacz LCD co 1s. Ciąg znaków jest to czas w postaci hh:mm:ss.<br />Dla 11MHz czas wyświetla się prawidłowo co 1s.<br />Dla 8MHz czas wyświetla się też prawidłowo ale co kilka sekund następuje wyświetlenie czasu przesuniętego +2s<br />przykład:<br />00:00:01<br />00:00:02<br />00:00:04<br />00:00:05<br />00:00:07<br />itd.<br /><br />w kodzie asm, funkcja <strong>StringToInt2</strong> zajmuje 134linijki. Jestem też świadomy, że problem może leżeć zupełnie gdzie inndziej, ale od czegoś trzeba zacząć.<br /><br />Chyba, że ktoś zna ciekawy sposób na sprawdzenie czasu wykonywania poszczególnych funkcji.<br /><br />Pozdrawiam,<br />Tomek.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 24 sty 2017, o 15:00</p><hr />
]]></content>
</entry>
</feed>