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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-07-01T20:58:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1227&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-07-01T20:58:42+01:00</updated>
<published>2012-07-01T20:58:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1227&amp;p=8895#p8895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1227&amp;p=8895#p8895"/>
<title type="html"><![CDATA[Re: Mnożenie zmiennych o róźnych typach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1227&amp;p=8895#p8895"><![CDATA[
Ale rozwiązanie może być prostsze, w takich operacjach:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">wynik = pm * 1 * 2957;</div><br /><br />jeśli wyrażenie po prawej stronie równania ma przekroczyć rozmiar dwóch bajtów to trzeba:<br /><br />1. albo zrobić jawne rzutowanie na typ 4-bajtowy, np tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">wynik = (uint32_t)(pm * 1 * 2957);</div><br /><br />2. albo stosując specyfikator <strong><span style="color: #0040FF">UL</span></strong><br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">wynik = pm * 1 * 2957UL;</div><br /><br />który spowoduje automatyczne niejawne rzutowanie i promocję do typu 4-bajtowego dla wyniku<br /><br />dlaczego tak się dzieje? Ano dlatego że domyślnie kompilator AVR GCC robi zawsze promocję do typu 2-bajtowego (uint16_t) .... i jeśli nie ma jawnego rzutowania to może być właśnie taki efekt o jakim piszesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 lip 2012, o 20:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bartool]]></name></author>
<updated>2012-07-01T18:08:06+01:00</updated>
<published>2012-07-01T18:08:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1227&amp;p=8886#p8886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1227&amp;p=8886#p8886"/>
<title type="html"><![CDATA[Mnożenie zmiennych o róźnych typach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1227&amp;p=8886#p8886"><![CDATA[
Dzisiaj zacząłem przerabiać temat ADC. Po kolei, tak jak Mirek opisuje w książce, wpisywałem kody i sprawdzałem co się dzieje. W pewnych sytuacjach, na wyświetlaczu otrzymywałem wyniki, których się nie spodziewałem. W końcu udało mi się znaleść &quot;słaby&quot; punkt.<br /><br />Pokaże o jaki fragment chodzi. Mirek tak napisał w ksiąźce:<br />[syntax=c]uint32_t wynik;<br />uint16_t pm;<br /><br />pm = pomiar(5);<br />wynik = pm * 1 * 2957;[/syntax]<br />Zmienną &quot;wynik&quot; wyświetliłem na LCD. Zmienna ta przybiera wartości od 0 do 65535, czyli tylko wartości o długości dwóch bajtów! Przecież zmienna &quot;wynik&quot; jest o długości czterech bajtów. Po różncyh kombinacjach, doszedłem jak to &quot;naprawić&quot;.<br />[syntax=c]uint32_t wynik;<br />uint16_t pm;<br /><br />pm = pomiar(5);<br />wynik = pm;<br />wynik = wynik * 1 * 2957;[/syntax]<br />I teraz zwracam się z pytaniem, DLACZEGO? Czy chodzi o to, że ukontroler pobiera zmienną dwubajtową na stos, operuje na niej i wynik wpisuje, w tym przypadku, do zmiennej czterobajtowej?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=402">bartool</a> — 1 lip 2012, o 18:08</p><hr />
]]></content>
</entry>
</feed>