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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-16T21:55:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17327&amp;mode</id>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2017-01-16T21:55:27+01:00</updated>
<published>2017-01-16T21:55:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=180006#p180006</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=180006#p180006"/>
<title type="html"><![CDATA[Re: Incepcja funkcji + struktura = warnings]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=180006#p180006"><![CDATA[
Dzięki, pomogło <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=3824">amilo_pa</a> — 16 sty 2017, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2017-01-15T12:38:49+01:00</updated>
<published>2017-01-15T12:38:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=179896#p179896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=179896#p179896"/>
<title type="html"><![CDATA[Re: Incepcja funkcji + struktura = warnings]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=179896#p179896"><![CDATA[
Nie wiem czy czytałeś o volatile na blogu od mirka - tutaj masz link:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2011/08/test.html" >http://mirekk36.blogspot.com/2011/08/test.html</a><!-- m --><br /><br />Możesz zrobić tak, że w strukturze masz tylko jedną zmienną która ma być volatile, a następnie w funkcjach dajesz specyfikator volatile - oczywiście przed zmienną, która będzie, jako volatile):<br /><br />[syntax=c]void blink_selected_led(volatile uint8_t *S, volatile uint8_t *V, uint16_t *tim); //funkcja mrugnąca wybraną diodą[/syntax]<br /><br />Powinno wszystko działać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 15 sty 2017, o 12:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2017-01-15T11:46:43+01:00</updated>
<published>2017-01-15T11:46:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=179889#p179889</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=179889#p179889"/>
<title type="html"><![CDATA[Incepcja funkcji + struktura = warnings]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17327&amp;p=179889#p179889"><![CDATA[
Witam, <br /><br />Mam zadeklarowaną strukturę oraz funkcje:<br />d_led.h<br />[syntax=c]//deklaracja struktury typu TLED_RGB<br />typedef struct {<br />volatile  uint8_t color&#91;6&#93;;//wartość PWM diod RGB: R=0, G=1, B=2, H=3, S=4, V=5<br />uint8_t paramiters_functions&#91;10&#93;;//parametry wykorzystywane przez funkcje sterujące poszczególnymi diodami rgb<br />//paramiters_functions&#91;0&#93; = select_diode_rgb(used in the function: ????????_...) - zawiera informacje o diodzie z tabelą /*enum_5*/<br />//paramiters_functions&#91;1&#93; = select_color(used in the function: cyclic_change_colors_rgb_...) - wyświetlany kolor z tabeli COLORS<br />//paramiters_functions&#91;2&#93; = set_color (used in the function: cyclic_change_colors_rgb_...) - zawiera informacje o aktulanej wartości jasności koloru<br />//paramiters_functions&#91;3&#93; = flow_colors_h (used in the function: flow_colors_rgb_...) - komórka odpowiedzialna za wartość współczynnika H w stożku HSV<br />//paramiters_functions&#91;4&#93; = set_color_h (used in the function: flashing_one_color_rgb_...) - komórka zawierająca informację o wybranym kolorze przez użytkownika<br />//paramiters_functions&#91;5&#93; = multi_flashing_colors (used in the function: multi_flashing_color_rgb_...) - aktualnie wyświetlany kolor<br />//paramiters_functions&#91;6&#93; = fast_slow_change_multi_colors (used in the function: multi_flashing_color_rgb_...) - zwiększa lub spowalnia zmianę kolorów<br />//paramiters_functions&#91;7&#93; = rate_of_change (used in the function: multi_flashing_color_rgb_...) - zmienna umożliwiająca szybszą lub wolniejszą zmianę kolorów<br />//paramiters_functions&#91;8&#93; = common_flag_rgb (used in the function: multi_flashing_color_rgb_..., flashing_one_color_rgb_... oraz cyclic_change_colors_rgb_...)- bity tej zmiennej sterują odpowiednimi procesami w funkcjach - patrz tryb wyliczeniowy<br />//paramiters_functions&#91;9&#93; =<br /><br /><br /><br />volatile uint16_t timer_set;//zapamiętany czas rozświetlania i ściemniania diody RGB, ładowany do licznika LED_timer<br />volatile uint16_t LED_timer;//czas odliczany w przerwaniu<br />volatile uint32_t period_time;//zmienna za pomocą której ustawiamy nowy czas szybkości rozświetlania i ściemniania diody<br />uint8_t chosen_function;//zmienna informująca o wybranej funkcji do sterowania ledem<br />volatile uint8_t value_max;//zmienna odpowiedzialna za maksymalny strumień świetlny<br />volatile uint8_t saturation_max;//zmienna odpowiadajaca za maksymalne nasycenie kolorów<br />} TLED_RGB;<br /><br />TLED_RGB chimney, window_left, window_right, selected_rgb;// deklaracja DIOD RGB typu TLED_RGB<br /><br />void change_paramiters_diode_rgb(TLED_RGB *diode_rgb, uint8_t command, uint8_t chose_led);//funkcja zmieniająca parametry wybranej diody rgb<br />void blink_selected_led(uint8_t *S, uint8_t *V, uint16_t *tim); //funkcja mrugnąca wybraną diodą[/syntax]<br /><br />struktury przekazuję do funkcji <em>change_paramiters_diode_rgb</em> a w tej funkcji wywołuję drugą funkcję <em>void blink_selected_led</em>:<br /><br />d_led.c (pokazuję tylko fragment tak aby nie zaciemniać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> )<br />[syntax=c]//****Funkcja mrugająca wybraną diodą RGB na biało****//<br />void blink_selected_led(uint8_t *S, uint8_t *V, uint16_t *tim){<br />*S = 0;<br />*V = 255;<br />ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {*tim = 2000;}<br />}<br /><br />//****funkcja zmieniająca parametry wybranej diody rgb na podstawie wciśniętego klawisza****//<br />void change_paramiters_diode_rgb(TLED_RGB *diode_rgb, uint8_t command, uint8_t chose_led ){<br /><br /><br />lcd_locate(0,6);<br />lcd_str(&quot; &quot;);<br />lcd_locate(0,6);<br />lcd_int(diode_rgb-&gt;paramiters_functions&#91;select_diode_rgb&#93; );<br />lcd_locate(0,8);<br />lcd_str(&quot; &quot;);<br />lcd_locate(0,8);<br />lcd_int( chose_led );<br /><br /><br />switch(command){<br />//**********************//<br />case KEY_1:<br />diode_rgb-&gt;chosen_function = cyclic_change_of_colors;<br />blink_selected_led(&amp;diode_rgb-&gt;color&#91;S&#93;, &amp;diode_rgb-&gt;color&#91;V&#93;, &amp;diode_rgb-&gt;LED_timer);<br />delete_synchonization_setings(chose_led);<br />break;<br />.....<br />}[/syntax]<br /><br /><br />efektem tego są następujące warningi:<br /><br />[syntax=c]make all <br />'Building file: ../D_LED/d_led.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF&quot;D_LED/d_led.d&quot; -MT&quot;D_LED/d_led.o&quot; -c -o &quot;D_LED/d_led.o&quot; &quot;../D_LED/d_led.c&quot;<br />../D_LED/d_led.c: In function 'change_paramiters_diode_rgb':<br />../D_LED/d_led.c:598:4: warning: passing argument 1 of 'blink_selected_led' discards 'volatile' qualifier from pointer target type &#91;enabled by default&#93;<br />    blink_selected_led(&amp;diode_rgb-&gt;color&#91;S&#93;, &amp;diode_rgb-&gt;color&#91;V&#93;, &amp;diode_rgb-&gt;LED_timer);<br />    ^<br />../D_LED/d_led.c:155:6: note: expected 'uint8_t *' but argument is of type 'volatile uint8_t *'<br /> void blink_selected_led(uint8_t *S, uint8_t *V, uint16_t *tim){<br />      ^<br />../D_LED/d_led.c:598:4: warning: passing argument 2 of 'blink_selected_led' discards 'volatile' qualifier from pointer target type &#91;enabled by default&#93;<br />    blink_selected_led(&amp;diode_rgb-&gt;color&#91;S&#93;, &amp;diode_rgb-&gt;color&#91;V&#93;, &amp;diode_rgb-&gt;LED_timer);<br />    ^<br />../D_LED/d_led.c:155:6: note: expected 'uint8_t *' but argument is of type 'volatile uint8_t *'<br /> void blink_selected_led(uint8_t *S, uint8_t *V, uint16_t *tim){<br />      ^<br />../D_LED/d_led.c:598:4: warning: passing argument 3 of 'blink_selected_led' discards 'volatile' qualifier from pointer target type &#91;enabled by default&#93;<br />    blink_selected_led(&amp;diode_rgb-&gt;color&#91;S&#93;, &amp;diode_rgb-&gt;color&#91;V&#93;, &amp;diode_rgb-&gt;LED_timer);<br />    ^<br />../D_LED/d_led.c:155:6: note: expected 'uint16_t *' but argument is of type 'volatile uint16_t *'<br /> void blink_selected_led(uint8_t *S, uint8_t *V, uint16_t *tim){<br />      ^[/syntax]<br /><br />Może macie jakiś pomysł jak wyeliminować te warningi ?<br /><br />W przerwaniu wywoływana jest tylko tablica <em>color</em> z powyższej struktury. Więc od razu zapytam, czy jest uzasadnione użycie specyfikatora <em>volatile</em> do pozostałych zmiennych z powyższej struktury. Rozumiem działanie tego specyfikatora, tylko mam za małe doświadczenie w programowaniu i jeszcze nie umiem ocenić, czy użycie go w tym miejscu wniesie coś bardziej pozytywnego do wykonywania się programu. A wiadomo, nadgorliwość jest gorsza od faszyzmu <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=3824">amilo_pa</a> — 15 sty 2017, o 11:46</p><hr />
]]></content>
</entry>
</feed>