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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-10-27T12:08:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19457&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-27T12:08:24+01:00</updated>
<published>2017-10-27T12:08:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197847#p197847</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197847#p197847"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197847#p197847"><![CDATA[
<div class="quotetitle">ukasz napisał(a):</div><div class="quotecontent"><br />ale po to właśnie chciałbym żeby kompilator wyłapał takie błędy<br /></div><br />Masz szansę - napisz lepszy kompilator <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />albo zapoznaj się z zasadami działania obecnego, postaraj się je zrozumieć i wtedy się okaże - że nie ma problemu .... zapoznaj się szczególnie z zagadnieniem tzw &quot;domyślnej promocji do int&quot; <br /><br /><!-- 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 --><br /><br />to ci się może rozjaśni troszkę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 paź 2017, o 12:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ukasz]]></name></author>
<updated>2017-10-27T11:09:20+01:00</updated>
<published>2017-10-27T11:09:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197842#p197842</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197842#p197842"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197842#p197842"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />?? Samo przekazanie na pewno nie powoduje błędnego działania, kompilator po prostu odrzuci starszy bajt i przekaże tylko młodszy. Jeśli więc w takim wypadku funkcja nie działa tak jak powinna to znaczy, że przekazana wartość przekracza zakres argumentu funkcji. A skoro wiadomo, że może osiągnąć takie wartości to trzeba od razu zdefiniować parametr funkcji jako uint16_t.<br /></div><br />Chodzi mi o zwykły ludzki błąd. Wiem że to moje przeoczenie ale po to właśnie chciałbym żeby kompilator wyłapał takie błędy które się zdarzają każdemu.<br />[syntax=c]state = (uint8_t)(state&lt;&lt;2);[/syntax]<br />Działa.<br /><br />Ehhh. Nic wyłączę w takim razie [syntax=c]-Werror=conversion[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=873">ukasz</a> — 27 paź 2017, o 11:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ukasz]]></name></author>
<updated>2017-10-26T21:35:16+01:00</updated>
<published>2017-10-26T21:35:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197815#p197815</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197815#p197815"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197815#p197815"><![CDATA[
Teraz kompilatorowi nie podoba się linia 2. Ten sam błąd. Nawet jak dam przed 2 (uint8_t)<br />[syntax=c]static uint8_t state = 0;<br />state &lt;&lt;= 2;[/syntax]<br />Wersja avr-gcc 7.2.0.<br /><br />Kurcze zależy mi na tym aby kompilator pokazywał błędy jak jest zmiana typu z większego na mniejszy. Odwrotnie jest ok. Już pare razy się złapałem gdzie w funkcji jako parametr dałem uint8_t a przekazywałem uint16_t i się dziwiłem dlaczego nie chcę działać. Macie jakieś pomysły dlaczego kompilator tak dziwnie mi się zachowuje ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=873">ukasz</a> — 26 paź 2017, o 21:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ukasz]]></name></author>
<updated>2017-10-25T22:06:59+01:00</updated>
<published>2017-10-25T22:06:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197764#p197764</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197764#p197764"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197764#p197764"><![CDATA[
<div class="quotetitle">roske napisał(a):</div><div class="quotecontent"><br />Co kompilator ma do powiedzenia na<br />[syntax=c]A++;[/syntax]<br />?<br /></div><br />To zadziałało bez problemu. Zapomniałem o tym operatorze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=873">ukasz</a> — 25 paź 2017, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-10-25T22:04:04+01:00</updated>
<published>2017-10-25T22:04:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197762#p197762</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197762#p197762"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197762#p197762"><![CDATA[
Zrób clean projektu.  <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=7157">anshar</a> — 25 paź 2017, o 22:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ukasz]]></name></author>
<updated>2017-10-25T21:50:58+01:00</updated>
<published>2017-10-25T21:50:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197761#p197761</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197761#p197761"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197761#p197761"><![CDATA[
Mam taki kod (wiem jest dużo includów ale to zaszłość i i tak się nie linkują):<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;registers.h&quot;<br />#include &quot;uart.h&quot;<br />#include &quot;spi.h&quot;<br />#include &quot;hwconfig.h&quot;<br /><br />volatile uint8_t A = 0;<br />volatile uint8_t B = 0;<br />volatile uint8_t TRG = 0;<br /><br />int main(void) {<br />    MCUCR = 0b00001010;<br />    GICR = 0b11000000;<br />    uart_start();<br />    sei();<br />    char str&#91;32&#93;;<br />    while (1) {<br />        if (TRG) {<br />            sprintf(str, &quot;A=%d B=%d\r\n&quot;, A, B);<br />            uart_write(str);<br />            TRG = 0;<br />        }<br />    }<br />}<br /><br />ISR(INT0_vect) {<br />    /* A = (uint8_t) (A+1); */<br />    A += 1;<br />    TRG = 1;<br />}<br /><br />ISR(INT1_vect) {<br />    B = (uint8_t) (B+1);<br />    TRG = 1;<br />}[/syntax]<br />Opcje w avr-gcc<br />[syntax=c]avr-gcc -c -mmcu=atmega32 -DF_CPU=11059200UL -DBAUD=115200UL -Os -Wall -Werror -Wextra -Wconversion -ffunction-sections -funsigned-char -std=gnu11[/syntax]<br />Błąd:<br />[syntax=c]/Users/lkostka/workspace/avr/src/main.c: In function '__vector_1':<br />/Users/lkostka/workspace/avr/src/main.c:31:10: error: conversion to 'uint8_t {aka volatile unsigned char}' from 'int' may alter its value &#91;-Werror=conversion&#93;<br />     A += 1;<br />          ^<br />cc1: all warnings being treated as errors<br />make: *** &#91;.builds/src/main.o&#93; Error 1[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=873">ukasz</a> — 25 paź 2017, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-25T21:42:42+01:00</updated>
<published>2017-10-25T21:42:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197760#p197760</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197760#p197760"/>
<title type="html"><![CDATA[Re: Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197760#p197760"><![CDATA[
Panie to są mikrokontrolery 8-bitowe a nie PC <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />ileż razy trzeba powtarzać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no chyba że kolega nie posiada Bluebooka i nie doczytał .... chociaż hmmm w samym komunikacie błędu też jest jak byk napisane, że masz nie zainicjalizowaną zmienną ...<br /><br />powołujesz zmienną wewnątrz funkcji, tworzona jest na stosie - to znaczy, że nie będzie zainicjalizowana tak jak globalna ... więc co się dziwisz gdy robisz operację<br /><br />[syntax=c]zmienna += 1;[/syntax]<br /><br />toż wystarczy albo jej DEFINICJĘ wpisać w obszarze zmiennych globalnych tak jak teraz masz i zostanie automatycznie zainicjalizowana zerem i błędu nie uświadczysz - albo jak się upierasz robić definicję wewnątrz funkcji main to zainicjalizuj że ją pan byle jaką wartością<br /><br />np<br /><br />[syntax=c]uint8_t asd=0;<br />asd+=1;[/syntax]<br /><br />i też błędu nie uświadczysz - to nie wina kompilatora tylko tego, że czasem warto zapoznać się z PODSTAWAMI PODSTAW - zrozumieć czym różni się zmienna lokalna (automatyczna) powoływana do życia wewnątrz funkcji od cyklu życia zmiennej globalnej i co się z nimi dzieje.... Jak się to wie i zrozumie to człowiek nie spotyka się z takimi błędami <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo nie przyjdzie do głowy pomysł taki jak tu zrobiłeś po prostu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />dlatego na koniec, tak jak na początku - polecam Bluebooka bo tam sporo wyjaśnień i również w tym zakresie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 paź 2017, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ukasz]]></name></author>
<updated>2017-10-25T20:46:13+01:00</updated>
<published>2017-10-25T20:46:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197756#p197756</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197756#p197756"/>
<title type="html"><![CDATA[Zmiana typu int -Werror=conversion]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19457&amp;p=197756#p197756"><![CDATA[
Cześć<br /><br />Mam taki kod:<br />[syntax=c]int main(void) {<br />    uint8_t asd;<br />    asd +=1;<br />}[/syntax]<br />W linijce gdzie robię operację += kompilator wywala mi [syntax=c]conversion to 'uint8_t {aka unsigned char}' from 'int' may alter its value &#91;-Werror=conversion&#93;[/syntax] Nawet jak zrobię:<br />[syntax=c]asd += (uint8_t) 1;[/syntax]<br />Zadziała:<br />[syntax=c]asd = (uint8_t) (asd + 1);[/syntax]<br />Zależy mi na tym aby kompilator wywalał mi błędy jak dokonywana jest zmiana typu z większego na mniejszy.<br />Uzywam avr-gcc. Na zwykłym gcc wszystko jest ok. Da się coś z tym zrobić ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=873">ukasz</a> — 25 paź 2017, o 20:46</p><hr />
]]></content>
</entry>
</feed>