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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-02-22T22:04:20+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=10752&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-02-22T22:04:20+01:00</updated>
<published>2015-02-22T22:04:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120460#p120460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120460#p120460"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120460#p120460"><![CDATA[
<div class="quotetitle">rekon napisał(a):</div><div class="quotecontent"><br />bo dopóki nie zrozumiem dlaczego nie wolno dotykać piekarnika to będę szedł w stronę ciepła<br /></div><br />Nie zrozum mnie - źle ... ja to doskonale rozumiem. Wspomniałem o pewnych ogólnych zasadach ... a to nie oznacza, że KAŻDY musi działać tak samo .... a już całkowicie zrozumiałe dla mnie jest gdy ktoś musi przede wszystkim coś zrozumieć &quot;po swojemu&quot; .... toż to normalne .... i absolutnie nie chodzi przecież o to aby tu ktoś komuś narzucał jakieś zdanie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... przede wszystkim programowanie - to fajna zabawa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a tym bardziej jeśli można się dzielić tyloma ciekawymi opiniami, poradami ... i podyskutować na spokojnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 lut 2015, o 22:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-22T21:24:44+01:00</updated>
<published>2015-02-22T21:24:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120444#p120444</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120444#p120444"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120444#p120444"><![CDATA[
<strong>mirekk36</strong> wg. mnie chodzi o wyższość, bo dopóki nie zrozumiem dlaczego nie wolno dotykać piekarnika to będę szedł w stronę ciepła <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Bez względu na to z jakiego powodu jakieś rozwiązanie jest &quot;złe&quot; czy też &quot;gorsze&quot; to musi za tym przemawiać jakaś korzyść dla drugiego rozwiązania. Dopóki ja nie zrozumiem tej korzyści to będę pisał tak jak mi wygodniej i myślę że nie tylko ja tak mam (korzyścią może być choćby to że będę pisał tak jak wszyscy inni dzięki czemu łatwiej jest współpracować - ale wszyscy inni pewnie nie piszą w taki sposób żeby dopasować się do wszystkich innych)<br />Zdaje sobie sprawę z różnych kryteriów optymalizacji.<br /><br /><br /><strong>mokrowski</strong> masz bardzo ciekawe podejście. Wydaje się ono całkiem słuszne, ale... <br />niestety jestem taką istoto która sama musi popełnić wszystkie możliwe błędy - jeśli ktoś mi powie o problemie a ja nie zrozumiem tego w pełni to pewnie nie uznam to za możliwe w moim specyficznym przypadku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  <br /><br />Faktycznie ciekawie wygląda plik *.lss z kodem C ale ma to raczej znaczenie przy większych projektach.<br />jeśli chodzi o zabawę w asemblera to chyba już starczy na dzisiaj bo na jutro nie zostawie sobie niczego do odkrywania <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />ale jeśli chodzi o optymalizację tych funkcji o czym wspominałeś faktycznie udało się <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> przy optymalizacji -O2 chyba dopiero ale zawsze <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no i niestety zaskoczenie było niewielkie bo wszystko było już zaspoilowane <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />odnośnie call - tak jak pisałem w na koniec wynikało to z kompilowania dla atmegi16 a patrzenia w specyfikację atmegi8 i tak jak pisałem było to tak jak napisałem informacje znalazłem w specyfikacji atmegi8 (podejrzewam że dowolna młodsza niż z 2003 roku będzie miała tą informację) i tutaj masz bezpośredni link do strony atmela (strona 322)<br /><a href="http://www.atmel.com/Images/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf"  class="postlink">http://www.atmel.com/Images/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf</a><br /><br />odnośnie mojej wspaniałej optymalizacji... okazało się że nie ma problemu aby podzielić częstotliwość przerwania ... wielokrotnie - i tym optymistycznym akcentem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />edit. aaa Mirku! odnośnie asemblera - kazali mi się nauczyć to znam (a przynajmniej znam zasady), pisałem w tym wystarczająco długo żeby trzymać klawiaturę za oknem- czyli jakieś 100 linijek <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> swoją drogą bezprzewodowa klawiatura dla programisty to chyba ostatecznie zły wybór <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> Ale czasem fajnie jest wiedzieć &quot;co w trawie piszczy&quot; choćby po to żeby przeanalizować jak działa przedrostek volatile jak to pokazujesz na blogu co miałem przyjemność dzisiaj czytać <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=7932">rekon</a> — 22 lut 2015, o 21:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-02-22T14:56:48+01:00</updated>
<published>2015-02-22T14:56:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120363#p120363</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120363#p120363"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120363#p120363"><![CDATA[
<div class="quotetitle">rekon napisał(a):</div><div class="quotecontent"><br />ale być może nie rozumiem wyższości tych funkcji z tego poziomu.<br /></div><br />Być może się mylę ale ...<br /><br />po pierwsze nie chodzi tu o wyższość jednego rodzaju funkcji nad drugą w sensie stricte np zajętości pamięci Flash. Nie zawsze optymalizacja kodu wiąże się TYLKO przecież z ilością kodu we flash, czasem wiąże się właśnie z CZASEM wykonywania i wtedy godzimy się nawet na to żeby zajętość FLASH była większa ....<br /><br />ale czasem - i to bywa chyba NAJWAŻNIEJSZE ... optymalizujemy kod pod kątem przyszłego użycia, hmmm stylu programowania, bo ważniejsze jest nie to jak dużo kod zajmie (można wziąć przecież procka z większą pamięcią flash) .... ale na ile kod będzie czytelny nawet po 10 latach gdy do niego sięgniemy albo jak wyżej pisał kolega na ile łatwo będzie w takim kodzie odnaleźć błędy ... i to (wydaje mi się) chcieli także koledzy wyżej przekazać ....<br /><br />dodatkowo warto zwrócić uwagę na to ... że język C to nie asembler a często zapominają o tym osoby mocno związane z asemblerem i próbują rozpatrywać nawet prosty kod pod kątem każdej najbardziej niskopoziomowej instrukcji procesora gdy tymczasem najczęściej nie ma to najmniejszego znaczenia - że kod wykona się w 2 czy w 5 cyklach zegara. To jest też taki właśnie przypadek ( tak mi się wydaje - zaznaczam ) .... <br /><br />Jak widać kwestii czytelności kodu (dobrego stylu programowania) nigdy nie rozwiążemy poprzez zmianę procka ale już brak pamięci flash, ram czy eeprom spokojnie tak <br /><br />Na zakończenie - oczywiście bardzo fajnie jest znać asembler i umieć sobie analizować kod niskiego poziomu bo choć rzadko - to jednak być może czasem ... czasem kiedyś tam może się to przydać przecież pisząc jakiś wysoce zaawansowany w czasowe zależności projekt<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 lut 2015, o 14:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-22T12:12:25+01:00</updated>
<published>2015-02-22T12:12:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120336#p120336</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120336#p120336"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120336#p120336"><![CDATA[
<strong>mokrowski</strong> odpowiadając od końca przepraszam Cię, zareagowałem bardzo nieuprzejmie conajmniej. Na swoje usprawiedliwienie mogę dodać że wczoraj był bardzo męczący dzień aczkolwiek to nie jest żadne usprawiedliwienie...<br />3. brak doświadczenia zdecydowanie cechuję moją osobę, w ciągu ostatnich 3 lat na studiach uczono nas programować w 6 czy 7 językach programowania więc w każdym wiem wystarczająco dużo żeby nie wytrzymywać z nudów czytając książki odnośnie języków programowania, a czasem po prostu miesza się to wszystko i zapomina się o takiej rzeczy jak &quot;&amp;&amp;&quot;, a niestety pomimo iż powinni uczyć nas przede wszystkim programować sprzęt to jest to zupełnie pominięte ale za to zrobiłem już ze 3 kalkulatory ... <br />1-2. to o co zapytałem było elementarne i to nie tylko wg. Ciebie - jest to podstawowa operacja i tłumaczy się to wszędzie jeśli tylko wspomina się o instrukcjach warunkowych niestety dziura w głowie wyżarła tą informację, Twoja odpowiedź faktycznie była staranna i całe szczęście że są jeszcze ludzie którym się chce<br />Jeszcze odnośnie początkującego - jestem początkującym w AVR ale nie koniecznie w programowaniu, stąd jakaś tam chora ambicja i duma poczuła się dotknięta kiedy zwróciłeś uwagę na konwencję którą raczej znam i zwykle stosuje ale chciałem aby opis problemu był najłatwiejszy z możliwych <br />0. Co do GND, ehhhh &gt;&gt;westchnął patrząc na swoje rezystory przy przyciskach&lt;&lt;. &quot;Podciąganie programowe&quot; nawet mi nie przyszło do głowy - na szczęście. Element zaskoczenia zawsze jest pozytywny bo sprawdza czujność <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nawet jeśli jest zaskoczenie jest niezamierzone. <br /><br />-1. Co do kodu w asemblerze dzięki za sugestię - byłem, sprawdziłem:)<br />Faktycznie jestem zdziwiony, ale chyba nie tak jak miałem.<br />Pozwolę sobie wrzucić tutaj kody w C oraz asemblera wygenerowanego z tych kodów. Dodałem jedynie coś w warunku oraz część else. <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;stdbool.h&gt;<br /><br />bool switch1_pressed(void);<br />bool switch2_pressed(void);<br />bool both_switch_pressed(void);<br /><br /><br />int main(void) {<br />    if( both_switch_pressed() ) {<br />DDRB |= (1&lt;&lt;PB4);<br />    }else{<br />    DDRB |= (1&lt;&lt;PB4) | (1&lt;&lt;PB0);<br />    }<br /><br />while(1);<br />}<br /><br />bool switch1_pressed(void) {<br />    return !(PIND &amp; ( 1 &lt;&lt; PD0) );<br />}<br /><br />bool switch2_pressed(void) {<br />    return !(PIND &amp; ( 1 &lt;&lt; PD1 ) );<br />}<br /><br />bool both_switch_pressed(void) {<br />    return (switch1_pressed() &amp;&amp; switch2_pressed() );<br />}[/syntax]<br /> i odpowiadający<br />[syntax=asm]0000006c &lt;switch1_pressed&gt;:<br />  6c:80 b3       inr24, 0x10; 16<br />  6e:80 95       comr24<br />  70:81 70       andir24, 0x01; 1<br />  72:08 95       ret<br /><br />00000074 &lt;switch2_pressed&gt;:<br />  74:80 b3       inr24, 0x10; 16<br />  76:86 95       lsrr24<br />  78:81 70       andir24, 0x01; 1<br />  7a:91 e0       ldir25, 0x01; 1<br />  7c:89 27       eorr24, r25<br />  7e:08 95       ret<br /><br />00000080 &lt;both_switch_pressed&gt;:<br />  80:0e 94 36 00 call0x6c; 0x6c &lt;switch1_pressed&gt;<br />  84:88 23       andr24, r24<br />  86:19 f0       breq.+6      ; 0x8e &lt;both_switch_pressed+0xe&gt;<br />  88:0e 94 3a 00 call0x74; 0x74 &lt;switch2_pressed&gt;<br />  8c:02 c0       rjmp.+4      ; 0x92 &lt;both_switch_pressed+0x12&gt;<br />  8e:80 e0       ldir24, 0x00; 0<br />  90:90 e0       ldir25, 0x00; 0<br />  92:81 70       andir24, 0x01; 1<br />  94:08 95       ret<br /><br />00000096 &lt;main&gt;:<br />  96:0e 94 40 00 call0x80; 0x80 &lt;both_switch_pressed&gt;<br />  9a:88 23       andr24, r24<br />  9c:11 f0       breq.+4      ; 0xa2 &lt;main+0xc&gt;<br />  9e:bc 9a       sbi0x17, 4; 23<br />  a0:03 c0       rjmp.+6      ; 0xa8 &lt;main+0x12&gt;<br />  a2:87 b3       inr24, 0x17; 23<br />  a4:81 61       orir24, 0x11; 17<br />  a6:87 bb       out0x17, r24; 23<br />  a8:ff cf       rjmp.-2      ; 0xa8 &lt;main+0x12&gt;[/syntax]<br /><br />oraz kod oparty na define'ach<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#define BUTT1_PRESSED !(PIND &amp; ( 1 &lt;&lt; PD0) )<br />#define BUTT2_PRESSED !(PIND &amp; ( 1 &lt;&lt; PD1) )<br />#define BOTH_BUTT_PRESSED (BUTT1_PRESSED &amp;&amp; BUTT2_PRESSED)<br /><br />int main(void) {<br />    if( BOTH_BUTT_PRESSED ) {<br />DDRB |= (1&lt;&lt;PB4);<br />    }else{<br />    DDRB |= (1&lt;&lt;PB4) | (1&lt;&lt;PB0);<br />    }<br />while(1);<br />}[/syntax]<br /><br />[syntax=asm]0000006c &lt;main&gt;:<br />  6c:80 99       sbic0x10, 0; 16<br />  6e:04 c0       rjmp.+8      ; 0x78 &lt;main+0xc&gt;<br />  70:81 99       sbic0x10, 1; 16<br />  72:02 c0       rjmp.+4      ; 0x78 &lt;main+0xc&gt;<br />  74:bc 9a       sbi0x17, 4; 23<br />  76:03 c0       rjmp.+6      ; 0x7e &lt;main+0x12&gt;<br />  78:87 b3       inr24, 0x17; 23<br />  7a:81 61       orir24, 0x11; 17<br />  7c:87 bb       out0x17, r24; 23<br />  7e:ff cf       rjmp.-2      ; 0x7e &lt;main+0x12&gt;[/syntax]<br /><br />Pierwsze moje zaskoczenie dotyczyło instrukcji &quot;call&quot;, która wg. specyfikacji atmega8, jeśli dobrze zrozumiałem została usunięta w 2003 roku ze specyfikacji, szczerze powiedziawszy nie wiem co ma to oznaczać tak dokładnie. W sumie zastanawiam się dlaczego usunięto tą instrukcję oraz dlaczego w takim razie kompilator nadal tego używa.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Removed instructions CALL and JMP from the datasheet.<br /></div><br /><br />Kolejna rzecz która mi się podoba w rozwiązaniu z &quot;define&quot; to fakt że omija wszystkie inne warunki jeśli pierwszy powoduje, iż całość się nie powiedzie od razu przeskakując do części else. Poza tym w tych listingach jest mniej więcej to czego się spodziewałem, ale być może nie rozumiem wyższości tych funkcji z tego poziomu. <br /><br />Postanowiłem jeszcze sprawdzić taki kod, który z punktu widzenia człowieka jest oczywiście bez sensu i aż się prosi aby napisać to lepiej, ale w celach edukacyjnych test odnośnie jakichś usprawnień (wiem że jest to związane z wybranym kompilatorem itd. ale chciałem sprawdzić co się dzieje domyślnie).<br />[syntax=c]int main(void) {<br />if (both_switch_pressed()) {<br />DDRB |= (1&lt;&lt;PB4);<br />    }else{<br />    DDRB |= (1&lt;&lt;PB4) | (1&lt;&lt;PB0);<br />    }<br /><br />if (both_switch_pressed()) {<br />DDRC |= (1&lt;&lt;PC4);<br />    }else{<br />    DDRC |= (1&lt;&lt;PC4) | (1&lt;&lt;PC0);<br />    }<br />while (1);<br />}[/syntax]<br /><br />Daje kod wynikowy<br /><br />[syntax=asm]00000096 &lt;main&gt;:<br />  96:0e 94 40 00 call0x80; 0x80 &lt;both_switch_pressed&gt;<br />  9a:88 23       andr24, r24<br />  9c:11 f0       breq.+4      ; 0xa2 &lt;main+0xc&gt;<br />  9e:bc 9a       sbi0x17, 4; 23<br />  a0:03 c0       rjmp.+6      ; 0xa8 &lt;main+0x12&gt;<br />  a2:87 b3       inr24, 0x17; 23<br />  a4:81 61       orir24, 0x11; 17<br />  a6:87 bb       out0x17, r24; 23<br />  a8:0e 94 40 00 call0x80; 0x80 &lt;both_switch_pressed&gt;<br />  ac:88 23       andr24, r24<br />  ae:11 f0       breq.+4      ; 0xb4 &lt;main+0x1e&gt;<br />  b0:a4 9a       sbi0x14, 4; 20<br />  b2:03 c0       rjmp.+6      ; 0xba &lt;main+0x24&gt;<br />  b4:84 b3       inr24, 0x14; 20<br />  b6:81 61       orir24, 0x11; 17<br />  b8:84 bb       out0x14, r24; 20<br />  ba:ff cf       rjmp.-2      ; 0xba &lt;main+0x24&gt;[/syntax]<br /><br />No i na koniec jest chyba jedno rozwiązanie, które w jakiś tam sposób pogodzi te 2 różne opcje, rozwiązanie które nie wykorzystuje instrukcji call i ret a mimo wszystko daje to możliwości debugowania o czym wspomina <strong>PJS</strong>. A tym rozwiązaniem są po prostu funkcje z przedrostkiem inline. W takim przypadku wilk syty i owca cała - chyba. <br /><br />Dziękuję panom za chęci pomocy pomimo mojej postawy.<br /><br />Podczas pisania posta (które zajęło dość długo) dostałem ostrzeżenie, przyjmę z pokorą. Mam nadzieję, że będzie mi dane &quot;odpracować w polu&quot; moje zachowanie.<br /><br />edit. Odnośnie mojego zdziwienia funkcją &quot;call&quot; zdziwienie było spowodowane tym że program był kompilowany pod atmege 16, a specyfikacja w którą patrzyłem była dla atmegi 8 ... po sprawdzeniu kodu wynikowego dla atmegi 8  wszystko w porządku jeśli o to chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7932">rekon</a> — 22 lut 2015, o 12:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-02-22T10:39:59+01:00</updated>
<published>2015-02-22T10:39:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120325#p120325</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120325#p120325"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120325#p120325"><![CDATA[
<div class="quotetitle">rekon napisał(a):</div><div class="quotecontent"><br />ale mam wrażenie, że było to odrobinę &quot;nadopiekuńcze&quot; i jeszcze w dodatku nie spełniało jakiś tam moich założeń<br /></div><br />Być może kolega ma jakieś &quot;dziwne&quot; hmmm wręcz chore przyzwyczajenia z innych forów... np z ele. Gdzie nie jest ważne wyjaśnienie dogłębne, nie jest ważna przyjacielska atmosfera tylko jakieś bezsensowne trzymanie się tematu - podczas gdy często autor pytania często nawet nie zdaje sobie sprawy że np idzie złą drogą, gdy ktoś chce mu pokazać szerszy aspekt problemu ... <br />Zawsze powtarzam, że warto pomagać nawet gdy się popełni jakiś błąd - bo inni (którzy akurat wiedzą więcej chętnie poprawią i zrobią to kulturalnie - dlatego na naszym forum także często pomagają całkowicie początkujący ....)<br />A tu nomen omen tak się akurat tobie trafiło że dostałeś odpowiedź i to jeszcze jaką! od na prawdę wysokiej klasy specjalisty, który świetnie przedstawił wszystko co trzeba i poza tobą jeszcze wiele innych osób może skorzystać z takiej odpowiedzi czytając w przyszłości ten post ... <br /><br />REASUMUJĄC - panie kolego rekon .... rzadko udzielam ostrzeżeń na forum (to się chyba WARN nazywa) ale w tym przypadku to robię i proszę na przyszłość dostosować się do zasad naszego forum .... i działać z nami - serdecznie zapraszam. W przeciwnym wypadku - po co się tu z nami męczyć ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 lut 2015, o 10:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2015-02-21T20:33:45+01:00</updated>
<published>2015-02-21T20:33:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120274#p120274</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120274#p120274"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120274#p120274"><![CDATA[
<div class="quotetitle">rekon napisał(a):</div><div class="quotecontent"><br />@mokrowski serio?? - w sensie zgadzam się z Tobą taki kod bardzo przyjemnie się czyta i edycja dzięki temu jest niesamowicie prosta... <br />ale nie wiem czy nie przeczytałeś czy o co chodzi ale zależało mi na zmniejszeniu liczby cykli ... a to co zaproponowałeś jest chyba jednym z mniej optymalnych rozwiązań z możliwych ...<br /></div><br />Nie tylko przyjemnie się czyta ale i debuguje, co przy twoim rozwiązaniu z define jest problematyczne. O ile w przypadku prostego programu to różnic nie będzie, to szukanie przyczyny wadliwego działania w trochę bardziej zaawansowanym programie już jest znacznie mniej przyjemne. A teraz przypuśćmy, że masz uszkodzony przycisk - jak namierzysz w programie opartym na define'ach ten &quot;problem&quot;? Z funkcjami po prostu lecisz krokowo w debugerze i już.<br />A co do optymalizacji, to kompilator prawdopodobnie (tu wszystko zależy od ustawień optymalizacji kompilatora) wygeneruje tak samo wydajny kod. Wbrew pozorom twórcy kompilatorów potrafią uwzględnić takie &quot;puste/niepotrzebne&quot; przebiegi funkcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 21 lut 2015, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-21T19:50:27+01:00</updated>
<published>2015-02-21T19:50:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120267#p120267</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120267#p120267"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120267#p120267"><![CDATA[
@mokrowski serio?? - w sensie zgadzam się z Tobą taki kod bardzo przyjemnie się czyta i edycja dzięki temu jest niesamowicie prosta... <br />ale nie wiem czy nie przeczytałeś czy o co chodzi ale zależało mi na zmniejszeniu liczby cykli ... a to co zaproponowałeś jest chyba jednym z mniej optymalnych rozwiązań z możliwych ...<br /><br />osobiście uważam że rozwiązaniem 10 razy lepszym byłoby robienie na definicjach preprocesora jak już się w to bawimy i wtedy<br /><br />[syntax=c]#define BUTT1_PRESSED (PIND &amp; ( 1 &lt;&lt; PD0) )<br />#define BUTT2_PRESSED (PIND &amp; ( 1 &lt;&lt; PD1) )<br />#define BOTH_BUTT_PRESSED (BUTT1_PRESSED &amp;&amp; BUTT2_PRESSED)<br /><br />int main(void) {<br />if( BOTH_BUTT_PRESSED ) {<br />        /* Operacja wykonywana w przypadku wciśnięcia 2 przycisków */<br />    }<br />}[/syntax]<br /><br />i przynajmniej nie wywołujesz funkcji które robią nic<br />ale zupełnie nie o to było pytanie ...<br />zresztą wydawało to o czym pisałem na początku to tak jak zaznaczyłem to był jedynie przykład (tak jak z warunkiem 1 == 1) <br />bardzo się cieszę że chcesz się podzielić swoją wiedzą i bardzo się cieszę że Ci się chce odpisywać innym, ale mam wrażenie, że było to odrobinę &quot;nadopiekuńcze&quot; i jeszcze w dodatku nie spełniało jakiś tam moich założeń<br /><br />btw. jakiś konkretny powód dla którego przyciski do GND czy &quot;tak się po prostu robi&quot;?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7932">rekon</a> — 21 lut 2015, o 19:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2015-02-21T13:02:11+01:00</updated>
<published>2015-02-21T13:02:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120195#p120195</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120195#p120195"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120195#p120195"><![CDATA[
[syntax=c]if (PIND &amp;((1&lt;&lt;PD0) | (1&lt;&lt;PD1))[/syntax]<br /><br />jak się nie mylę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 21 lut 2015, o 13:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-21T11:05:50+01:00</updated>
<published>2015-02-21T11:05:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120176#p120176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120176#p120176"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120176#p120176"><![CDATA[
hahaha oczywiście - coś tam dzwoniło w uszach że przecież to oczywiste ale nie mogłem sobie przypomnieć <br />tak to jest jak się zbyt długo robi w językach wyższego poziomu ... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />dzięki<br /><br />edit. bardzo smaczna i zdrowa ryba <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=7932">rekon</a> — 21 lut 2015, o 11:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-02-21T10:56:19+01:00</updated>
<published>2015-02-21T10:56:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120175#p120175</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120175#p120175"/>
<title type="html"><![CDATA[Re: Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120175#p120175"><![CDATA[
panie kolego podstawy C<br /><br />operatory bitowe<br /><br />&amp; | <br /><br /><br />a tu operatory logiczne<br /><br />&amp;&amp; ||<br /><br />rozumiesz ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />czyli<br /><br />[syntax=c]if( warunek1 &amp;&amp; warunek2 )[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lut 2015, o 10:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rekon]]></name></author>
<updated>2015-02-21T10:53:15+01:00</updated>
<published>2015-02-21T10:53:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120174#p120174</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120174#p120174"/>
<title type="html"><![CDATA[Łączenie warunków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10752&amp;p=120174#p120174"><![CDATA[
Witam mam problem z łączeniem warunków, tzn. np chciałbym aby dioda LED się zapaliła tylko jeśli przycisk pod PD0 oraz PD1 będzie wciśnięty<br />oczywiście można zrobić to w taki sposób <br />[syntax=c]if(PIND &amp; (1 &lt;&lt; PD0))<br />if(PIND &amp; (1 &lt;&lt; PD1))<br />LED_ON;[/syntax]<br />ale nie chciałbym tak robić ze względu na to iż jest tutaj o co najmniej jednego &quot;ifa&quot; za dużo, a ponieważ mam zamiar użyć podobnej konstrukcji w przerwaniu które wyszło mi STRASZNIE opasłe to może się to okazać kluczowe... a poza tym nie wydaje się aby to było optymalne...<br /><br />szukałbym czegoś w stylu<br /><br />[syntax=c]if((PIND &amp; (1 &lt;&lt; PD0)) &amp; (PIND &amp; (1 &lt;&lt; PD1)))<br />LED_ON;[/syntax]<br /><br />tylko że oczywiście powyższe nie zadziała bo uzyskamy (0x01 &amp; 0x02) = 0<br />tak samo jest jeśli chciałbym aby dioda się zapaliła tylko jeśli 1 jest równe 1 (albo dowolny inny warunek arytmetyczny) a przycisk pod PD1 jest wciśnięty. Poniższy kod również nie zadziała.<br />[syntax=c]if( (1 == 1) &amp; (PIND &amp; (1 &lt;&lt; PD1)))<br />LED_ON;[/syntax]<br /><br />oczywiście można się bawić w przesunięcia w stylu <br /><br />[syntax=c]if( (1 == 1) &amp; (PIND &amp; (1 &lt;&lt; PD1)) &gt;&gt; PD1)<br />LED_ON;[/syntax]<br />ale nie wiem czy jest to &quot;ładne&quot; pomimo że powinno działać <br /><br />czy jest jakiś &quot;elegancki&quot; sposób na robienie tego typu złożonych warunków??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7932">rekon</a> — 21 lut 2015, o 10:53</p><hr />
]]></content>
</entry>
</feed>