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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-21T11:10:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6780&amp;mode</id>
<entry>
<author><name><![CDATA[wjeszak]]></name></author>
<updated>2016-06-21T11:10:36+01:00</updated>
<published>2016-06-21T11:10:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=162699#p162699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=162699#p162699"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=162699#p162699"><![CDATA[
Witam,<br />Musiałem chwilowo odłożyć temat. Zużycie flash o którym wcześniej pisałem było spowodowane starą wersją kompilatora (4.3.3). Po przesiadce na 4.9.2 objętość flash zmalała ok. 5 razy, a ilość cykli ok. 6 razy. Kosmos. To tak na przyszłość jakby ktoś rwał włosy z głowy.<br /><br />wjeszak<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7945">wjeszak</a> — 21 cze 2016, o 11:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2016-05-22T21:34:25+01:00</updated>
<published>2016-05-22T21:34:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=161015#p161015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=161015#p161015"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=161015#p161015"><![CDATA[
<div class="quotetitle">wjeszak napisał(a):</div><div class="quotecontent"><br />Nie rozumiem.<br /></div> W kodzie testowym mam 630 B flash. Żeby cokolwiek porównywać potrzebny jest kod który można skompilować i który operuje na zmiennych wartościach. Dlatego takie coś zaproponowałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 22 maja 2016, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2016-05-21T11:24:00+01:00</updated>
<published>2016-05-21T11:24:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160962#p160962</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160962#p160962"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160962#p160962"><![CDATA[
Wydaje mi się, że ta zajętość wynika z tego, że cała operacja (nie jawne rzutowanie?)<br />[syntax=c]return (Ra * (unsigned long int)(adc) * 100ULL) / (rozdz - adc);[/syntax]<br />wykonywana jest na 64-bitowych liczbach (8 bajtów na każdą zmienną i liczbę i wynik), czyli masz już 40 bajtów. Do tego dochodzi zapotrzebowanie na wyniki pośrednie dla każdego mnożenia, dzielenia i odejmowania. Poza tym same operacje na liczbach 64-bitowych też wymagają odpowiedniego &quot;oprogramowania&quot;, gdyż trzeba to zrobić przy pomocy poleceń 8-bitowych (chyba taki masz mikrokontroler). Nic więc dziwnego, że mnożenie 64-bitowe, dzielenie 64-bitowe i odejmowanie 64-bitowe może &quot;pożreć&quot; tyle zasobów. Do tego dochodzi jeszcze ustawienie kompilatora (optymalizacja np. na szybkie działanie, a nie na małą zajętość pamięci). Takie są moje domysły  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 21 maja 2016, o 11:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wjeszak]]></name></author>
<updated>2016-05-21T08:59:22+01:00</updated>
<published>2016-05-21T08:59:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160959#p160959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160959#p160959"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160959#p160959"><![CDATA[
Hmm. Nie rozumiem. W Twoim kodzie jest tylko wywołanie mojej funkcji. Dlaczego rzutowanie na unsigned long long int zajmuje tak dużo flasha ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7945">wjeszak</a> — 21 maja 2016, o 08:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2016-05-20T21:40:25+01:00</updated>
<published>2016-05-20T21:40:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160949#p160949</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160949#p160949"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160949#p160949"><![CDATA[
Czy na poniższym programie testowym też masz takie wyniki?<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />unsigned int MCP3551_ADC_Rez(unsigned int adc);<br /><br />int main(void)<br />{<br /><br />unsigned int result;<br />PORTA = 0xFF; //pull up<br />PORTB = 0xFF; //pull up<br />DDRC = 0xFF; //output<br />DDRD = 0xFF; //output<br />while(1)<br />{<br />result = MCP3551_ADC_Rez(PINA | PINB&lt;&lt;8);<br />PORTC = (uint8_t)result;<br />PORTD = (uint8_t)(result&gt;&gt;8);<br />_delay_ms(1000);<br />}<br />return 0;<br />}<br /><br />unsigned int MCP3551_ADC_Rez(unsigned int adc)<br />{<br />        const unsigned int Ra = 6745;<br />        const unsigned long int rozdz = 2097152;<br />        return (Ra * (unsigned long int)(adc) * 100ULL) / (rozdz - adc);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 maja 2016, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wjeszak]]></name></author>
<updated>2016-05-19T19:15:50+01:00</updated>
<published>2016-05-19T19:15:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160904#p160904</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160904#p160904"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=160904#p160904"><![CDATA[
Witam serdecznie,<br />Temat stary, ale pasuje do problemu.<br />Poniżej moja funkcja:<br /><br />[syntax=c]unsigned int MCP3551_ADC_Rez(unsigned int adc)<br />{<br />const unsigned int Ra = 6745;<br />const unsigned long int rozdz = 2097152;<br />return (Ra * (unsigned long int)(adc) * 100ULL) / (rozdz - adc);<br />}[/syntax]<br />Służy ona do przeliczania wartości z przetwornika ADC na rezystancję PT100. Funkcja zwraca wynik w postaci 10882 gdzie &quot;108&quot; to część całkowita wartości rezystancji, a &quot;82&quot; to ułamkowa. I tak ma działać. <br />1. Zastanawia mnie dlaczego rzutowanie stałej na typ unsigned long long int (100ULL) pożera 4336 bajtów FLASH i 256 bajtów RAM ?<br />2. W jaki sposób napisać tę funkcję inaczej, aby uzyskać pożądany rezultat i nie zajmować tyle pamięci  i oczywiście nie używać float ?<br /><br />P.S.<br />1. Celowo używam długich nazw typów bo tak mi wygodniej.<br />2. Jako argument funkcji świadomie pobieram tylko 16 bitów wartości z ADC.<br /><br />pozdrawiam<br />wjeszak<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7945">wjeszak</a> — 19 maja 2016, o 19:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-04-17T15:49:13+01:00</updated>
<published>2014-04-17T15:49:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78424#p78424</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78424#p78424"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78424#p78424"><![CDATA[
no dokładnie - wprawdzie trzeba z tym się pobawić czyli kilka linijek kodu napisać ... ale<br /><br />.... ale jak się skońpiluje cały kod to okazuje się że w procku zostanie cały hektar miejsca we flashu w porównaniu do sytuacji gdy męczyliśmy floaty <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... nie wspominając o dużo szybszej realizacji działań gdyby to się gdzieś tam okazało istotne<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 17 kwi 2014, o 15:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-04-17T14:32:47+01:00</updated>
<published>2014-04-17T14:32:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78414#p78414</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78414#p78414"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78414#p78414"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />dobrze tylko nie rób tego na typie int bo będzie za ciasny, co najmniej int32_t<br /></div>Tak, tak to już wiem.<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />a na końcu - nie &quot;odejmuję liczbę całkowitą&quot; tylko wynik dzielisz przez 100 skoro wcześniej lewą stronę mnożyłeś przez 100<br /></div>Jasne, dzielenie bądź sformatowanie już do finalnego wyświetlenia to wiem, chodziło mi o odejmowanie liczby która była we wzorcu jako ułamkowa i przez mnożenie doprowadzona do liczby całkowitej, co by bez żadnych ceregieli użyć do tego działania matematycznego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 17 kwi 2014, o 14:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-04-17T14:15:28+01:00</updated>
<published>2014-04-17T14:15:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78411#p78411</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78411#p78411"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78411#p78411"><![CDATA[
dobrze tylko nie rób tego na typie int bo będzie za ciasny, co najmniej int32_t<br /><br />a na końcu - nie &quot;odejmuję liczbę całkowitą&quot; tylko wynik dzielisz przez 100 skoro wcześniej lewą stronę mnożyłeś przez 100<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 17 kwi 2014, o 14:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-04-17T12:27:51+01:00</updated>
<published>2014-04-17T12:27:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78390#p78390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78390#p78390"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78390#p78390"><![CDATA[
Dziękuję za odzew.<br />Cieszę się, że szedłem jednak w kierunku liczb całkowitych.<br /><br />Teraz po przykładzie Mirka widzę gdzie się gubiłem, robiłem owszem mnożenie x100, x1000x a nawet x10000 ale tylko dla pierwszej części równania, nie mnożąc przy okazji wartości odejmowanej na końcu. Teraz już wiem dlaczego wychodziły mi dziwne wyniki  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> <br /><br />Dodatkowo z tropu zbijało mnie to, że po dzieleniu przez 65536 wychodziły mi wartości po przecinku (w rozważaniach teoretycznych na papierze). Ale po woli do mnie dociera że skoro mam użyty typ int w kodzie to wynikiem dzielenia będzie w AVR-ku liczba całkowita, później od niej odejmuję także liczbę całkowitą i mam elegancki wynik. Dobrze myślę, tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 17 kwi 2014, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-04-16T11:56:58+01:00</updated>
<published>2014-04-16T11:56:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78263#p78263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78263#p78263"/>
<title type="html"><![CDATA[Re: Działania matematyczne - czego lepiej użyć float czy int]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78263#p78263"><![CDATA[
T = (DTA * 175.72 / 65536) - 46.85<br /><br />załóżmy że np DTA=12000 (tak strzelam)<br /><br />no to teraz<br /><br />( (DTA * (175.72*100)) / 65536 ) - (46.85*100) = -1467.47 czyli na końcu mamy: -14,67 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jak już podzielimy przez tą liczbę 100<br /><br />oczywiście trzeba wziąć przy tych obliczeniach pod uwagę promocję do INT <!-- m --><a class="postlink" href="http://atnel.pl/domyslna-promocja-do-typu-int.html" >http://atnel.pl/domyslna-promocja-do-typu-int.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 kwi 2014, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-04-16T11:36:40+01:00</updated>
<published>2014-04-16T11:36:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78261#p78261</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78261#p78261"/>
<title type="html"><![CDATA[Działania matematyczne - czego lepiej użyć float czy int?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6780&amp;p=78261#p78261"><![CDATA[
Proszę o nakierunkowanie mnie jaką drogą podążać. To są moje początki i nie wiem w jakim kierunku pójść przy obliczeniach matematycznych w AVR-kach.<br /><br />Podaję przykład wzorów na obliczenie wartości z noty aplikacyjnej układu SHT21.<br /><br />Dla temperatury jest to: <div class="codetitle"><b>Code:</b></div><div class="codecontent">T = -46.85 + 175.72 * DTA / 2^16</div><br />Dla wilgotności względnej: <div class="codetitle"><b>Code:</b></div><div class="codecontent">RH = -6 + 125 * DTA / 2^16</div><br />Uprościłem je sobie do postaci: <div class="codetitle"><b>Code:</b></div><div class="codecontent">T = (DTA * 175.72 / 65536) - 46.85<br />RH = (DTA * 125 / 65536) - 6</div><br /><br />DTA - jest to 12-to lub 14-to bitowa wartość odczytana z układu.<br /><br />Dodam, że jest dostępna biblioteka dla tego układu i tam użyto typów float do obliczeń. Ja jednak kombinuje jak koń pod górę z użyciem int-ów, nie wiem czy tym samym nie wyważam otwartych drzwi. Oczywiście podane wyżej wzory proszę traktować czysto przykładowo.<br /><br />Będę wdzięczny za wszelkie wskazówki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 16 kwi 2014, o 11:36</p><hr />
]]></content>
</entry>
</feed>