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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-10-31T06:50:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19493&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-31T06:50:26+01:00</updated>
<published>2017-10-31T06:50:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198081#p198081</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198081#p198081"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198081#p198081"><![CDATA[
<div class="quotetitle">MisterWhite napisał(a):</div><div class="quotecontent"><br />wpadłem na pewien pomysł:<br />Założyłem nowy projekt o nazwie enum_Test składający się z katalogu Test zawierającego w sobie pliki Testerek.h i Testerek.c a także z pliku main.c w katalogu głównym.<br /></div><br />No widzisz a ja wciąż powtarzam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie tylko na forum ale i w co którymś poradniku, żeby TAK właśnie robić - to się nazywa podział problemu na DWA ... od tego się zaczyna ... to podstawa podstaw ... i dzięki temu dużo szybciej udaje się rozwiązać problemy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 paź 2017, o 06:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2017-10-30T22:38:58+01:00</updated>
<published>2017-10-30T22:38:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198076#p198076</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198076#p198076"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198076#p198076"><![CDATA[
No dużo mi się wyjaśniło, teraz czuję że stoję na pewniejszym gruncie. Czasem mimo lektury niezbędne jest takie bardzo konkretne resume. Zabieram się też za oglądanie poradnika - śledzę je wszystkie od dawna, nie wiem w jaki sposób ten mi umknął.<br />Tym niemniej nie zmienia to faktu , że po uwzględnieniu tych wszystkich wiadomości program w dalszym ciągu się nie skompilował. Aby nie nadużywać Waszej cierpliwości wpadłem na pewien pomysł:<br />Założyłem nowy projekt o nazwie enum_Test składający się z katalogu Test zawierającego w sobie pliki Testerek.h i Testerek.c a także z pliku main.c w katalogu głównym.<br /><br />Testerek.h<br />[syntax=c]/*<br /> * Testerek.h    atmega32a    F_CPU = 11059200 Hz<br /> *<br /> * Created on: 30.10.2017<br /> *     Author: admin<br />*/   <br /><br />#ifndef TESTEREK_H_<br />#define TESTEREK_H_<br /><br />typedef enum {<br />    motor_left,<br />    motor_stop,<br />    motor_right<br />} edir ;<br /><br />extern edir dir;<br /><br />#endif  /* TESTEREK_H_ */[/syntax]<br /><br />plik Testerek.c<br />[syntax=c]/*<br /> * Testerek.c    atmega32a    F_CPU = 11059200 Hz<br /> *<br /> * Created on: 30.10.2017<br /> *     Author: admin<br />*/<br />#include &lt;avr/io.h&gt;<br />#include &quot;Testerek.h&quot;<br /><br /><br /><br />edir dir = motor_left ;[/syntax]<br /><br />czyli jedynie zawartość która generowała cały czas błędy - i skompilowało się bezbłędnie!!<br />Teraz będę dodawał kolejno wpisy które były poprzednio i zobaczę w którym momencie wyrzuci błąd - lub też nie.<br />Jeszcze raz dzięki za cierpliwość i pozdrawiam<br />W<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 30 paź 2017, o 22:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-10-30T19:37:09+01:00</updated>
<published>2017-10-30T19:37:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198061#p198061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198061#p198061"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198061#p198061"><![CDATA[
Można również skorzystać z typedef:<br />[syntax=c]typedef enum{_opt1, _opt2, _opt3} new_enum;<br /><br />new_enum opt = _opt2;<br /><br />if( _opt3 == opt ) ...[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 30 paź 2017, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-30T16:19:32+01:00</updated>
<published>2017-10-30T16:19:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198044#p198044</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198044#p198044"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198044#p198044"><![CDATA[
<div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Ja chyba wiem skąd ta konsternacja bierze, sam się zwykle na to łapię . Jeśli poprawnie zdefiniujemy zmienną w pliku źródłowym, to w nagłówkowym nie damy extern to też to zadziała. Człowiek naogląda się takich kodów, a potem mu się wszystko plącze<br /></div><br />Wiesz co? to bardzo słuszna diagnoza - a tym bardziej, że do dzisiaj nawet na naszym forum, zdarzają się ludzie, którzy zażarcie próbują wyjaśniać że &quot;można&quot; w plikach *.h definiować zmienne - no weź tu bądź mądry i pisz wiersze jak to się mówi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">MisterWhite napisał(a):</div><div class="quotecontent"><br />Czyżby chodziło o to by w trakcie kompilacji mógł po natrafieniu na jakąś nazwę funkcji lub zmiennej po prostu ją zidentyfikować i zorientować się w którym pliku szukać jej definicji? Czy znów mam błędne wyobrażenie?<br /></div><br /><br />masz dobre wyobrażenie ale przecież możesz sobie zawsze poza książką obejrzeć poradnik wideo - oglądałeś ten ?<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 />na prawdę - jak obejrzysz to sporo więcej ci się wyjaśni<br /><br /><br /><div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Czemu mamy &quot;enum edir dir&quot; ?<br /></div><br />No bo tak założono, że jeśli mamy stworzyć zmienną na podstawie zdefiniowanego typu wyliczeniowego to poza nazwą tego typu trzeba po lewej stronie jeszcze dodać to kocie &quot;enum&quot;<br /><br />ja z tego W OGÓLE nie korzystam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> albo bardzo rzadko - a w książce pokazałem no bo chyba warto wiedzieć, że tak też się robi w C nieprawdaż ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />To jest ten OCZOPLĄS, jak dla mnie<br /></div><br />dla mnie też - dlatego ja tam wolę z typami enum pracować w dużo prostszy sposób<br /><br />[syntax=c]enum {_opt1, _opt2, _opt3};<br /><br />uint8_t opt = _opt2;<br /><br />if( _opt3 == opt ) ...[/syntax]<br /><br />i tak dalej i tak dalej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 paź 2017, o 16:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2017-10-30T16:13:31+01:00</updated>
<published>2017-10-30T16:13:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198043#p198043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198043#p198043"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198043#p198043"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />DEKLARACJA to w przypadku funkcji - jest sam NAGŁÓWEK funkcji - często w pliku nagłówkowym *.h<br /><br />natomiast DEKLARACJA zmiennej ? ..... no tu zęby zjadają początkujący - tylko dziwię się dlaczego skoro to jest ŁADNIE opisane w Bluebooku<br /><br />deklaracja zmiennej charakteryzuje się słówkiem (specyfikatorem) &quot;extern&quot; który podajemy w pliku nagłówkowym *.h i deklaracja NIGDY nie spowoduje rezerwacji pamięci<br /></div><br /><br />Ja chyba wiem skąd ta konsternacja bierze, sam się zwykle na to łapię <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Jeśli poprawnie zdefiniujemy zmienną w pliku źródłowym, to w nagłówkowym nie damy extern to też to zadziała. Człowiek naogląda się takich kodów, a potem mu się wszystko plącze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dlatego ja staram się zawsze pisać to extern <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Mam podejrzenie o co głównie chodzi autorowi wątku. Pomimo, że już trochę programuję to pomimo tego dostaję oczopląsu, jeśli widzę typ wyliczeniowy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zwykle  definiujemy tak:<br />[syntax=c]uint8_t zmienna = 7;[/syntax]<br /><br />to nie mam kłopotu: po lewej mam typ danych, a po prawej nazwa zmiennej wraz z inicjalizacją.<br /><br />gdy wymyślimy nowy typ:<br />[syntax=c]typedef uint8_t T_SIMON;[/syntax]<br />to też zwykle nie mam kłopotu i możemy zdefiniować nowa zmienną, o nowym typie:<br />[syntax=c]T_SIMON jakasZmienna = 10;[/syntax]<br /><br />To nadal mamy jasność po lewej to, a po prawej to.<br /><br />A teraz uwaga, mamy typ wyliczeniowy:<br />[syntax=c]enum edir { motor_left, motor_stop, motor_right };[/syntax]<br /><br />mamy konsternację, czemu do jasnej anielki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> mamy definicję taką:<br />[syntax=c]enum edir dir = motor_stop ;[/syntax]<br /><br /><span style="color: #BF00FF">Czemu mamy &quot;<strong>enum edir dir</strong>&quot; ?</span><br /><br />Po lewej stronie mamy raz: <strong>enum</strong>, dwa: <strong>edir</strong>, trzy: <strong>dir </strong>i dopiero inicjalizacja, przypisanie wartości.<br /><br />To jest ten <strong>OCZOPLĄS</strong>, jak dla mnie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Teraz nie odpowiem na to pytanie, bo muszę iść, ale wieczorem siadam do książek i szukam szczegółowej odpowiedzi <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=16487">Zealota</a> — 30 paź 2017, o 16:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2017-10-30T16:07:49+01:00</updated>
<published>2017-10-30T16:07:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198042#p198042</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198042#p198042"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198042#p198042"><![CDATA[
Serdecznie dziękuję za wyjaśnienie . Mój błąd wziął się zapewne ze złego rozumienia pracy kompilatora. Ja po prostu wyobrażałem sobie ,że przed utworzeniem  zmiennej bądź funkcji musi on sobie  przygotować miejsce w pamięci i potrzebna mu do tego deklaracja. Ot taka próba wyjaśnienia na &quot;chłopski rozum&quot;.<br />No ale teraz wszystko jasne. Jeszce raz dziękuję. Spróbuję w domu poprawić kod na podstawie nowej wiedzy.<br />A swoją drogą zastanawia mnie jaką rolę pełni deklaracja i dlaczego jest kompilatorowi niezbędna. Czyżby chodziło o to by w trakcie kompilacji mógł po natrafieniu na jakąś nazwę  funkcji lub zmiennej po prostu ją zidentyfikować i zorientować się w którym pliku szukać jej definicji? Czy znów mam błędne wyobrażenie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 30 paź 2017, o 16:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-30T15:16:34+01:00</updated>
<published>2017-10-30T15:16:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198036#p198036</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198036#p198036"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198036#p198036"><![CDATA[
<div class="quotetitle">MisterWhite napisał(a):</div><div class="quotecontent"><br />deklaracja (na podstawie podanego typu zmiennej czy funkcji) rezerwuje pamięć dla tej zmiennej lub funkcji.<br /></div><br />No to zobacz - w książce NIC TAKIEGO nie ma <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> skąd ty to wziąłeś ? .... widzisz przy takim podejściu będzie ciężko, no ale skoro już się zabrałeś za książkę to jeszcze raz z uporem maniaka powtórzę<br /><br />DEFINICJA - rezerwuje pamięć i to zarówno w przypadku zmiennych jak i funkcji ... eeeeh ileż razy to trzeba powtarzać tym bardziej, że jest w książce.<br /><br />A zatem DEFINICJA to ciało funkcji natomiast DEFINICJA zmiennej to: TYP + NAZWA ZMIENNEJ;<br /><br />to samo dotyczy zmiennej enum - a to, że nie orientujesz się ile ma miejsca zająć - to co za problem zdefiniować skompilować i zobaczyć o ile więcej bajtów przybyło w RAM ? No toż to najprostszy sposób ... Później zakomentuj i sprawdź ile ubyło RAM - no i już wiesz<br /><br />DEKLARACJA to w przypadku funkcji - jest sam NAGŁÓWEK funkcji - często w pliku nagłówkowym *.h<br /><br />natomiast DEKLARACJA zmiennej ? ..... no tu zęby zjadają początkujący - tylko dziwię się dlaczego skoro to jest ŁADNIE opisane w Bluebooku<br /><br />deklaracja zmiennej charakteryzuje się słówkiem (specyfikatorem) &quot;extern&quot; który podajemy w pliku nagłówkowym *.h i deklaracja NIGDY nie spowoduje rezerwacji pamięci<br /><br />----------------------<br /><br />a teraz otwórz książkę i sprawdź bo jest w niej to samo tyle że jeszcze z przykładami<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 paź 2017, o 15:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2017-10-30T14:50:58+01:00</updated>
<published>2017-10-30T14:50:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198033#p198033</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198033#p198033"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198033#p198033"><![CDATA[
Sorry, nie chciałem zaśmiecać .Podaję cały kod modułu dotyczący sterowania silnikiem krokowym<br />Plik wtmotorstep.h<br />[syntax=c]/*<br /> * wtmotorstep.h    atmega32a    F_CPU = 11059200 Hz<br /> *<br /> * Created on: 20.10.2017<br /> *     Author: admin<br />*/<br /><br />#ifndef WTMOTORSTEP_H_<br />#define WTMOTORSTEP_H_<br />                                                                                                              <br /> /* definicje pinów sterujących tranzystorami w ULN2803 */<br />#define T1 (1&lt;&lt;PD0)<br />#define T2 (1&lt;&lt;PD1)<br />#define T3 (1&lt;&lt;PD2)<br />#define T4 (1&lt;&lt;PD3)<br /><br />/* definicje kroków sterujących pracą silnika */<br />#define KROK1 PORTD |=T1; PORTD &amp;= ~(T2|T3|T4)<br />#define KROK2 PORTD |=T2; PORTD &amp;= ~(T1|T3|T4)<br />#define KROK3 PORTD |=T3; PORTD &amp;= ~(T1|T2|T4)<br />#define KROK4 PORTD |=T4; PORTD &amp;= ~(T1|T2|T3)<br /><br />/* deklaracje funkcji */<br />volatile uint8_t motor_flag ;<br />//enum edir dir;<br /><br />// funkcja do rejestracji funkcji zwrotnej w zdarzeniu MOTORSTEP_EVENT                                       <br />void register_step_dir_callback (void (*callback) (void))<br /><br />void wtmotorstep_init ( void);<br />void MOTORSTEP_EVENT ( void);                                                                           <br />enum edir {motor_left, motor_stop, motor_right };<br />enum edir dir ;<br /><br />void steps_left (void);<br />void steps_right (void);<br /><br /><br /><br />#endif  /* WTMOTORSTEP_H_ */[/syntax]<br /><br />Plik wtmotorstep.c<br />[syntax=c]/*<br />* wtmotorstep.c    atmega32a    F_CPU = 11059200 Hz<br />*<br />* Created on: 20.10.2017<br />*     Author: admin<br />*/<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;wtmotorstep.h&quot;<br /><br />volatile uint8_t motor_flag ;<br /><br /><br />enum edir dir = motor_stop ;<br /><br />// wskaźnik do funkcji callback dla zdarzenia MOTORSTEP_EVENT do obsługi kierunku obrotu<br />static void ( *step_dir_callback )( void );<br /><br />// funkcja do rejestracji funkcji zwrotnej w zdarzeniu MOTORSTEP_EVENT<br />void register_step_dir_callback( void ( *callback )( void ) ) {<br /><br />    step_dir_callback = callback;<br />}<br /><br />void wtmotorstep_init( void ) {<br /><br />    DDRD |= T1 | T2 | T3 | T4  ; /* ustawiamy piny sterujące tranzystorami jako wyjściowe */<br />    PORTD &amp;= ~( T1 | T2 | T3 | T4 );     /*wyłączamy wszystkie tranzystory */<br /><br />    /* ustawianie TIMER0 dla F_CPU = 11,0592 MHz */<br />    TCCR0 |= ( 1 &lt;&lt; WGM01 );  /*tryb CTC */<br />    TCCR0 |= ( 1 &lt;&lt; CS02 | 1 &lt;&lt; CS00 ) ;   /* preskaler = 1024 */<br />    OCR0 = 53; /* dodatkowy podział przez 53 (rej. przepełnienia) */<br />    TIMSK |= ( 1 &lt;&lt; OCIE0 ); /* zezwolenie na przerwanie Compare Match */<br />    /* przerwanie wykonywane z częstotliwością ok. 5 ms (20 razy na sek.),nie musi tu być bardzo dokładne 5 ms.*/<br /><br />    dir = motor_stop;<br /><br />    // sei();   /*włączamy globalne przerwania */<br /><br />}<br /><br />void MOTORSTEP_EVENT( void ) {<br /><br />    if ( step_dir_callback ) step_dir_callback();<br /><br /><br />    if ( motor_flag ) {<br />        if ( dir == motor_left )  steps_left();<br />        else<br />            if ( dir == motor_right ) steps_right();<br />        motor_flag = 0;<br />    }<br />}<br /><br />/* funkcja wykonująca cyklicznie kroki ( obrót w lewo ) */<br />void steps_left( void ) {<br />    static uint8_t kr;<br />    if ( kr == 0 ) {<br />        KROK1;<br />    }<br />    if ( kr == 1 ) {<br />        KROK2;<br />    }<br />    if ( kr == 2 ) {<br />        KROK3;<br />    }<br />    if ( kr == 3 ) {<br />        KROK4;<br />    }<br />    if ( ++kr &gt; 3 ) kr = 0;<br /><br />}<br /><br />/* funkcja wykonująca cyklicznie kroki ( obrót w prawo ) */<br />void steps_right( void ) {<br />    static uint8_t kr;<br />    if ( kr == 0 ) {<br />        KROK4;<br />    }<br />    if ( kr == 1 ) {<br />        KROK3;<br />    }<br />    if ( kr == 2 ) {<br />        KROK2;<br />    }<br />    if ( kr == 3 ) {<br />        KROK1;             <br />    }<br />    if ( ++kr &gt; 3 ) kr = 0;<br /><br />}<br /><br />/* =============================== PROCEDURA OBSŁUGI PRZERWANIA - COMPARE MATCH ==================================== */<br />/* pełni funkcję timera programowego, wyznaczającego podstawę czasu = 5 ms oraz 1s. */<br /><br />ISR( TIMER0_COMP_vect ) {<br />    motor_flag = 1;  /* ustawia flagę tyknięcia 5 ms */<br /> }[/syntax]<br /><br />W zasadzie jest to prawie czysty kod z książki , pozbawiony flag związanych z automatyczna zmianą obrotów i z dodaną funkcja callback która w założeniu będzie miała ustalać wartość zmiennej dir.<br /><br />Jeśli chodzi o moje rozumienie różnic pomiędzy deklaracja a definicją to tak jak ja to rozumiem,  deklaracja  (na podstawie podanego typu zmiennej czy funkcji) rezerwuje pamięć dla tej zmiennej lub funkcji. W wypadku funkcji niezbędne jest podanie jeszcze jakie i jakiego typu zmienne będą brały udział w tej funkcji. Wszystko to oczywiście w celu zarezerwowania odpowiedniego miejsca w pamięci.<br />Natomiast definicja jest już po prostu ciałem funkcji czyli jej realizacją.<br />Natomiast w przypadku enum nie jest dla mnie jasne skąd kompilator ma wiedzieć ile pamięci zarezerwować, czy należy to traktować jako stałą tekstową, czy biorąc pod uwagę  że dla typu enum można podawać też kolejne liczby, kompilator traktuje je jako stałe typu int?<br />Poza tym nie do końca jest dla mnie jasna zasada tworzenia zmiennej dir przymierającej wartości z zakresu edir. Zgodnie z podpowiedzią spróbuję może przypomnieć sobie zasady rządzące typedef, może coś to wyjaśni.<br />To jest dla mnie niejasne.<br />Pozdrawiam<br />W<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 30 paź 2017, o 14:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-30T13:54:41+01:00</updated>
<published>2017-10-30T13:54:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198032#p198032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198032#p198032"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198032#p198032"><![CDATA[
no tak rzeczywiście nie wiesz czym różni się DEFINICJA od DEKLARACJI zmiennej - a jest to OPISANE w Bluebooku - zajrzyj więc do książki i powiedz, czego nie rozumiesz z tego opisu - bo sorki jeśli chodzi o mnie nie mam już siły ale też czasu żeby po raz 625476-ty opisywać to samo i pokazywać na forum a nie dalej jak kilka dni temu to znowu komuś wyjaśniałem ... Tyle że żeby wyjaśniać to napisz czego z książki nie rozumiesz - z tego wyjaśnienia różnic dla zmiennych<br /><br />i tak jak kolega wyżej pisze pokazałbyś więcej kodu - bo z tego co jest - to pomimo, że z błędami to i tak to się skompiluje bez żadnych błędów - więc coś jeszcze masz mega namieszane<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 paź 2017, o 13:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2017-10-30T13:44:06+01:00</updated>
<published>2017-10-30T13:44:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198031#p198031</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198031#p198031"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198031#p198031"><![CDATA[
W tym przypadku zdecydowanie potrzebny jest większy wycinek tego co napisałeś.<br />Bo nie wiadomo czy te wpisy to w funkcjach, czy w pliku źródłowym, a może też i nagłówkowym<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 30 paź 2017, o 13:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2017-10-30T13:10:35+01:00</updated>
<published>2017-10-30T13:10:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198028#p198028</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198028#p198028"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198028#p198028"><![CDATA[
Dzięki wielkie za podpowiedź, ale w przykładzie  15 PetitFS jest to znacznie bardziej zaawansowane, z użyciem typedef. Natomiast ja chciałem wykorzystać  znacznie prostszą konstrukcję która była umieszczona w przykładzie 13. Więc w pliku wtmotorstep.h wstawiłem:<br /><br />[syntax=c]32. enum edir {motor_left, motor_stop, motor_right };<br />33. enum edir dir ;[/syntax]<br /><br />natomiast w pliku wtmotorstep.c<br /><br />[syntax=c]14. enum edir dir = motor_stop ;[/syntax]<br /><br />W MKclipse kompilator się buntuje:<br /><br /><ul>STEPMOTOR/wtmotorstep.h:32:1: warning: empty declaration [enabled by default]<br /> enum edir {motor_left, motor_stop, motor_right };<br /> ^  <br /> </ul>I dalej:<br /><ul>STEPMOTOR/wtmotorstep.c:14:6: error: parameter 'dir' is initialized<br /> enum edir dir = motor_stop ;<br />      ^<br /></ul>i kolejny komumnikat dotyczący tego samego  ale inaczej sformułowany:<br /><br /><ul>STEPMOTOR/wtmotorstep.c:14:11: error: redefinition of parameter 'dir'<br /> enum edir dir = motor_stop ;                                           <br />           ^<br /></ul>Oraz ostatecznie:<br /><br /><ul>In file included from STEPMOTOR/wtmotorstep.c:9:0:<br />STEPMOTOR/wtmotorstep.h:33:11: note: previous definition of 'dir' was here<br /> enum edir dir ; <br /></ul><br />Obawiam się ,że ja po prostu nie rozumiem do końca co jest deklaracją  a co definicją i w którym momencie jest rezerwowana pamięć dla typu enum. Niestety na stronie 84  temat został wprawdzie bardzo ładnie opisany ale akurat zagadnienie związane z definicja /deklaracja dla enum nie zostało rozwinięte.<br />Pozdrawiam<br />W<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 30 paź 2017, o 13:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2017-10-30T10:06:41+01:00</updated>
<published>2017-10-30T10:06:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198025#p198025</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198025#p198025"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198025#p198025"><![CDATA[
W blue booku na stronie 84 masz to opisane a w kodzie lekcja 15 PetitFS masz przykład jak to zrobić szukaj takiej zmiennej jak FRESULT i tam w pliku phh.h masz pokazane jak to zrobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 30 paź 2017, o 10:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-10-30T09:56:00+01:00</updated>
<published>2017-10-30T09:56:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198024#p198024</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198024#p198024"/>
<title type="html"><![CDATA[Re: Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198024#p198024"><![CDATA[
<div class="quotetitle">MisterWhite napisał(a):</div><div class="quotecontent"><br />Ponieważ dostęp do zmiennej dir będzie mi potrzebny w innych modułach programu wiec muszę tę zmienną ujawnić w pliku *.h. I tu zaczynają się schody.<br />Pomyślałem,że enum edir (lewo,prawo) jest właściwą deklaracja i umieściłem ją w *.h , jednak kompilator mówi ,że jest to pusta deklaracja (empty). Oprócz tego umieszczenie zmiennej dir w pliku *.h jest też traktowane jako błąd.<br /></div><br />Nie ma żadnych schodów <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> lepiej pokaż w kodzie jak ty to robisz - jakiś krótki przykład typu nazwa pliku i co gdzie umieszczasz i jak .... Bo na podstawie takiego opisu to można gdybać gdybać przypuszczać i gdybać <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=54">mirekk36</a> — 30 paź 2017, o 09:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2017-10-30T09:51:35+01:00</updated>
<published>2017-10-30T09:51:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198023#p198023</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198023#p198023"/>
<title type="html"><![CDATA[Deklaracja i definicja dla typu enum]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19493&amp;p=198023#p198023"><![CDATA[
Witam<br />W swoim projekcie chciałem wykorzystać kod z greenbooka do sterowania silnikiem krokowym, zapisując go jako moduł w dwóch plikach *.c i *.h. Problem zaczął się gdy doszedłem do zmiennej zapisanej jako typ enum. W oryginale deklarowany jest typ enum edir ( lewo, prawo) oraz za chwilę tworzona zmienna enum edir dir = lewo.<br />Ponieważ dostęp do zmiennej dir będzie mi potrzebny w innych modułach programu wiec muszę tę zmienną ujawnić w pliku *.h. I tu zaczynają się schody.<br />Pomyślałem,że enum edir (lewo,prawo) jest właściwą deklaracja i umieściłem ją w *.h , jednak kompilator mówi ,że jest to pusta deklaracja (empty). Oprócz tego umieszczenie  zmiennej dir w pliku *.h  jest też traktowane jako błąd. <br />Jak umieścić deklarację i definicją tego typu i należącej do niego zmiennej w plikach *.c i *.h, tak aby była zmienną globalną dla wszystkich modułów?<br />Będę bardzo zobowiązany z pomoc i wytłumaczenie zagadnienia , bo nieco się pogubiłem.<br />Pozdrawiam<br />W<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 30 paź 2017, o 09:51</p><hr />
]]></content>
</entry>
</feed>