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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-02-10T13:52:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=2301&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-02-10T13:52:25+01:00</updated>
<published>2013-02-10T13:52:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27367#p27367</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27367#p27367"/>
<title type="html"><![CDATA[Re: Nazewnictwo typów podczas definicji zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27367#p27367"><![CDATA[
<div class="quotetitle">arturf209 napisał(a):</div><div class="quotecontent"><br />@Krauser<br />Jesteś pewien? Zmienne ze znakiem są w kodzie uzupełnień U2, bo jak inaczej procesor miałby wiedzieć, że to jest ze znakiem?<br /></div><br /><br />przeanalizuj sobie przykłady które podał Krauser bo prześlicznie pokazują właśnie to że procesora nie obchodzi czy ma w rejestrze liczbę ujemną czy nie ? .... to jest tylko kwestia umowna, popatrz sobie na te dwie liczby<br /><br />-128<br /><br />i <br /><br />128 <br /><br />obydwie mają IDENTYCZNY zapis bitowy w bajcie pomimo że jedna jest w kodzie uzupełnień do dwóch <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lut 2013, o 13:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[strzelec]]></name></author>
<updated>2013-02-10T13:31:54+01:00</updated>
<published>2013-02-10T13:31:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27365#p27365</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27365#p27365"/>
<title type="html"><![CDATA[Re: Nazewnictwo typów podczas definicji zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27365#p27365"><![CDATA[
Właśnie chodzi o te nawyki programisty.<br />Mirek dzięki za wyjaśnienie, faktycznie nie wiedziałem o zamianie char na unsigned char. A co do wskaźnika to zapomnijmy o tym  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=842">strzelec</a> — 10 lut 2013, o 13:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[arturf209]]></name></author>
<updated>2013-02-10T13:20:33+01:00</updated>
<published>2013-02-10T13:20:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27362#p27362</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27362#p27362"/>
<title type="html"><![CDATA[Re: Nazewnictwo typów podczas definicji zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27362#p27362"><![CDATA[
Po pierwsze char i int8_t to dokładnie to samo, chodzi jedynie o nawyk programisty. W char trzymamy kod pojedynczego znaku a w int trzymamy liczbę.<br /><br />Co do pytania: zmienna, gdy dostanie za dużą/małą wartość po prostu się &quot;przekręca&quot;, nie powiem Ci jak dokładnie to działa bo po prostu nie pamiętam.<br /><br />@Krauser<br />Jesteś pewien? Zmienne ze znakiem są w kodzie uzupełnień U2, bo jak inaczej procesor miałby wiedzieć, że to jest ze znakiem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=801">arturf209</a> — 10 lut 2013, o 13:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-10T13:15:41+01:00</updated>
<published>2013-02-10T13:15:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27361#p27361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27361#p27361"/>
<title type="html"><![CDATA[Re: Nazewnictwo typów podczas definicji zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27361#p27361"><![CDATA[
Możesz nawet zrobić tak:<br />[syntax=c]uint8_t a;<br />a = 2.3; //nastąpi niejawna konwersja[/syntax]<br />W wielu przypadkach może to nie mieć znaczenia, czy zmienna jest ze znakiem, czy bez bo i tak zawsze przechowywana jest na bajcie czy kilku bajtach w zależności od rozmiaru, ale są przypadki, gdzie to odgrywa rolę, np.:<br />[syntax=c]int8_t a = -128; //0b 1000 0000<br />uint8_t b = 128; //0b 1000 0000<br />a = a&gt;&gt;1; //0b 1100 0000<br />b = b&gt;&gt;1; //0b 0100 0000<br />[/syntax]<br />Było tak samo a jest inaczej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 10 lut 2013, o 13:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-02-10T13:10:27+01:00</updated>
<published>2013-02-10T13:10:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27360#p27360</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27360#p27360"/>
<title type="html"><![CDATA[Re: Nazewnictwo typów podczas definicji zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27360#p27360"><![CDATA[
na razie to jeszcze stąpasz po grząskim gruncie i bardzo niepewnie ....<br /><br />[syntax=c]void lcd_char(char c)[/syntax]<br /><br />jest poprawne ponieważ domyślnie (a pewnie o tym jeszcze nie wiesz) kompilator wywołuje opcję, która zamienia char na unsigned char, po co ? po to żeby nie trzeba było w kółko pisać tego unsigned właśnie. Naturalnie mowa o kompilatorze AVR GCC bo inne tego nie robią<br /><br />po drugie <br /><br />[syntax=c]void lcd_str_E(char * str);[/syntax]<br /><br />tu wcale nie powinien być uint8_t tylko tak jak jest char .... dlaczego ?<br /><br />ano dlatego i postaraj się to sobie dobrze zapamiętać - w języku AVR GCC jeśli masz posługiwać się znakami ASCII to stosuj typ char a nie uintxxx i odwrotnie, jeśli stosujesz zmienne liczbowe to nie stosuj char.<br /><br />oznacza to że taki zapis<br /><br />[syntax=c]char i;<br />for( i = 0; i &lt; 10; i++ ) PORTA = i;[/syntax]<br /><br />oczywiście zadziała w pełni poprawnie to z punktu widzenia poprawnego programowania jest to BŁĄD. Powinno być tak:<br /><br />[syntax=c]uint8_t i;<br />for( i = 0; i &lt; 10; i++ ) PORTA = i;[/syntax]<br /><br />rozumiesz?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">strzelec napisał(a):</div><div class="quotecontent"><br />dla jasnosci kodu zamiast char powinno być uint8_t lub unsigned char bo wskaźnik nie może być ujemny - czy warto tak rozumowac? (chodzi mi tylko o wyrobienie od poczatku dobrych nawyków w pisaniu). .<br /></div><br /><br />No a to zdanie niestety oznacza że na razie też nie wiesz co to jest TYP wskaźnika <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />oczywiście że można byłoby użyć takich typów do wskaźników zobacz:<br /><br />[syntax=c]unsigned char *wsk;<br /><br />int *wsk;[/syntax]<br /><br />czy w tym wypadku powiedziałbyś że wskaźnik może być ujemny ???? nigdy w życiu .... TYP w tym przypadku mówi ci o tym na jaki obiekt wskazuje wskaźnik, a niezależnie od tego typu sam wskaźnik jest ZAWSZE dwubajtowy i bez znaku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lut 2013, o 13:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[strzelec]]></name></author>
<updated>2013-02-10T12:19:11+01:00</updated>
<published>2013-02-10T12:19:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27353#p27353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27353#p27353"/>
<title type="html"><![CDATA[Nazewnictwo typów podczas definicji zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2301&amp;p=27353#p27353"><![CDATA[
Wiem, że bardzo częso zamiennie używane są rożne nazwy dla określonego typu. <br />char = int8_t (zakres -128...127)<br />unsigned char = uint8_t  (zakres 0..255)<br /><br />O ile to jest jasne i jest tylko kwestią umowną to poniższy zapis już nie jest dla mnie jednoznaczny, a jest prawidłowy.<br />[syntax=c]<br />unsigned char znak;<br />znak = -90; // 0b10100110 w kodzie ZU2 = -90[/syntax]<br /><br />&quot;Sprawa&quot; wyszła zupełnie przypadkowo podczas testowania wyświetlacza LCD.<br />Sprawdzałem tablicę znaków i chciałem wyświetlić z niej znak o kodzie 0xA6 (0b10100110) ale zauważyłem taką deklarację funkcji<br />[syntax=c]<br />void lcd_char(char c)[/syntax]<br /> <br />czyli teoretycznie zakres -128 .. 127 a akurat ten znak ma wartość 166 zaraz przypomniał mi sie rozdział z niebieskiej książki o typach i ich zakresie.<br /><br />Jaki jest sens stosowania signed unisgned jeżeli widac na załaczonym ponizej przykładzie, że jeżeli wykonujemy nawet operacje arytmetyczne na liczbach ze znakiem czy bez to ważna jest tylko &quot;wielkość&quot; zmiennej a nie jej zakres.<br /><br />[syntax=c]<br />unsigned char znak;<br />char wynik;<br /><br />int main(void)<br />{<br />znak = 167;<br />wynik = znak-1;<br />             znak = -90;<br />lcd_init();<br />lcd_char(wynik);<br />}[/syntax]<br /><br />I jeszcze jedno pytanie np. odnośnie deklaracji funkcji<br /><br />[syntax=c]<br />void lcd_str_E(char * str);[/syntax]<br /><br />dla jasnosci kodu zamiast char powinno być uint8_t lub unsigned char bo wskaźnik nie może być ujemny - czy warto tak rozumowac? (chodzi mi tylko o wyrobienie od poczatku dobrych nawyków w pisaniu). <br /><br />no i przy tej funkcji jeszcze małe pytanko. Czy dla ATmega 32 wielkośc 8 bitów dla wskaźnika do EEPROM nie jest zbyt mala? Ma on wielkość 1024 bajty więc adres mieści się w 10 bitach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=842">strzelec</a> — 10 lut 2013, o 12:19</p><hr />
]]></content>
</entry>
</feed>