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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=49&amp;t=6171&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-28T11:04:39+01:00</updated>
<published>2014-02-28T11:04:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72390#p72390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72390#p72390"/>
<title type="html"><![CDATA[Re: Wstawka asemblerowa - pytanko (power-down attiny13)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72390#p72390"><![CDATA[
No panowie takimi odpowiedziami jestem w pełni usatysfakcjonowany. Czyli jednak można bez &quot;_&quot; i pozostałych dodatków <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Nie ukrywam, że właśnie fantazje w postaci __podkreślników__ długo mnie odpychały od rozpoczęcia nauki C, po prostu nie wiem czemu, ale ich nie lubię... wg mnie nie pomagają ,a wręcz utrudniają pisanie i analizę kodu. Zainteresowałem się wstawkami asm, bo coś mi się wydaje, że po 20-latach przerwy zacznę się chyba przepraszać z asemblerem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Dla chętnych wersja usypiania dla ATtiny13, którą sam sobie nagryzmoliłem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Zajmuje mnie niż wykorzystanie bibliotki &quot;sleep.h&quot; co ma spore znaczenie dla małych procków.<br /><br />[syntax=c]//ACSR |= (1&lt;&lt;ACD); //wyłączenie komparatora analogowego<br />cli(); //tylko jeśli korzystamy z przerwań<br />PORTB |= (1&lt;&lt;PB1); //podciągnięcie INT0 do +<br />GIMSK |= (1&lt;&lt;INT0); //zezwolenie na przerwanie INT0<br />MCUCR = 0b00110000; //ustawienie trybu power-down i aktywacja SLEEP<br />sei();<br />asm volatile (&quot;sleep&quot;);<br />//odpoczynek...<br />//...po podaniu na INT0 stanu niskiego<br />//jedziemy dalej<br />cli();<br />MCUCR = 0b00010000;<br />GIMSK &amp;= ~(1&lt;&lt;INT0);<br />sei(); //tylko jeśli korzystamy z przerwań<br />//<br />//<br /><br />ISR (INT0_vect){} //powrót z przerwania zewnętrznego[/syntax]<br /><br />Wyłączenie komparatora dobrze jest wstawić już na samym początku programu, a podciągnięcie INT0 do &quot;+&quot; jest niezbędne i można to zrobić prawie w dowolnym momencie byle przed wejściem w tryb snu. Po prostu ta końcówka może być też użyta w innych celach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 28 lut 2014, o 11:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-02-27T22:27:11+01:00</updated>
<published>2014-02-27T22:27:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72363#p72363</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72363#p72363"/>
<title type="html"><![CDATA[Re: Wstawka asemblerowa - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72363#p72363"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />No wlasnie Mirku o tej bibliotece wspominalem i nie chce z niej korzystac, a tylko poznac ta dziwna i rozbudowana skladnie wstawki jednego rozkazu asemblera.<br /></div><br /><br />Sorki to może źle doczytałem ...<br /><br />ale tak jak kolega wyżej pisał ....<br /><br />najprostsze użycie wstawki asm to:<br /><br />[syntax=c]asm volatile (&quot;sleep&quot;);[/syntax]<br /><br />nawet i bez volatile to zadziała, ale już np dla NOP'ów lepiej dać volatile<br /><br />[syntax=c]asm volatile (&quot;nop&quot;);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lut 2014, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-02-27T22:20:37+01:00</updated>
<published>2014-02-27T22:20:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72358#p72358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72358#p72358"/>
<title type="html"><![CDATA[Re: Wstawka asemblerowa - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72358#p72358"><![CDATA[
Skoro nikt mądrzejszy się nie garnie to może ja <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /> <br /><strong>asm</strong> - wiadomo, słowo kluczowe wskazujące kompilatorowi, że to wstawka<br /><strong>volatile</strong> - nie pozwala kompilatorowi na zbyt agresywną optymalizację i wycięcie fragmentów, które uzna za niepotrzebne.<br /><strong>&quot;sleep&quot;</strong> - mnemonik, wiadomo<br /><strong>&quot;\n\t&quot;</strong>  - w zasadzie niepotrzebny, ale rzekomo poprawia wygląd listingów. Jest to string składający się z dwóch (!) znaków - znaku nowej linii oraz tabulatora. Niektóre kompilatory (a może wszystkie?) dwa stringi jeden za drugim uznają za jeden, czyli[syntax=c]&quot;sleep&quot; &quot;\n\t&quot;[/syntax] to jest w efekcie to samo co [syntax=c]&quot;sleep\n\t&quot;[/syntax]<br /><strong>dwukropki w nawiasie po stringach </strong>- dwukropki oddzielają parametry polecenia, 'sleep' nie ma parametrów więc pola są puste, ale trzeba je podać<br />No i jeszcze, jakże seksowne, <strong>znaki podkreślenia przy słowach kluczowych</strong>. Tu <a href="http://www.nongnu.org/avr-libc/user-manual/inline_asm.html"  class="postlink">http://www.nongnu.org/avr-libc/user-manual/inline_asm.html</a> jest coś nabazgrane na ten temat. Chodzi o uniknięcie jakiś warningów, nie bardzo mi się chce w to wgłębiać (w tej chwili).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 27 lut 2014, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-27T21:55:15+01:00</updated>
<published>2014-02-27T21:55:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72350#p72350</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72350#p72350"/>
<title type="html"><![CDATA[Re: Wstawka asemblerowa - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72350#p72350"><![CDATA[
No wlasnie Mirku o tej bibliotece wspominalem i nie chce z niej korzystac, a tylko poznac ta dziwna i rozbudowana skladnie wstawki jednego rozkazu asemblera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 27 lut 2014, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-02-27T21:30:12+01:00</updated>
<published>2014-02-27T21:30:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72341#p72341</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72341#p72341"/>
<title type="html"><![CDATA[Re: Wstawka asemblerowa - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72341#p72341"><![CDATA[
da się zrobić i to bez asemblera:<br /><br /><!-- m --><a class="postlink" href="http://www.nongnu.org/avr-libc/user-manual/group__avr__sleep.html" >http://www.nongnu.org/avr-libc/user-man ... sleep.html</a><!-- m --><br /><br />sleep();<br /><br />wcześniej ustawiając odpowiedni tryb powerdown<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lut 2014, o 21:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-27T19:12:34+01:00</updated>
<published>2014-02-27T19:12:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72301#p72301</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72301#p72301"/>
<title type="html"><![CDATA[Wstawka asemblerowa - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6171&amp;p=72301#p72301"><![CDATA[
Przegrzebałem forum i niestety nie znalazłem odpowiedzi (może po prostu nie wiem czego szukać).<br />Ostatnio zacząłem się bawić w usypianie procka oczywiście już w C i wiem, że jest do tego biblioteka, z której jednak nie chciałem korzystać , bo wygenerowało mi kod dłuższy o 24 bajty (dla attiny13 to już ma znaczenie). Zmierzam do tego, że poustawiałem sobie w rejestrach wg pdf odpowiednie bity i dopiero później doczytałem, że aby procesor usnął powinna być wykonana maszynowa instrukcja &quot;sleep&quot;. Oczywiście przekopiowałem sobie ją żywcem z biblioteki jako wstawkę i wszystko pięknie działa tylko, że ja lubię wiedzieć dlaczego i przede wszystkim JAK to działa. Przeszukałem masę linków niestety w większości do anglojęzycznych tematów, a niestety mój angielski ...ech lepiej nie mówić <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i nadal nie znam zasady jaką kierował się autor pisząc coś takiego:<br />[syntax=c]__asm__ __volatile__ ( &quot;sleep&quot; &quot;\n\t&quot; :: );[/syntax]<br />Chciałbym się dowiedzieć dlaczego jest aż tak skomplikowany zapis zwykłego pojedynczego rozkazu asm:<br />Czy tego nie da się zrobić jakoś prościej? Przykładowo w Bascomie można by go wpisać po prostu SLEEP jako jedno słowo w jednej linii bez zbędnych kombinacji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 27 lut 2014, o 19:12</p><hr />
]]></content>
</entry>
</feed>