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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-11T21:28:51+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=9441&amp;mode</id>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2017-02-11T21:28:51+01:00</updated>
<published>2017-02-11T21:28:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182440#p182440</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182440#p182440"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182440#p182440"><![CDATA[
<div class="quotetitle">anshar napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent">too few arguments to function 'key_press'<br /></div><br />Zbyt mało argumentów w funkcji key_press.<br /><br />Funkcja ta posiada pięć argumentów, a ty wywołujesz ją tylko z czterema. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /></div><br /><br />Sorry za zawracanie głowy to chyba przez ilość godzin <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> Wszystko już jasne i poprawione <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=743">Wilu88</a> — 11 lut 2017, o 21:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-02-11T21:27:40+01:00</updated>
<published>2017-02-11T21:27:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182438#p182438</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182438#p182438"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182438#p182438"><![CDATA[
<div class="quotetitle">Wilu88 napisał(a):</div><div class="quotecontent"><br />too few arguments to function 'key_press'<br /></div><br />Zbyt mało argumentów w funkcji key_press.<br /><br />Funkcja ta posiada pięć argumentów, a ty wywołujesz ją tylko z czterema. <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> — 11 lut 2017, o 21:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2017-02-11T21:06:44+01:00</updated>
<published>2017-02-11T21:06:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182435#p182435</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182435#p182435"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=182435#p182435"><![CDATA[
Sorry za odkopywanie tematu ale mam spory problem z przerobieniem tej funkcje. Otóż zamieniłem funkcje key_press według rad kolegów na:<br /><br />[syntax=c]void key_press(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(uint8_t*), uint8_t *var )[/syntax]<br /><br />Teraz wywołuję funkcję key_press za pomocą kodu:<br /><br />[syntax=c]key_press( &amp;key1_lock, &amp;PINA, KEY_MENU, pokaz_ekran(5) );[/syntax]<br /><br />Gdzie za liczbę 5 podstawiać będę różne uint8_t<br /><br />Funkcja pokaz_ekran na chwile obecną do testów wygląda tak:<br /><br />[syntax=c]void pokaz_ekran(uint8_t ekran){<br /><br /><br />}[/syntax]<br /><br /><br />Niestety w wyniku takiego kodu otrzymuje błąd kompilacji:<br />[syntax=c]../main.c:205:4: error: invalid use of void expression<br />../main.c:205:4: error: too few arguments to function 'key_press'<br />../main.c:63:6: note: declared here[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 11 lut 2017, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-11-28T22:56:53+01:00</updated>
<published>2014-11-28T22:56:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106479#p106479</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106479#p106479"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106479#p106479"><![CDATA[
W przypadku C++ można by było skorzystać z przeciążenia funkcji, bądź też parametrów domyślnych, ale dla C można np. utworzyć funkcję &quot;bazową&quot;:<br /><br />[syntax=c]void key_press_var(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(uint8_t*), uint8_t *var ) {<br />...<br />if (kfun)<br />   if (var) <br />      kfun(var);<br />   else {<br />      void (*kfun2)(void) = kfun;<br />      kfun2();<br />   }<br />...<br />}[/syntax]<br />...oraz drugą, która będzie jedynie &quot;nakładką&quot; na już istniejącą funkcję:<br /><br />[syntax=c]void key_press_void(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) {<br />   key_press_var(klock, KPIN, key_mask, kfun, NULL);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 28 lis 2014, o 22:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anysiu68]]></name></author>
<updated>2014-11-28T22:08:24+01:00</updated>
<published>2014-11-28T22:08:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106465#p106465</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106465#p106465"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106465#p106465"><![CDATA[
Ale wtedy krzyczy, że brakuje mu parametru.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3957">Anysiu68</a> — 28 lis 2014, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anysiu68]]></name></author>
<updated>2014-11-28T19:24:05+01:00</updated>
<published>2014-11-28T19:24:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106441#p106441</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106441#p106441"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106441#p106441"><![CDATA[
A jednak to nie koniec moich pytań. Wszystko działa tak jak chciałem, ale pojawił się problem &quot;w drugą stronę&quot; Co jeśli do takiej funkcji:<br /><div class="quotetitle">atmel napisał(a):</div><div class="quotecontent"><br />[syntax=c]void key_press(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(uint8_t*), uint8_t *var )[/syntax]<br /></div><br />będę chciał przekazać funkcję <strong>void funkcja(void)</strong> i nie przekazywać argumentu <strong>var</strong>? Czy do tego potrzebuję dwóch osobnych funkcji <strong>key_press</strong>? np.<br />[syntax=c]void key_press_var(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(uint8_t*), uint8_t *var )[/syntax]<br />oraz<br />[syntax=c]void key_press_void(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) )[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3957">Anysiu68</a> — 28 lis 2014, o 19:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anysiu68]]></name></author>
<updated>2014-11-28T13:15:56+01:00</updated>
<published>2014-11-28T13:15:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106398#p106398</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106398#p106398"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106398#p106398"><![CDATA[
<div class="quotetitle">atmel napisał(a):</div><div class="quotecontent"><br />Parametr &quot;var&quot; to wskaźnik na zmienną, która ma być później (wg przedstawionej funkcji Kolegi) inkrementowana.<br /></div><br /><br />Dzięki wielkie. Teraz wszystko jasne. Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3957">Anysiu68</a> — 28 lis 2014, o 13:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-11-27T22:16:57+01:00</updated>
<published>2014-11-27T22:16:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106353#p106353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106353#p106353"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106353#p106353"><![CDATA[
Może to mało edukacyjne z mojej strony, ale skoro przedstawiłem takie rozwiązanie to muszę je wytłumaczyć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Parametr &quot;var&quot; to wskaźnik na zmienną, która ma być później (wg przedstawionej funkcji Kolegi) inkrementowana.<br />Będzie to po prostu argument przekazywany jako parametr dla funkcji &quot;funkcja&quot;, która jest przekazywana jako wskaźnik do niej w parametrze &quot;kfun&quot;.<br /><br />Funkcje zwrotne (callback'i) są bardzo przydatną sprawą, ale w tym wypadku zamiast używać wskaźnika na funkcję można od razu inkrementować zmienną w miejscu wywołania funkcji &quot;kfun&quot;. Jednak nie polecam tego sposobu, bo wymaga to ingerencji w kod biblioteki lub utworzenia bliźniaczej funkcji (chcąc wykorzystywać obie wersje).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 27 lis 2014, o 22:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-11-27T21:07:19+01:00</updated>
<published>2014-11-27T21:07:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106316#p106316</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106316#p106316"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106316#p106316"><![CDATA[
<div class="quotetitle">Anysiu68 napisał(a):</div><div class="quotecontent"><br />Czytałem kilka razy i wiem jak one działają. Pytam do czego służy ten wskaźnik w tym konkretnym przypadku.<br /></div><br /><br />aaa ... no pytasz co masz przekazać do funkcji - widzisz jak zadawałeś pytanie to myślałem że ty wiesz co chcesz przekazać - a jeśli ty nie wiesz to kto ma wiedzieć ?<br /><br />wskaźnik jako argument bywa przydatny ponieważ można przekazać przez niego WSZYSTKO. Adres zmiennej, struktury, tablicy - czego zechcesz ... ale to ty musisz zdecydować czyli wymyślić najpierw co będziesz chciał przekazać - jakiś cel - rozumiesz ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lis 2014, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anysiu68]]></name></author>
<updated>2014-11-27T19:36:21+01:00</updated>
<published>2014-11-27T19:36:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106272#p106272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106272#p106272"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106272#p106272"><![CDATA[
Czytałem kilka razy i wiem jak one działają. Pytam do czego służy ten wskaźnik w tym konkretnym przypadku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3957">Anysiu68</a> — 27 lis 2014, o 19:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-11-27T17:41:26+01:00</updated>
<published>2014-11-27T17:41:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106243#p106243</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106243#p106243"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106243#p106243"><![CDATA[
<div class="quotetitle">Anysiu68 napisał(a):</div><div class="quotecontent"><br />Wszystko fajnie, ale nie rozumiem za co odpowiada &quot;*var&quot;. Co mam tam przekazać wywołując funkcję obsługi klawisza?<br /></div><br />a poczytał kolega o wskaźnikach w Bluebooku czy nie ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lis 2014, o 17:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anysiu68]]></name></author>
<updated>2014-11-27T17:40:11+01:00</updated>
<published>2014-11-27T17:40:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106241#p106241</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106241#p106241"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106241#p106241"><![CDATA[
No tak. Wcześniej było to zapisane jako <strong>*wsk+=1</strong>, potem zmieniłem na <strong>*wsk++</strong>, a jedynka się zaplątała po drodze.<br /><br />Wszystko fajnie, ale nie rozumiem za co odpowiada &quot;<strong>*var</strong>&quot;. Co mam tam przekazać wywołując funkcję obsługi klawisza?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3957">Anysiu68</a> — 27 lis 2014, o 17:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-11-26T20:41:36+01:00</updated>
<published>2014-11-26T20:41:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106112#p106112</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106112#p106112"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106112#p106112"><![CDATA[
Wystarczy zmienić nagłówek funkcji np. w ten sposób:<br /><br />[syntax=c]void key_press(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(uint8_t*), uint8_t *var )[/syntax]<br />W miejscu wywołania funkcji z parametrem można użyć następującego kodu:<br /><br />[syntax=c]if(kfun) kfun(var);[/syntax]<br />Ten zapis jest dość ciekawy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> :<br /><br />[syntax=c]*wsk++1;[/syntax]<br />Zapewne chodziło o &quot;<strong>++*wsk</strong>&quot; lub &quot;<strong>(*wsk)++</strong>&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 26 lis 2014, o 20:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anysiu68]]></name></author>
<updated>2014-11-26T19:51:04+01:00</updated>
<published>2014-11-26T19:51:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106101#p106101</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106101#p106101"/>
<title type="html"><![CDATA[Obsługa klawiszy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9441&amp;p=106101#p106101"><![CDATA[
Witam.<br />Mam pytanie na temat funkcji służącej do obsługi klawiszy napisanej przez Pana Mirka:<br /><br />[syntax=c]void key_press(uint8_t * klock, volatile uint8_t * KPIN, uint8_t key_mask, void (*kfun)(void) ) {<br /> <br /> register uint8_t key_press = (*KPIN &amp; key_mask);<br /> <br /> if( !*klock &amp;&amp; !key_press ) {<br />  *klock=1;<br /> <br />  // reakcja na PRESS (wcinięcie przycisku)<br />  if(kfun) kfun();<br /> <br /> } else if( *klock &amp;&amp; key_press ) (*klock)++;<br />}[/syntax]<br /><br />Czy można przy jej pomocy wywołać funkcję do której przekazujemy wskaźnik np:<br />[syntax=c]void funkcja(uint8_t *wsk)<br />{<br />*wsk++1;<br />}[/syntax]<br /><br />lub ogólnie jakąś zmienną?<br /><br />Funkcje bez argumentów potrafię przekazać, ale jak po wciśnięciu przycisku zmienić wartość jakiejś zmiennej, która nie jest globalna?<br />Dziękuję za ewentualne odpowiedzi i pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3957">Anysiu68</a> — 26 lis 2014, o 19:51</p><hr />
]]></content>
</entry>
</feed>