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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-04-04T08:11:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14954&amp;mode</id>
<entry>
<author><name><![CDATA[damwoj600]]></name></author>
<updated>2016-04-04T08:11:38+01:00</updated>
<published>2016-04-04T08:11:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157738#p157738</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157738#p157738"/>
<title type="html"><![CDATA[Re: Optymalizacja kodu - funkcje nakładki (np. jako inline)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157738#p157738"><![CDATA[
<div class="quotetitle">PJS napisał(a):</div><div class="quotecontent"><br />Zapytam tak z głupia: a sprawdziłeś co robi kompilator? Szczególnie dla różnych opcji optymalizacji?<br />Być może cię zaskoczy, ale wiele rzeczy (jak np. te, o których piszesz) twórcy kompilatorów już dawno uwzględniają. Zatem może nie warto wyważać otwartych drzwi? <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><br /></div><br />Wiem, że kompilator to cwana bestia i faktycznie wiele rzeczy elegancko optymalizuje. Nie inaczej jest w moim przypadku. Jednak działa dość selektywnie i nie wszystkie funkcje optymalizuje w ten sposób. Pewnie ma to jakieś uwarunkowania, ale ja jestem dociekliwy i zastanawiałem się czy jakoś mogę zmusić kompilator i jawnie zasugerować mu, żeby potraktował te funkcje jako inline.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Poza tym to, że coś jest inline niekoniecznie będzie tak potraktowane przez kompilator.<br />Według mnie powinieneś przestać się martwić optymalizacją kodu (bo to robi kompilator), ale raczej skoncentrować się by był on jasny w analizie i prosty do modyfikowania (nawet po wielu latach).<br /></div><br />No niby tak, ale ja lubię wiedzieć, że zrobiłem coś dobrze i lepiej tego zrobić nie mogłem <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br /><div class="quotetitle">Jaglarz napisał(a):</div><div class="quotecontent"><br />od źle wstawiony.<br /></div><br />Poprawione. Nie traktowałem tego jako listing kodu, bo to taki krótki pseudokod, ale ok - zmieniłem <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=8762">damwoj600</a> — 4 kwi 2016, o 08:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2016-03-26T14:58:56+01:00</updated>
<published>2016-03-26T14:58:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157157#p157157</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157157#p157157"/>
<title type="html"><![CDATA[Re: Optymalizacja kodu - funkcje nakładki (np. jako inline)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157157#p157157"><![CDATA[
Kod źle wstawiony.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 26 mar 2016, o 14:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2016-03-25T14:01:20+01:00</updated>
<published>2016-03-25T14:01:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157037#p157037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157037#p157037"/>
<title type="html"><![CDATA[Re: Optymalizacja kodu - funkcje nakładki (np. jako inline)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157037#p157037"><![CDATA[
Zapytam tak z głupia: a sprawdziłeś co robi kompilator? Szczególnie dla różnych opcji optymalizacji?<br />Być może cię zaskoczy, ale wiele rzeczy (jak np. te, o których piszesz) twórcy kompilatorów już dawno uwzględniają. Zatem może nie warto wyważać otwartych drzwi? <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br />Poza tym to, że coś jest inline niekoniecznie będzie tak potraktowane przez kompilator.<br />Według mnie powinieneś przestać się martwić optymalizacją kodu (bo to robi kompilator), ale raczej skoncentrować się by był on jasny w analizie i prosty do modyfikowania (nawet po wielu latach).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 25 mar 2016, o 14:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[damwoj600]]></name></author>
<updated>2016-04-04T08:02:45+01:00</updated>
<published>2016-03-25T13:49:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157035#p157035</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157035#p157035"/>
<title type="html"><![CDATA[Optymalizacja kodu - funkcje nakładki (np. jako inline)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14954&amp;p=157035#p157035"><![CDATA[
Zauważyłem dość często pojawiający się schemat w moim kodzie i chciałbym to jakoś zoptymalizować. Otóż wyobraźmy sobie jedną, długą i skomplikowaną funkcję od czarnej roboty, która przyjmuje równie skomplikowany parametr. Aby ułatwić życie istnieje zestaw funkcji-nakładek, które przyjmują parametry w bardziej przyjaznej formie, przekształcają ją do skomplikowanej formy i odpalają funkcję od czarnej roboty. Przykładowy pseudokod mógłby wyglądać jak poniżej.<br /><br />[syntax=c]// mod.h<br />void mod_execute(uint8_t command);<br /><br />void mod_reset(void);<br />void mod_walk(uint8_t speed);<br />void mod_jump(uint8_t height, uint8_t distance);<br />void mod_rest(uint8_t time);<br /><br />// mod.c<br />void mod_execute(uint8_t command)<br />{<br />// Długi kod wykonywania instrukcji<br />}<br /><br />void mod_reset(void)<br />{<br />mod_execute(MOD_COMMAND_RESET);<br />}<br /><br />void mod_walk(uint8_t speed)<br />{<br />mod_execute(MOD_COMMAND_WALK | (speed &amp; 0x3f));<br />}<br /><br />void mod_jump(uint8_t height, uint8_t distance)<br />{<br />mod_execute(MOD_COMMAND_JUMP | ((height &amp; 0x03) &lt;&lt; 2) | (distance &amp; 0x03));<br />}<br /><br />void mod_rest(uint8_t time)<br />{<br />mod_execute(MOD_COMMAND_REST | (time &amp; 0x05));<br />}<br /><br />// main.c<br />void main(void)<br />{<br />mod_reset();<br />mod_walk(10)<br />mod_jump(3, 1)<br />mod_jump(1, 3);<br />mod_rest(3);<br />}[/syntax]<br /><br />Problem polega na bezsensownym wywoływaniu łańcuszka funkcji np. <strong>mod_reset</strong> wywołuje <strong>mod_execute</strong>. Tymczasem wszystkie funkcje-nakładki mogłyby być <strong>inline</strong> i np. w miejsce <strong>mod_reset</strong> kompilator mógłby sam od razu wstawić <strong>mod_execute</strong> z odpowiednimi parametrami, co mogłoby wyglądać jak poniżej.<br /><br />[syntax=c]// main.c<br />void main(void)<br />{<br />mod_execute(MOD_COMMAND_RESET);<br />mod_execute(MOD_COMMAND_WALK | (10 &amp; 0x3f));<br />mod_execute(MOD_COMMAND_JUMP | ((3 &amp; 0x03) &lt;&lt; 2) | (1 &amp; 0x03));<br />mod_execute(MOD_COMMAND_JUMP | ((1 &amp; 0x03) &lt;&lt; 2) | (3 &amp; 0x03));<br />mod_execute(MOD_COMMAND_REST | (3 &amp; 0x05));<br />}[/syntax]<br /><br />Gdyby wszystko było w jednym pliku (lub funkcje-nakładki znajdowałyby się w <strong>mod.h</strong> inkludowanym w <strong>main.c</strong>), to wystarczyłoby dodać <strong>static inline</strong> do każdej z nich i po problemie. Ale jakoś nie mogę się przekonać do definiowania takich funkcji w hederach. Innym rozwiązaniem byłoby zdefiniować te funkcje jako makra. Ale IMHO to jeszcze gorszy pomysł. Dlatego zastanawiam się czy można to zrobić jeszcze jakoś inaczej - lepiej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8762">damwoj600</a> — 25 mar 2016, o 13:49</p><hr />
]]></content>
</entry>
</feed>