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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-08-24T21:42:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21174&amp;mode</id>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2018-08-24T21:42:42+01:00</updated>
<published>2018-08-24T21:42:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210990#p210990</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210990#p210990"/>
<title type="html"><![CDATA[Re: GB 8.LCDhd44780_warstwy_f.ir_mon_auto_hide]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210990#p210990"><![CDATA[
Wprowadziłem proponowane zmiany do kodu oraz sprawdziłem w zestawie uruchomieniowym,  po korekcie f.ir_mon_auto_hide monitor kodów (warstwa ir_mon_layer) jest widoczna 2s na LCD i automatycznie znika. <br /><br />Ostatecznie f. ir_mon_auto_hide ma postać :<br /><br />[syntax=c]/* visible jest dekrementowana co 1s po osiagnieciu wart.0: visible=0 ir_mon_layer OFF oraz CLR callback   */<br />void ir_mon_auto_hide(void) {<br />static uint8_t ls1=255;<br />if(ls1 != s1_cnt) {<br /><br />ir_mon_layer.visible--;<br /><br />if(  ( ir_mon_layer.visible == 0 )) {<br />/* 0s.-&gt;  2-- (2 == 0) FALSE<br /> * 1s.-&gt;  1-- (1 == 0) FALSE<br /> * 2s.-&gt;  0-- (0 == 0) TRUE   */<br />ir_mon_layer.EVENT = NULL;    /* wskaznik na f.callback NULL    */<br />}<br />ls1=s1_cnt;<br /><br />}<br />}[/syntax]<br /><br /><br /><br />Pozdrawiam i dziękuję za dodatkowe wyjaśnienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 24 sie 2018, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2018-08-24T18:57:53+01:00</updated>
<published>2018-08-24T18:57:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210982#p210982</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210982#p210982"/>
<title type="html"><![CDATA[Re: GB 8.LCDhd44780_warstwy_f.ir_mon_auto_hide]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210982#p210982"><![CDATA[
Mirek b.dziękuję za info.<br /><br />Ależ Twoje książki są żywe, no jesteś chyba jedynym autorem, który wykorzystując współczesne środki komunikacji utrzymuje prawie online kontakt z czytelnikiem, no super sprawa i świetny pomysł.<br /><br />Sprawdzę twoje sugestie i się odezwę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 24 sie 2018, o 18:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-08-24T14:20:49+01:00</updated>
<published>2018-08-24T14:20:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210971#p210971</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210971#p210971"/>
<title type="html"><![CDATA[Re: GB 8.LCDhd44780_warstwy_f.ir_mon_auto_hide]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210971#p210971"><![CDATA[
<div class="quotetitle">fobos napisał(a):</div><div class="quotecontent"><br />- nastepuje kolejna dekrementacja zmiennej ir_mon_layer.visible , zmienna ma wartość ? no tego nie rozumiem nie powinna mieć wartości -1 bo jest typu uint8_t,<br /></div><br />Ciężko mi tak z marszu wrócić do szczegółów tego kodu i też nie traktowałby go jako jakiegoś gotowego sposobu a raczej tylko jako wskazówkę - jakimi sposobami można osiągać pewne ciekawe efekty podczas programowania procków.<br /><br /><br />zapis<br /><br />[syntax=c]if( ! (ir_mon_layer.visible--)  ) { ...[/syntax]<br /><br />oznacza, że warunek sprawdza za każdym razem czy zmienna ma już wartość ZERO<br /><br />powinno chyba być tak, spróbuj:<br /><br /><br /><br />[syntax=c]if( ir_mon_layer.visible  ) {<br />                        ir_mon_layer.visible--;<br />                        if( 0 == ir_mon_layer.visible  ) {<br />                            ir_mon_layer.EVENT = NULL; /* wskaźnik na f.callback NULL dla ir_mon_layer    */<br />                        }<br />                }[/syntax]<br /><br /><br />tak na marginesie to cieszę się, że choć niewielu ale jednak jest troszkę czytelników którzy zagłębiają się w ten kod ... bo jego analiza pozwala później dużo lepiej planować wiele innych swoich algorytmów, widać tu pewne ciekawe mam nadzieję, techniki programowania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 24 sie 2018, o 14:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2018-08-24T13:40:36+01:00</updated>
<published>2018-08-24T13:40:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210968#p210968</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210968#p210968"/>
<title type="html"><![CDATA[GB 8.LCDhd44780_warstwy_f.ir_mon_auto_hide]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21174&amp;p=210968#p210968"><![CDATA[
Witam,<br />od kilku dni analizuje kod dotyczący GB 8.LCDhd44780 + projekt wielozadaniowy i jestem pod dużym wrażeniem takiego sposobu sterowania zawartością wyświetlacza LCD świetne rozwiązanie.<br />Nie zajmuję się zawodowo pisaniem kodu i pewnie dlatego tak mnie to rozwiązanie zachwyciło, mam na myśli to, że nie będąc profesjonalistą nie spotkałem się z innymi rozwiązaniami i stad trudno mi oceniać ale to co zobaczyłem jest eleganckie.<br /><br />Po to by lepiej opanować materiał wykonywałem przeróbki kodu by osiągnąć różne założenia, głównie kręciłem się wokół ON/OFF warstw przy użyciu pilota oraz zmiany kolejności/widoczności warstw : <br />W pewnym momencie chciałem za pomocą klawisza z pilota wykonać ON/OFF warstwy ir_mon_layer (monitor kodów hex pilota)  No trochę to trwało nim dokładnie zrozumiałem w jaki sposób działa f.ir_mon_auto_hide, po n-tym czytaniu byłem pewny, że nie ma potrzeby wprowadzania zmian do kodu.<br />Mirek tak napisał kod, że po załadowaniu oryginału warstwa ir_mon_layer znikinie po 2s automatycznie o ile użytkownik nie będzie naciskał klawiszy. <br /><br />Tymczasem po załadowaniu oryginalnego kodu obserwuję nieco inny efekt, naciskam dowolny klawisz pilota na wyświetlaczu LCD pojawia się kod klawisz, po 2s warstwa ir_mon_layer  znika a po kolejnej 1s pojawia się ponownie i już nie znika. Oczywiście naciśnięcie kolejnego klawisza wywołuje identyczny  scenariusz.<br />Sami spróbujcie załadować kod z GB L19_HD44780_LCD.<br /><br />Super sprawa ja się ucieszyłem nareszcie mogłem sprawdzić czy tylko czytałem GB czy czytałem ze zrozumieniem.<br />To co poniżej opisuję to moja interpretacja może być błędna, w końcu najwięcej uczymy się właśnie na błędach.<br /><br />Zabrałem się do szukania przyczyny, po długich poszukiwaniach ustaliłem, że przyczyną ponownego (po 1s) włączenia warstwy ir_mon_layer jest jakaś nieprawidłowość w funkcji (f.) ir_mon_auto_hide. <br /><br />Lepiej przyjrzałem się f.ir_mon_auto_hide jak w szczegółach ona działa ?, nie opisuje wszystkiego bo to jest w książce skupiłem się  na f.ir_mon_auto_hide i jej otoczeniu, ważne są warunki startowe omawianej funkcji.<br /><br />Wcześniej f. nadrzędna  f.show_ir_mon  ustaliła warunki startowe dla f.ir_mon_auto_hide:<br />1. przypisała callbacka  ir_mon_layer.EVENT = ir_mon_auto_hide;  od tej pory zdarzenie  BARREL_EVENT(1) będzie z rozdzielczością co 100ms wywoływało f. ir_mon_auto_hide<br />2.  ustawiono wartość ir_mon_layer.visible=2;<br /><br />[syntax=c]/*  f.właściwość visible jest dekrementowana co 1s po osiągnięciu wart. 0-&gt; visible=0 OFF oraz CLR wsk.na warstwe -&gt;ir_mon_layer  */<br />void ir_mon_auto_hide(void) {<br />static uint8_t ls1=255;<br />IFAif(ls1 != s1_cnt) {<br /><br />IFBif( ! (ir_mon_layer.visible--)  ) {<br />/* 0.-&gt; !( 2--) FALSE<br /> * 1.-&gt; !( 1--) FALSE<br /> * 2.-&gt; !( 0--) TRUE   */<br />ir_mon_layer.EVENT = NULL; /* wskaźnik na f.callback NULL dla ir_mon_layer    */<br />ir_mon_layer.visible=0;<br /><br />}<br />ls1=s1_cnt;<br /><br />}<br />}[/syntax]<br /><br />Opis działania f.ir_mon_auto_hide:<br /><br />1.wywołania f.ir_mon_auto_hide są inicjowane przesz zdarzenie BARREL_EVENT(1), przy pierwszym wywołaniu f.ir_mon_auto_hide    wyrażenie  w ifA TRUE, wartość wyrażenia ifB FALSE   gdyż zmienna ir_mon_layer.visible=2, następuje postdekrementacja zmiennej ir_mon_layer.visible<br /><br />2.kilkanascie kolejnych wywołań f.callback ir_mon_auto_hide inicjowanych przez zdarzenie BARREL_EVENT(1) dla   warstwy r_mon_layer nie wywoła żadnych zmian gdyż wartość wyrażenia ifA FALSE, musi upłynąć 1s by zmienna/timer  s1_cnt zmieniła wartość<br /><br />3.po upływie 1s i kolejnym wywołaniu f.ir_mon_auto_hide ifA TRUE wartosc wyrazenia ifB FALSE  gdyż zmienna  r_mon_layer.visible=1,kolejna postdekrementacja zmiennej ir_mon_layer.visible<br /><br />4.po kolejnej 1s ifA TRUE wartość wyrażenia ifB TRUE (visible=0) <br />  - wykonana zostanie instrukcja ir_mon_layer.EVENT = NULL; która wyzeruje wsk.na naszą f.callback ir_mon_auto_hide od tego  momentu  zdarzenie BARREL_EVENT(1) <br />    nie będzie wywoływało f.ir_mon_auto_hide <br />  - nastepuje kolejna dekrementacja zmiennej ir_mon_layer.visible ,  zmienna ma wartość ? no tego nie rozumiem nie powinna mieć wartości -1 bo jest typu uint8_t, <br />    pomimo tego dopisuję instrukcję ir_mon_layer.visible=0; i od teraz wszystko działa tak jak trzeba.<br /><br />Po dodaniu instrukcji do f.ir_mon_auto_hide ir_mon_layer.visible=0; warstwa ir_mon_layer znika po 2s i już się nie pojawia, oczywiście kolejne naciśniecie <br />klawisza włącza warstwę i widzimy wartość kodu klawisza i po kolejnych 2 s znika.<br />Jednak dlaczego ten problem ma miejsce skoro zmienna ir_mon_layer.visible jest typu uint8_t ?<br />Nicht Gut.!!<br /><br />Proszę o info  co o tym myślicie, może zbłądziłem i leże jak ta biedna fretka w agreście ?<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 24 sie 2018, o 13:40</p><hr />
]]></content>
</entry>
</feed>