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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-08-01T09:29:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7748&amp;mode</id>
<entry>
<author><name><![CDATA[fizyk_xyz]]></name></author>
<updated>2016-08-01T09:29:33+01:00</updated>
<published>2016-08-01T09:29:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=165183#p165183</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=165183#p165183"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=165183#p165183"><![CDATA[
I oto gotowy efekt, jakby ktoś chciał, można używać do woli...<br /><br />[syntax=c]/*<br /> * 01_ARRAY_PINS main.c<br /> *<br /> *    Autor: Dąbrowski Tomasz<br /> *  Stworzono: 2016-08-01<br /> *     Edycja: 08:28:46<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br />// *********************** PRZYGOTOWANIE TABLICOWEGO DOSTĘPU DO PINÓW *********************<br /><br />//definicje portów umożliwiające działanie w formie numerycznej np.PORT(0)=PORT(PD)=PORTD<br />#define PORTS 4<br />#define PA 0<br />#define PB 1<br />#define PC 2<br />#define PD 3<br /><br />volatile uint8_t *myports&#91;&#93; = { &amp;PORTA, &amp;PORTB, &amp;PORTC, &amp;PORTD };<br /><br /><br />#define _DDR(x) _SFR_IO8(_SFR_IO_ADDR(*(myports&#91;x&#93;))-1) // adr. r. kier. DDRx<br />#define _PORT(x) _SFR_IO8(_SFR_IO_ADDR(*(myports&#91;x&#93;))) // adr. r. wyj. PORTx<br />#define _PIN(x) _SFR_IO8(_SFR_IO_ADDR(*(myports&#91;x&#93;))-2) // adr. r. wej. PINx<br />#define DDR(p) _DDR(p)<br />#define PORT(p) _PORT(p)<br />#define PIN(p) _PIN(p)<br /><br /><br />//makro zmiany opisu Px,y np PD,5 na BAJT w formacie xxxxxyyy czyli port 0-31, pin 0-7 i vice-versa<br />#define W2B(port,pin) (((port)&lt;&lt;3)|((pin)&amp;0x07))<br />#define B2P(bajt) ((bajt)&gt;&gt;3) //bajt to port<br />#define B2B(bajt) ((bajt)&amp;(0x07)) //bajt to bity<br /><br />//makra obsługi pinów w formacie LOW_A(W2B(PA,3))<br />#define OUTPUT_A(pin)            (DDR(B2P(pin))  |= (1 &lt;&lt; (B2B(pin))))<br />#define INPUT_A(pin)            (DDR(B2P(pin))  &amp;= ~ (1 &lt;&lt; (B2B(pin))))<br />#define HIGH_A(pin)            (PORT(B2P(pin))  |= (1 &lt;&lt; (B2B(pin))))<br />#define LOW_A(pin)            (PORT(B2P(pin))  &amp;= ~ (1 &lt;&lt; (B2B(pin))))<br />#define TOGGLE_A(pin)          (PORT(B2P(pin)) ^= (1 &lt;&lt; (B2B(pin))))<br />#define READ_A(pin)            ((PIN(B2P(pin)) &gt;&gt; (B2B(pin))) &amp;  1)<br /><br />//*************************** MOŻNA WYODRĘBNIĆ DO PLIKU NAGŁÓWKOWEGO ************<br /><br /><br />//************************** PROGRAM WŁAŚCIWY - WYKORZYSTANIE ******************<br /><br />//definicja przez tablicę<br />uint8_t diody&#91;&#93; = { W2B(PA,0), W2B(PA,1), W2B(PA,2),  W2B(PA,3), W2B(PA,4), W2B(PA,5),  W2B(PA,6), W2B(PA,7),<br />W2B(PB,0), W2B(PB,1), W2B(PB,2),  W2B(PB,3), W2B(PB,4), W2B(PB,5),  W2B(PB,6), W2B(PB,7),<br />W2B(PC,0), W2B(PC,1), W2B(PC,2),  W2B(PC,3), W2B(PC,4), W2B(PC,5),  W2B(PC,6), W2B(PC,7),<br />W2B(PD,0), W2B(PD,1), W2B(PD,2),  W2B(PD,3), W2B(PD,4), W2B(PD,5),  W2B(PD,6), W2B(PD,7)};<br /><br /><br />uint8_t nrLed;<br />#define T_LEDON 200<br />#define T_LEDOFF 5<br />//zwykła definicja pinu<br />#define blinkLed W2B(PD,7)<br /><br /><br />int main(void)  //rozpoczynamy<br />{<br /><br />for(nrLed=0;nrLed&lt;sizeof(diody);nrLed++) //ustawiamy nóżnki AVR na wyjścia<br />{<br />OUTPUT_A(diody&#91;nrLed&#93;);<br />}<br /><br />while(1) //pętla nieskończona<br />{<br /><br />for(nrLed=0;nrLed&lt;sizeof(diody);nrLed++)  //zapalamy i gasimy kolejne diody od w tablicy<br />{<br />HIGH_A(diody&#91;nrLed&#93;);<br />_delay_ms(T_LEDON);<br />LOW_A(diody&#91;nrLed&#93;);<br />_delay_ms(T_LEDOFF);<br /> TOGGLE_A(blinkLed); //migająca podstawa litery L<br />}<br /><br /><br />}<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />Poniższy filmik przedstawia efekt (niestety emulator i kodowanie zrobiły swoje i płynność nie odpowiada rzeczywistemu sprzętowi):<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />To tak trochę z nostalgii w oczekiwaniu na YELLOW BOOK'a (kto zgadł nawiązanie zółtymi ledami?) i filmików Pana Mirka, pozdrawiamy i życzymy duuuuuuuuuuuuuuuuuuuuuuużo siły <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=5289">fizyk_xyz</a> — 1 sie 2016, o 09:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-07-23T12:49:12+01:00</updated>
<published>2016-07-23T12:49:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164596#p164596</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164596#p164596"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164596#p164596"><![CDATA[
<div class="quotetitle">fizyk_xyz napisał(a):</div><div class="quotecontent"><br />A i pragnąłbym jeszcze poprosić znawców o nie stosowanie niestosowne krytyki. Bo jeżeli ktoś potrzebuje na forum pomocy to się pomaga. Niestety wielokrotnie zauważam przepychankę o jedynie słuszną rację, ale pomocy z nikąd.ZASADĄ JEST:Umiesz lepiej, pokaż, może inni też chcieliby się nauczyć. To tyczy się też moderatorów szanownego forum...<br /></div><br /><br />Myslę że &quot;niestosowną krytykę&quot; zastosował w tym temacie kolega <br /><br />ale w tym momencie ja piszę w innej sprawie ... <br />mianowicie jak kolega zakończy wywód ... to proszę mnie poinformować na piśmie (via PW) <br />nieco uporządkuję by  łatwiej kolegom chcącym się nauczyć czegoś nowego  się czytało <br /><br />I niniejszym przepraszam że się wcinam ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 23 lip 2016, o 12:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fizyk_xyz]]></name></author>
<updated>2016-07-23T06:52:05+01:00</updated>
<published>2016-07-23T06:52:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164589#p164589</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164589#p164589"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164589#p164589"><![CDATA[
Witam, tak przed śniadaniem dla zaostrzenia apetytu definicje z pkt.2 powinny wyglądać tak:<br /><br /> #define PORT(x) _SFR_IO8(_SFR_IO_ADDR(x))<br />#define DDR(x) _SFR_IO8(_SFR_IO_ADDR(x)-1)<br />#define PIN(x) _SFR_IO8(_SFR_IO_ADDR(x)-2)<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />Pamiętajcie oczywiście o potrzebie podwójnego definiowanie makr zgodnie z zaleceniami z BB ! Czyli zróbcie sobie np. tak:<br /><br />#define _PORT(x) ................<br />#define PORT(x) _PORT(x)<br /><br />dlaczego? Odsyłam do książki...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5289">fizyk_xyz</a> — 23 lip 2016, o 06:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fizyk_xyz]]></name></author>
<updated>2016-07-22T21:20:21+01:00</updated>
<published>2016-07-22T21:20:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164570#p164570</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164570#p164570"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164570#p164570"><![CDATA[
4a) Obracamy się w 8bitowcach póki co (ale ten trik można dopasować do 16,32 i 64 bitowej architektury), czyli do zapisu pinów 0-7 wykorzystujemy 3 bity, a pozostałe 5 z oktetu możemy wykorzystać do oznaczenia portu! Nie wiem, czy jakaś AVR'ka ma 32, bo to byłby PORTZF (zapisem EXCEL'a - 26 liter + 6 w kolejnym rzędzie).Zatem przekujmy słowa w czyny i tworzymy odpowiednie...tak makra(ja w ogóle uwielbiam makra bo są lepsze w pewnych warunkach od funkcji, a zawsze oszczędzają RAM i stos kosztem FLASH, którego i tak jest najwięcej.Ale z makrami trzeba uważać BB i GB Mirka Pana. If'ów też unikam na rzecz odpowiednich działań matematycznych, ale to już rozprawka na inny czas.)Ale do rzeczy:<br />#define PORTPIN2OKTET(port,pin) ((port)&lt;&lt;3)|((pin)&amp;7)<br />#define OKTET2PORT(oktet) ((oktet)&gt;&gt;3)<br />#define OKTET2PIN(oktet) ((oktet)&amp;7)<br /><br />i teraz elegancko:<br /><br />uint8_t diody {PORTPIN2OKTET(PA,3),PORTPIN2OKTET(PA,3)...}<br /><br />a wywołujemy:<br /><br />PORT(OCTET2PORT(diody[idx]))|=(1&lt;&lt;OCTET2PIN(diody[idx]))<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />Ot i cała filozofia. Mi to trochę zajęło: przejrzałem że 3 internety, całą dokumentację avrgcc, obejrzałem wszystkie filmy Mentora, nawet zacząłem czytać BB ze zrozumieniem, i poruszyłem parę szarych komórek , bo tylko tyle mam :{<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />5) APPENDIX. Przytoczone linijki kodu nie są dla kompilatora i mogą zawierać błędy syntetyczne! Jest to raczej forma pseudokodu avr gcc pisana z pamięci, aby naprowadzić osoby mające jakieś pojęcie o sztuce programowania uC. Gotowe kody mogę udostępnić nowicjuszem i tym co mają high end skill też oczywiście jak się wykuruję i dotrę do swego workspace w ECLIPSE.O   ile będzie zainteresowanie...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 21 minutach ]</span></strong><br /><br />A i pragnąłbym jeszcze poprosić znawców o nie stosowanie niestosowne krytyki. Bo jeżeli ktoś potrzebuje na forum pomocy to się pomaga. Niestety wielokrotnie zauważam przepychankę o jedynie słuszną rację, ale pomocy z nikąd.ZASADĄ JEST:Umiesz lepiej, pokaż, może inni też chcieliby się nauczyć. To tyczy się też moderatorów szanownego forum...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />A JEŻELI JUŻ KRYTYKA, TO TAKA  ABY DAĆ KONKRETNĄ I POSZUKIWANĄ ODPOWIEDŹ! Czyli na wysokim poziomie MERYTORYCZNYM. Dobranoc Państwu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5289">fizyk_xyz</a> — 22 lip 2016, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fizyk_xyz]]></name></author>
<updated>2016-07-22T20:13:06+01:00</updated>
<published>2016-07-22T20:13:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164563#p164563</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164563#p164563"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164563#p164563"><![CDATA[
No to lecimy, z tym że będę pisał na raty, bo ciężko u mnie z netem teraz no i maże że smartfona.<br /><br />1) tworzymy sobie tablicę referencji na porty poprzez ich adresy, coś na kształt:<br />uint16_t *porty {&amp;PORTA, &amp;PORTB, &amp;PORTC, &amp;PORTD};<br />#define PA 0<br />.....<br />#define PD 3<br /><br />w programie swoim piny będziemy definiować jako:<br />#define LED PC,5<br />(Niestety celowo unikam definicji portów jako pojedyncze nlitery like this:#define C 3, co umożliwiłoby całkowitą zgodność z metodą przedstawioną powyżej, czyli:<br />#define LED C,2 . Po prostu nie chciałbym &quot;zakręcić preprocesora ani kompilatora&quot;, może podołali by albo i nie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 20 minutach ]</span></strong><br /><br />2) Mając świadomość że rejestry PORT,DDR i PIN występują po sobie z offsetem 1 (przynajmniej większość popularnych-można podejrzeć w plikach ioxxx.h) definiujemy makra dostępu do nich. Obecnie musiałbym jak wy pobuszować po sieci, bo nie pamiętam, podpowiedzią będzie makro avr gcc _SFR_BYTE. Będzie to coś na kształt:<br />#define PORT(x) _SFR_BYTExxx(x)<br />#define DDR(x) _SFR_BYTExxx(x+1)<br />#define PIN(x) _SFR_BYTExxx(x+2)<br /><br />gdzie x adres wymaganego portu, podawany jako:<br />DDR(porty(PA))<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 26 minutach ]</span></strong><br /><br />3) Tworzymy na podstawie poprzedniego rozwiązania makra dostępu do pinów Atmegi zastępując odwołania DDR,PORT,PIN stworzonymi makrami w punkcie 2.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 39 minutach ]</span></strong><br /><br />4) &quot;OPTYMALIZATOR RAM&quot;. Jak słusznie ktoś już z Was wywnioskował to podejście idealnie nadaje się do operowania w tablicy pinami.Użyteczności wiele:wyświetlacze na magistrali równoległej, multiLCD library, o czym wcześniej wspominałem, czy choćby miganie diodami na wszystkich pinach procka w JEDNEJ pętli like Arduino. Ale tablica:<br />uint8_t diody{{PA,0},{PA,3}, {PD,7},{PB,2}};<br />(tu można tak ją definiować bo wszystkie PORTY są liczbami} niepotrzebnie traci RAM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5289">fizyk_xyz</a> — 22 lip 2016, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[malavva]]></name></author>
<updated>2016-07-22T19:37:28+01:00</updated>
<published>2016-07-22T19:37:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164560#p164560</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164560#p164560"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164560#p164560"><![CDATA[
Każda propozycja będzie ciekawa. Zawsze to krok do przodu, nawet jeżeli nie byłoby to kompletne rozwiązanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11405">malavva</a> — 22 lip 2016, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fizyk_xyz]]></name></author>
<updated>2016-07-22T18:36:56+01:00</updated>
<published>2016-07-22T18:36:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164558#p164558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164558#p164558"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164558#p164558"><![CDATA[
<div class="quotetitle">kicajek napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">fizyk_xyz napisał(a):</div><div class="quotecontent">... A definiowanie połączeń typu w/w to porażka i męczarnia.<br /></div><br />Nie za mocne?   <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /></div><br /><br />Mam lepsze - definicję pinów w tablicach, to dopiero odjazd, potrzebowałem wymyśleć coś do sterowania wieloma Hd44780 na jednym uC. Niestety obecnie nie mam jak wkleić źródeł, bo jestem hospitalizowany i kompakty zostawiłem w domu. Jakby kogoś interesowało to mogę opisać algorytm.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5289">fizyk_xyz</a> — 22 lip 2016, o 18:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-07-22T18:09:14+01:00</updated>
<published>2016-07-22T18:09:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164556#p164556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164556#p164556"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164556#p164556"><![CDATA[
<div class="quotetitle">fizyk_xyz napisał(a):</div><div class="quotecontent"><br />... A definiowanie połączeń typu w/w to porażka i męczarnia.<br /></div><br />Nie za mocne?   <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=826">kicajek</a> — 22 lip 2016, o 18:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fizyk_xyz]]></name></author>
<updated>2016-07-22T17:36:28+01:00</updated>
<published>2016-07-22T17:36:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164555#p164555</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164555#p164555"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164555#p164555"><![CDATA[
Panowie zapraszam na <!-- w --><a class="postlink" href="http://www.starlino.com/port_macro.html" >www.starlino.com/port_macro.html</a><!-- w --> i w sekcji AVR macie porządne makra obsługi pinów.Osobiście używam i sprawdzają się rewelacyjnie. A definiowanie połączeń typu w/w to porażka i męczarnia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5289">fizyk_xyz</a> — 22 lip 2016, o 17:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[malavva]]></name></author>
<updated>2016-07-21T18:29:50+01:00</updated>
<published>2016-07-21T18:29:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164450#p164450</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164450#p164450"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=164450#p164450"><![CDATA[
Kolego Alef, czy udało Ci się rozwiązać ten problem? Stanąłem w tym samym miejscu i nijak nie mogę ruszyć dalej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11405">malavva</a> — 21 lip 2016, o 18:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[alef]]></name></author>
<updated>2014-07-13T09:13:54+01:00</updated>
<published>2014-07-13T09:13:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87431#p87431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87431#p87431"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87431#p87431"><![CDATA[
<div class="quotetitle">xbary napisał(a):</div><div class="quotecontent"><br />Ja dla procesorów STM sprawę rozciągłem w ten sposób<br /></div><br />Analogicznie działa to dla Microchip'a, ale Microchip wspiera operacje na bitach, a AVR nie.<br />Poza tym to dział  &quot;Język C dla AVR&quot;.<br /><div class="quotetitle">atmel napisał(a):</div><div class="quotecontent"><br />Wydaje mi się, że prostszym rozwiązaniem jest po prostu posłużenie się wskaźnikami:<br /></div><br />To nie rozwiązanie problemu tylko jego obejście. Chociaż pomysł niezły i będę musiał go popróbować.<br /><br />Mi chodziło o to jak &quot;wyłuskać&quot; A z PA1 i dokleić potem do PORT. Jak dokleić to wiem - wykorzystując &quot;stringifikację&quot;, czyli przekazanie napisu a nie wartości w poleceniu #define. Ale jak wyłuskać, tego nie wiem i tego pragnę się dowiedzieć.<br /><br />Nadal nie wiem jak podejrzeć plik po preprocesorze, a byłoby to bardzo użyteczne przy testowaniu makr preprocesora.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3742">alef</a> — 13 lip 2014, o 09:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JanuszT]]></name></author>
<updated>2014-07-13T07:28:35+01:00</updated>
<published>2014-07-13T07:28:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87426#p87426</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87426#p87426"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87426#p87426"><![CDATA[
Witam<br /><br />Spójrz tutaj:<br /><a href="http://mirekk36.blogspot.com/2011/12/jezyk-c-makra-upraszczajace-dostep-do.html"  class="postlink">http://mirekk36.blogspot.com/2011/12/jezyk-c-makra-upraszczajace-dostep-do.html</a><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4367">JanuszT</a> — 13 lip 2014, o 07:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-07-12T19:50:45+01:00</updated>
<published>2014-07-12T19:50:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87388#p87388</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87388#p87388"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87388#p87388"><![CDATA[
Wydaje mi się, że prostszym rozwiązaniem jest po prostu posłużenie się wskaźnikami:<br /><br />[syntax=cpp]#define LED_PORT PORTA<br />#define LED_PIN 1<br />#define LED_DDR *(&amp;LED_PORT - 1)<br />...<br />LED_DDR |= 1&lt;&lt;LED_PIN; // Wyjście<br />LED_PORT |= 1&lt;&lt;LED_PIN; // Stan wysoki na wyjściu;<br />LED_PORT &amp;= ~(1&lt;&lt;LED_PIN); // Stan niski na wyjściu<br /><br />...<br /><br />#define BUTTON_PORT PORTA<br />#define BUTTON_PIN 2<br />#define BUTTON_DDR *(&amp;BUTTON_PORT - 1)<br />#define BUTTON__PIN *(&amp;BUTTON_PORT - 2)<br />...<br />BUTTON_DDR &amp;= ~(1&lt;&lt;BUTTON_PIN); // Wejście<br />bool In = BUTTON__PIN &amp; 1&lt;&lt;BUTTON_PIN; // Stan wejścia[/syntax]<br />Wystarczy zmienić jedynie wartość PORT lub PIN w define. Oczywiście PA1 == 1, dlatego ten zapis można uprościć jedynie do numeru pinu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 12 lip 2014, o 19:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xbary]]></name></author>
<updated>2014-07-12T19:32:13+01:00</updated>
<published>2014-07-12T19:32:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87380#p87380</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87380#p87380"/>
<title type="html"><![CDATA[Re: Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87380#p87380"><![CDATA[
Ja dla procesorów STM sprawę rozciągłem w ten sposób<br /><br />Tak wyglądaja definicje pinów od LEDów np <br /><br />[syntax=c]#define LED1_ANODEPC9<br />#define LED2_ANODEPC8<br /><br />#define LED1_PORT  GPIO(LED1_ANODE)<br />#define LED1_PIN   PIN(LED1_ANODE)<br />#define LED1_ON() LED1_PORT-&gt;BSRR = LED1_PIN<br />#define LED1_OFF() LED1_PORT-&gt;BRR = LED1_PIN<br />#define LED1_TOGGLE() LED1_PORT-&gt;ODR ^= LED1_PIN<br /><br />#define LED2_PORT  GPIO(LED2_ANODE)<br />#define LED2_PIN   PIN(LED2_ANODE)<br />#define LED2_ON() LED2_PORT-&gt;BSRR = LED2_PIN<br />#define LED2_OFF() LED2_PORT-&gt;BRR = LED2_PIN<br />#define LED2_TOGGLE() LED2_PORT-&gt;ODR ^= LED2_PIN[/syntax]<br /><br />a wcześniej w inkludzie sobie rozpisałem tak<br /><br />[syntax=c]#define PC00x20<br />#define PC10x21<br />#define PC20x22<br />#define PC30x23<br />#define PC40x24<br />#define PC50x25<br />#define PC60x26<br />#define PC70x27<br />#define PC80x28<br />#define PC90x29<br />#define PC100x2a<br />#define PC110x2b<br />#define PC120x2c<br />#define PC130x2d<br />#define PC140x2e<br />#define PC150x2f<br /><br /><br />...................<br /><br />#define GPIO(P) ( \<br />P==PA0?GPIOA:P==PA1?GPIOA:P==PA2?GPIOA :P==PA3?GPIOA :P==PA4?GPIOA :P==PA5?GPIOA :P==PA6?GPIOA :P==PA7?GPIOA: \<br />P==PA8?GPIOA:P==PA9?GPIOA:P==PA10?GPIOA:P==PA11?GPIOA:P==PA12?GPIOA:P==PA13?GPIOA:P==PA14?GPIOA:P==PA15?GPIOA: \<br />P==PB0?GPIOB:P==PB1?GPIOB:P==PB2?GPIOB :P==PB3?GPIOB :P==PB4?GPIOB :P==PB5?GPIOB :P==PB6?GPIOB :P==PB7?GPIOB: \<br />P==PB8?GPIOB:P==PB9?GPIOB:P==PB10?GPIOB:P==PB11?GPIOB:P==PB12?GPIOB:P==PB13?GPIOB:P==PB14?GPIOB:P==PB15?GPIOB: \<br />P==PC0?GPIOC:P==PC1?GPIOC:P==PC2?GPIOC :P==PC3?GPIOC :P==PC4?GPIOC :P==PC5?GPIOC :P==PC6?GPIOC :P==PC7?GPIOC: \<br />P==PC8?GPIOC:P==PC9?GPIOC:P==PC10?GPIOC:P==PC11?GPIOC:P==PC12?GPIOC:P==PC13?GPIOC:P==PC14?GPIOC:P==PC15?GPIOC: \<br />P==PD0?GPIOD:P==PD1?GPIOD:P==PD2?GPIOD :P==PD3?GPIOD :P==PD4?GPIOD :P==PD5?GPIOD :P==PD6?GPIOD :P==PD7?GPIOD: \<br />P==PD8?GPIOD:P==PD9?GPIOD:P==PD10?GPIOD:P==PD11?GPIOD:P==PD12?GPIOD:P==PD13?GPIOD:P==PD14?GPIOD:P==PD15?GPIOD: \<br />P==PE0?GPIOE:P==PE1?GPIOE:P==PE2?GPIOE :P==PE3?GPIOE :P==PE4?GPIOE :P==PE5?GPIOE :P==PE6?GPIOE :P==PE7?GPIOE: \<br />P==PE8?GPIOE:P==PE9?GPIOE:P==PE10?GPIOE:P==PE11?GPIOE:P==PE12?GPIOE:P==PE13?GPIOE:P==PE14?GPIOE:P==PE15?GPIOE: \<br />P==PF0?GPIOF:P==PF1?GPIOF:P==PF2?GPIOF :P==PF3?GPIOF :P==PF4?GPIOF :P==PF5?GPIOF :P==PF6?GPIOF :P==PF7?GPIOF: \<br />P==PF8?GPIOF:P==PF9?GPIOF:P==PF10?GPIOF:P==PF11?GPIOF:P==PF12?GPIOF:P==PF13?GPIOF:P==PF14?GPIOF:P==PF15?GPIOF: \<br />P==PX0?GPIOX:P==PX1?GPIOX:P==PX2?GPIOX :P==PX3?GPIOX :P==PX4?GPIOX :P==PX5?GPIOX :P==PX6?GPIOX :P==PX7?GPIOX: \<br />P==PX8?GPIOX:P==PX9?GPIOX:P==PX10?GPIOX:P==PX11?GPIOX:P==PX12?GPIOX:P==PX13?GPIOX:P==PX14?GPIOX:P==PX15?GPIOX: \<br />P==PY0?GPIOY:P==PY1?GPIOY:P==PY2?GPIOY :P==PY3?GPIOY :P==PY4?GPIOY :P==PY5?GPIOY :P==PY6?GPIOY :P==PY7?GPIOY: \<br />P==PY8?GPIOY:P==PY9?GPIOY:P==PY10?GPIOY:P==PY11?GPIOY:P==PY12?GPIOY:P==PY13?GPIOY:P==PY14?GPIOY:P==PY15?GPIOY:GPIOY \<br />)<br /><br />#define PIN(P) ( \<br />P==PA0?GPIO_Pin_0 :P==PA1?GPIO_Pin_1 :P==PA2?GPIO_Pin_2  :P==PA3?GPIO_Pin_3  :P==PA4?GPIO_Pin_4  :P==PA5?GPIO_Pin_5  :P==PA6?GPIO_Pin_6  :P==PA7?GPIO_Pin_7: \<br />P==PA8?GPIO_Pin_8 :P==PA9?GPIO_Pin_9 :P==PA10?GPIO_Pin_10:P==PA11?GPIO_Pin_11:P==PA12?GPIO_Pin_12:P==PA13?GPIO_Pin_13:P==PA14?GPIO_Pin_14:P==PA15?GPIO_Pin_15: \<br />P==PB0?GPIO_Pin_0 :P==PB1?GPIO_Pin_1 :P==PB2?GPIO_Pin_2  :P==PB3?GPIO_Pin_3  :P==PB4?GPIO_Pin_4  :P==PB5?GPIO_Pin_5  :P==PB6?GPIO_Pin_6  :P==PB7?GPIO_Pin_7: \<br />P==PB8?GPIO_Pin_8 :P==PB9?GPIO_Pin_9 :P==PB10?GPIO_Pin_10:P==PB11?GPIO_Pin_11:P==PB12?GPIO_Pin_12:P==PB13?GPIO_Pin_13:P==PB14?GPIO_Pin_14:P==PB15?GPIO_Pin_15: \<br />P==PC0?GPIO_Pin_0 :P==PC1?GPIO_Pin_1 :P==PC2?GPIO_Pin_2  :P==PC3?GPIO_Pin_3  :P==PC4?GPIO_Pin_4  :P==PC5?GPIO_Pin_5  :P==PC6?GPIO_Pin_6  :P==PC7?GPIO_Pin_7: \<br />P==PC8?GPIO_Pin_8 :P==PC9?GPIO_Pin_9 :P==PC10?GPIO_Pin_10:P==PC11?GPIO_Pin_11:P==PC12?GPIO_Pin_12:P==PC13?GPIO_Pin_13:P==PC14?GPIO_Pin_14:P==PC15?GPIO_Pin_15: \<br />P==PD0?GPIO_Pin_0 :P==PD1?GPIO_Pin_1 :P==PD2?GPIO_Pin_2  :P==PD3?GPIO_Pin_3  :P==PD4?GPIO_Pin_4  :P==PD5?GPIO_Pin_5  :P==PD6?GPIO_Pin_6  :P==PD7?GPIO_Pin_7: \<br />P==PD8?GPIO_Pin_8 :P==PD9?GPIO_Pin_9 :P==PD10?GPIO_Pin_10:P==PD11?GPIO_Pin_11:P==PD12?GPIO_Pin_12:P==PD13?GPIO_Pin_13:P==PD14?GPIO_Pin_14:P==PD15?GPIO_Pin_15: \<br />P==PE0?GPIO_Pin_0 :P==PE1?GPIO_Pin_1 :P==PE2?GPIO_Pin_2  :P==PE3?GPIO_Pin_3  :P==PE4?GPIO_Pin_4  :P==PE5?GPIO_Pin_5  :P==PE6?GPIO_Pin_6  :P==PE7?GPIO_Pin_7: \<br />P==PE8?GPIO_Pin_8 :P==PE9?GPIO_Pin_9 :P==PE10?GPIO_Pin_10:P==PE11?GPIO_Pin_11:P==PE12?GPIO_Pin_12:P==PE13?GPIO_Pin_13:P==PE14?GPIO_Pin_14:P==PE15?GPIO_Pin_15: \<br />P==PF0?GPIO_Pin_0 :P==PF1?GPIO_Pin_1 :P==PF2?GPIO_Pin_2  :P==PF3?GPIO_Pin_3  :P==PF4?GPIO_Pin_4  :P==PF5?GPIO_Pin_5  :P==PF6?GPIO_Pin_6  :P==PF7?GPIO_Pin_7: \<br />P==PF8?GPIO_Pin_8 :P==PF9?GPIO_Pin_9 :P==PF10?GPIO_Pin_10:P==PF11?GPIO_Pin_11:P==PF12?GPIO_Pin_12:P==PF13?GPIO_Pin_13:P==PF14?GPIO_Pin_14:P==PF15?GPIO_Pin_15: \<br />P==PX0?GPIO_Pin_0 :P==PX1?GPIO_Pin_1 :P==PX2?GPIO_Pin_2  :P==PX3?GPIO_Pin_3  :P==PX4?GPIO_Pin_4  :P==PX5?GPIO_Pin_5  :P==PX6?GPIO_Pin_6  :P==PX7?GPIO_Pin_7: \<br />P==PX8?GPIO_Pin_8 :P==PX9?GPIO_Pin_9 :P==PX10?GPIO_Pin_10:P==PX11?GPIO_Pin_11:P==PX12?GPIO_Pin_12:P==PX13?GPIO_Pin_13:P==PX14?GPIO_Pin_14:P==PX15?GPIO_Pin_15: \<br />P==PY0?GPIO_Pin_0 :P==PY1?GPIO_Pin_1 :P==PY2?GPIO_Pin_2  :P==PY3?GPIO_Pin_3  :P==PY4?GPIO_Pin_4  :P==PY5?GPIO_Pin_5  :P==PY6?GPIO_Pin_6  :P==PY7?GPIO_Pin_7: \<br />P==PY8?GPIO_Pin_8 :P==PY9?GPIO_Pin_9 :P==PY10?GPIO_Pin_10:P==PY11?GPIO_Pin_11:P==PY12?GPIO_Pin_12:P==PY13?GPIO_Pin_13:P==PY14?GPIO_Pin_14:P==PY15?GPIO_Pin_15:GPIO_Pin_15 \<br />)<br /><br />#define _RCC(P) ( \<br />P==PA0?RCC_AHB1Periph_GPIOA:P==PA1?RCC_AHB1Periph_GPIOA:P==PA2?RCC_AHB1Periph_GPIOA :P==PA3?RCC_AHB1Periph_GPIOA :P==PA4?RCC_AHB1Periph_GPIOA :P==PA5?RCC_AHB1Periph_GPIOA :P==PA6?RCC_AHB1Periph_GPIOA :P==PA7?RCC_AHB1Periph_GPIOA: \<br />P==PA8?RCC_AHB1Periph_GPIOA:P==PA9?RCC_AHB1Periph_GPIOA:P==PA10?RCC_AHB1Periph_GPIOA:P==PA11?RCC_AHB1Periph_GPIOA:P==PA12?RCC_AHB1Periph_GPIOA:P==PA13?RCC_AHB1Periph_GPIOA:P==PA14?RCC_AHB1Periph_GPIOA:P==PA15?RCC_AHB1Periph_GPIOA: \<br />P==PB0?RCC_AHB1Periph_GPIOB:P==PB1?RCC_AHB1Periph_GPIOB:P==PB2?RCC_AHB1Periph_GPIOB :P==PB3?RCC_AHB1Periph_GPIOB :P==PB4?RCC_AHB1Periph_GPIOB :P==PB5?RCC_AHB1Periph_GPIOB :P==PB6?RCC_AHB1Periph_GPIOB :P==PB7?RCC_AHB1Periph_GPIOB: \<br />P==PB8?RCC_AHB1Periph_GPIOB:P==PB9?RCC_AHB1Periph_GPIOB:P==PB10?RCC_AHB1Periph_GPIOB:P==PB11?RCC_AHB1Periph_GPIOB:P==PB12?RCC_AHB1Periph_GPIOB:P==PB13?RCC_AHB1Periph_GPIOB:P==PB14?RCC_AHB1Periph_GPIOB:P==PB15?RCC_AHB1Periph_GPIOB: \<br />P==PC0?RCC_AHB1Periph_GPIOC:P==PC1?RCC_AHB1Periph_GPIOC:P==PC2?RCC_AHB1Periph_GPIOC :P==PC3?RCC_AHB1Periph_GPIOC :P==PC4?RCC_AHB1Periph_GPIOC :P==PC5?RCC_AHB1Periph_GPIOC :P==PC6?RCC_AHB1Periph_GPIOC :P==PC7?RCC_AHB1Periph_GPIOC: \<br />P==PC8?RCC_AHB1Periph_GPIOC:P==PC9?RCC_AHB1Periph_GPIOC:P==PC10?RCC_AHB1Periph_GPIOC:P==PC11?RCC_AHB1Periph_GPIOC:P==PC12?RCC_AHB1Periph_GPIOC:P==PC13?RCC_AHB1Periph_GPIOC:P==PC14?RCC_AHB1Periph_GPIOC:P==PC15?RCC_AHB1Periph_GPIOC: \<br />P==PD0?RCC_AHB1Periph_GPIOD:P==PD1?RCC_AHB1Periph_GPIOD:P==PD2?RCC_AHB1Periph_GPIOD :P==PD3?RCC_AHB1Periph_GPIOD :P==PD4?RCC_AHB1Periph_GPIOD :P==PD5?RCC_AHB1Periph_GPIOD :P==PD6?RCC_AHB1Periph_GPIOD :P==PD7?RCC_AHB1Periph_GPIOD: \<br />P==PD8?RCC_AHB1Periph_GPIOD:P==PD9?RCC_AHB1Periph_GPIOD:P==PD10?RCC_AHB1Periph_GPIOD:P==PD11?RCC_AHB1Periph_GPIOD:P==PD12?RCC_AHB1Periph_GPIOD:P==PD13?RCC_AHB1Periph_GPIOD:P==PD14?RCC_AHB1Periph_GPIOD:P==PD15?RCC_AHB1Periph_GPIOD: \<br />P==PE0?RCC_AHB1Periph_GPIOE:P==PE1?RCC_AHB1Periph_GPIOE:P==PE2?RCC_AHB1Periph_GPIOE :P==PE3?RCC_AHB1Periph_GPIOE :P==PE4?RCC_AHB1Periph_GPIOE :P==PE5?RCC_AHB1Periph_GPIOE :P==PE6?RCC_AHB1Periph_GPIOE :P==PE7?RCC_AHB1Periph_GPIOE: \<br />P==PE8?RCC_AHB1Periph_GPIOE:P==PE9?RCC_AHB1Periph_GPIOE:P==PE10?RCC_AHB1Periph_GPIOE:P==PE11?RCC_AHB1Periph_GPIOE:P==PE12?RCC_AHB1Periph_GPIOE:P==PE13?RCC_AHB1Periph_GPIOE:P==PE14?RCC_AHB1Periph_GPIOE:P==PE15?RCC_AHB1Periph_GPIOE: \<br />P==PF0?RCC_AHB1Periph_GPIOF:P==PF1?RCC_AHB1Periph_GPIOF:P==PF2?RCC_AHB1Periph_GPIOF :P==PF3?RCC_AHB1Periph_GPIOF :P==PF4?RCC_AHB1Periph_GPIOF :P==PF5?RCC_AHB1Periph_GPIOF :P==PF6?RCC_AHB1Periph_GPIOF :P==PF7?RCC_AHB1Periph_GPIOF: \<br />P==PF8?RCC_AHB1Periph_GPIOF:P==PF9?RCC_AHB1Periph_GPIOF:P==PF10?RCC_AHB1Periph_GPIOF:P==PF11?RCC_AHB1Periph_GPIOF:P==PF12?RCC_AHB1Periph_GPIOF:P==PF13?RCC_AHB1Periph_GPIOF:P==PF14?RCC_AHB1Periph_GPIOF:P==PF15?RCC_AHB1Periph_GPIOF:RCC_AHB1Periph_GPIOF \<br />)[/syntax]<br /><br />Trochę kaszanka, ale wystarczy przy pierwszych definicjach wskazać pin gdzie LEDa ma się podłączonego iii resztę preprocesor sobie poustawia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=447">xbary</a> — 12 lip 2014, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[alef]]></name></author>
<updated>2014-07-12T19:17:27+01:00</updated>
<published>2014-07-12T19:17:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87376#p87376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87376#p87376"/>
<title type="html"><![CDATA[Preprocesor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7748&amp;p=87376#p87376"><![CDATA[
Witam,<br />przy okazji zabawy z 1wire napisałem takie deklaracje<br />[syntax=c]#define  PIN_1wire  PA1<br />#define  DDR_1wire  DDRA<br />#define  PORT_1wire PORTA<br />#define I N_1wire   PINA[/syntax]<br />i teraz pytanie, jak zrobić by przy zmianie portu nie musieć zmieniać jego nazwy w 4 miejscach, tylko zmieniając nazwę pinu (tu PA1) uzyskać automatyczna zmianę w POTRA, DDA i PINA.<br />Może nie jest to szczególnie istotne, ale dla mnie jest to mocno irytujące.<br />I przy okazji w jaki sposób można podejrzeć plik po preprocesorze?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3742">alef</a> — 12 lip 2014, o 19:17</p><hr />
]]></content>
</entry>
</feed>