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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-05-06T14:46:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=20689&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-05-06T14:46:10+01:00</updated>
<published>2018-05-06T14:46:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207458#p207458</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207458#p207458"/>
<title type="html"><![CDATA[Re: &quot;Ginąca&quot; wartość w tablicy struktur]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207458#p207458"><![CDATA[
<div class="quotetitle">wachcio napisał(a):</div><div class="quotecontent"><br />Mirek ale zgodnie z tym co pisałem w pierwszym poście strukturę mam zadeklarowaną w pliku komunikaty.h. W ostatnim poście to kawałek main.c<br /></div><br />A ja napisałem, że strasznie mieszasz i warto to uporządkować jak się należy wg tego co masz np w Bluebooku. <br /><br />Ale może kolega andrews lepiej to uzmysłowi tobie - bo to TO dokładnie chodzi<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Jeśli w jakimś pliku *.c będziesz używał pętli do obsługi tablicy struktur,<br /></div><br />a jeśli to jakieś wielkie struktury to warto w ogóle dać im nowe życie logiczne w nowym pliku jeśli chodzi o ich definicje czyli np w <br /><br />komunkaty.c<br /><br />zaś ich deklaracje w <br /><br />komunikat.h<br /><br />i później TAK JAK MÓWIŁEM wcześniej inkludować sobie wszędzie te: komunikaty.h - no w czym problem ? To się załatwia w 5 SEKUND <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> — 6 maja 2018, o 14:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-06T14:22:57+01:00</updated>
<published>2018-05-06T14:22:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207455#p207455</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207455#p207455"/>
<title type="html"><![CDATA[Re: &quot;Ginąca&quot; wartość w tablicy struktur]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207455#p207455"><![CDATA[
<div class="quotetitle">wachcio napisał(a):</div><div class="quotecontent"><br />Chodziło mi o to, że DL_TAB mogę użyć do określenia wielkości tablicy struktur ale aby korzystać z wyliczeń w innych plikach (np. z pętli for) zdefiniowałem nową zmienną dl_tab która ma jednakową wartość co DL_TAB<br /></div><br /><br />Nie musisz definiować żadnej zmiennej. Fragment:[syntax=c]#define LICZBA_SEKCJI    4<br />#define LICZBA_WLACZEN   4<br /> <br />#define DL_TAB ((LICZBA_WLACZEN)*(LICZBA_SEKCJI))[/syntax] nie umieszczaj w pliku &quot;main.c&quot; tylko w pliku &quot;komunikaty.h&quot;. DL_TAB będzie wtedy dostępne w każdym pliku <strong><em>*.c</em></strong>, w którym dołączysz ten plik dyrektywą <strong><em>include</em></strong>:<br /><strong><em>#include &quot;komunikaty.h&quot;</em></strong><br /><br />Jeśli w jakimś pliku <strong><em>*.c</em></strong> będziesz używał pętli do obsługi tablicy struktur, to przecież i tak musisz dołączyć do niego plik nagłówkowy &quot;komunikaty.h&quot;, ponieważ zawiera on definicję struktury.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 6 maja 2018, o 14:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-05-06T12:18:19+01:00</updated>
<published>2018-05-06T12:18:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207448#p207448</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207448#p207448"/>
<title type="html"><![CDATA[Re: &quot;Ginąca&quot; wartość w tablicy struktur]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207448#p207448"><![CDATA[
no panie kolego panie kolego ... podstawy się jednak kłaniają <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> - to ty chcesz DEFINICJE zmiennych w plikach nagłówkowych *.h dawać ?<br /><br />DEFINICJE dajesz do jakiegoś pliku *.c<br />ich DEKLARACJE do pliku *.h<br /><br />i ten plik *.h inkludujesz tam ... czyli w tych plikach *.c w których masz korzystać z tychże zmiennych<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Masz Bluebooka - wróć może do niego - do rozdziału gdzie pokazuję podział projektu na pliki z przykładami ... tam masz to jasno przedstawione. Bo cosik mi się wydaje, że pewnie zapomniałeś czym różni się DEKLARACJA od DEFINICJI zmiennej - a zawsze powtarzam, że wtedy są same problemy z myśleniem - &quot;co gdzie umieścić&quot; <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> — 6 maja 2018, o 12:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-06T09:46:09+01:00</updated>
<published>2018-05-06T09:46:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207445#p207445</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207445#p207445"/>
<title type="html"><![CDATA[Re: &quot;Ginąca&quot; wartość w tablicy struktur]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207445#p207445"><![CDATA[
Nie można definiować długości tablicy przy użyciu zmiennych. Użyj literałów:<br /><br />[syntax=c]#define LICZBA_SEKCJI    4;<br />#define LICZBA_WLACZEN   4;<br /><br />#define DL_TAB ((LICZBA_WLACZEN)*(LICZBA_SEKCJI))<br /> <br />TSEKCJA sekcja&#91;DL_TAB&#93;;<br />TSEKCJA esekcja&#91;DL_TAB&#93; EEMEM;  // Eeprom<br /><br />    for ( uint8_t i = 0; i &lt; DL_TAB; i++ ) {...}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 6 maja 2018, o 09:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-05-06T07:54:21+01:00</updated>
<published>2018-05-06T07:54:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207443#p207443</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207443#p207443"/>
<title type="html"><![CDATA[Re: &quot;Ginąca&quot; wartość w tablicy struktur]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20689&amp;p=207443#p207443"><![CDATA[
<div class="quotetitle">wachcio napisał(a):</div><div class="quotecontent"><br />[syntax=c]void sprawdz_sekcje( TSEKCJA  sekcja ) {<br /> <br />    if ( sekcja.g_wlaczenia == datetime.hh ) {<br /> <br /> <br /> <br />        if ( sekcja.m_wlaczenia == datetime.mm ) {<br /> <br />            if ( datetime.ss == 0 ) {<br />                sekcja.stan = 1;<br /> <br />                wlacz_sekcje( sekcja.nr_sekcji, -1 );<br /><br />                //... itd.<br />            }<br />            //... itd.<br />        }<br /> <br />        //... itd.<br />}[/syntax]<br /></div><br />Jeśli zrobisz w ten sposób, w momencie wywołania funkcji zostaje utworzona (na stosie) kopia struktury, którą przekazałeś jako argument <strong><em>'sekcja'</em></strong>. Wszystkie zmiany dokonywane wewnątrz funkcji wykonywane są na tej kopii, a nie bezpośrednio na przekazanej strukturze. Kiedy funkcja się zakończy dane zawarte w zmiennej lokalnej funkcji <strong><em>sprawdz_sekcje()</em></strong> (lub inaczej w argumencie) <strong><em>'sekcja'</em></strong> zostają utracone, a wartości pól struktury przekazanej do funkcji pozostają niezmienione.<br /><br />Jeśli chcesz, żeby funkcja zmieniała bezpośrednio pola struktury przekazanej jako argument, musisz zrobić to poprzez wskaźnik:<br /><br />[syntax=c]void sprawdz_sekcje( TSEKCJA * sekcja ) {<br />    // należy zwrócić uwagę, że zamiast kropki trzeba użyć operatora -&gt;<br />    if ( sekcja-&gt;g_wlaczenia == datetime.hh ) {<br />        <br />        if ( sekcja-&gt;m_wlaczenia == datetime.mm ) {<br /> <br />            if ( datetime.ss == 0 ) {<br />                sekcja-&gt;stan = 1;<br /> <br />                wlacz_sekcje( sekcja-&gt;nr_sekcji, -1 );<br /><br />                //... itd.<br />            }<br />            //... itd.<br />        }<br /> <br />        //... itd.<br />}<br /><br />// wywołanie funkcji powinno wtedy wyglądać tak<br />        sprawdz_sekcje( &amp;sekcja&#91;i&#93; );[/syntax]<br /><br /><div class="quotetitle">wachcio napisał(a):</div><div class="quotecontent"><br />[syntax=c]//<br />            if ( datetime.ss == 0 ) {<br />                sekcja.stan = 1;<br /> <br />                wlacz_sekcje( sekcja.nr_sekcji, -1 );<br /> <br />                //Sprawdzanie stanu rekordów w strukturze<br />                //...<br />                uart_putint( sekcja.stan, 10 );                  //ZGODZNIE Z OCZEKIWANIEM = 1<br />                //...<br /><br />            }<br /> <br />            if ( datetime.ss == 1 ) {<br />                //...<br />                uart_putint( sekcja.stan, 10 );                 //TUTAJ JUZ ZMIENNA MA -1 DLACZEGO?<br />                //...<br /> <br />            }[/syntax]<br /></div><br />Kiedy warunek <strong><em>( datetime.ss == 0 )</em></strong> jest spełniony zostają wykonane instrukcje wewnątrz bloku warunkowego, więc również m.in. <strong><em>sekcja.stan = 1;</em></strong><br />W związku z tym <strong><em>uart_putint( sekcja.stan, 10 );</em></strong> zwróci prawidłowy wynik.<br />Jednak po wykonaniu tego bloku instrukcji warunek <strong><em>( datetime.ss == 1 )</em></strong> nie jest jeszcze spełniony.<br />Funkcja kończy swoje działanie i dane zmiennej lokalnej <strong><em>sekcja</em></strong> zostają utracone.<br />Warunek ten będzie spełniony dopiero przy kolejnym obiegu pętli głównej i kolejnym wywołaniu funkcji <strong><em>sprawdz_sekcje()</em></strong>.<br />Wtedy jednak zmienna lokalna <strong><em>sekcja</em></strong> ponownie zostanie zainicjowana danymi zmiennej globalnej z tablicy struktur <strong><em>sekcja[i]</em></strong>, która przecież w poprzednim wywołaniu funkcji nie została zmieniona, więc nadal będzie wynosiła -1.<br /><br />Reasumując, jeśli zrobisz to tak jak pokazałem (poprzez wskaźnik), powinno być OK, choć nie analizowałem kodu szczegółowo, więc nie mogę wykluczyć innych błędów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 6 maja 2018, o 07:54</p><hr />
]]></content>
</entry>
</feed>