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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-09-02T21:29:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4051&amp;mode</id>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-09-02T21:29:01+01:00</updated>
<published>2013-09-02T21:29:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47938#p47938</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47938#p47938"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47938#p47938"><![CDATA[
Użytkownik będzie musiał znać/ustawić oprócz stałej dosłownej  NUMBER_OF_KEYS w keys.h również znać typ zmiennej stablicowanej w buforze timerów. Jakąś informację będzie musiał dostać. Broń boże nie krytykuję rozwiązania tylko dzielę się spostrzeżeniem. Łatwiej jest pokazać userowi zmienne i funkcje typu extern w pliku nagłówkowym niż opisywać (pytanie gdzie), że ma wolność nazywania jakiejś tablicy ale elementów o określonym typie i jeszcze okupionym kosztem pamięci. Na pewno zadziała ale dla mnie jako usera byłoby to niewygodne w użyciu. Rozumiem strategię i potrzebę hermetyzacji bibliotek, ale coś na zewnątrz trzeba zawsze wystawić. Pytanie w jakiej formie, żeby było to wygodne. Twoje rozwiązanie unika wystawiania jakiegoś pola wzamian oferując metodę która ustawia zmienną wewnętrzną. Może wobec tego zastosować taki mechanizm:<br />main.c<br />[syntax=c]set_key_timer(0,100);<br />set_key_timer(1,200);<br />itd.[/syntax]<br />keys.c<br />[syntax=c]set_key_timer( numer_timera, wartość_timera )<br />{<br />key&#91;numer_timera&#93;.delay_timer = wartosc_timera;<br />}[/syntax]<br /><br />oczywiście do kompletu funkcja get_key_timer() <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=382">perlon</a> — 2 wrz 2013, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-09-02T20:12:59+01:00</updated>
<published>2013-09-02T20:12:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47930#p47930</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47930#p47930"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47930#p47930"><![CDATA[
A nie lepiej tak?<br />[syntax=c]typedef struct<br />    {<br />            uint8_t pin_mask;<br />            uint8_t state;//actual key status<br />            void (*key_action_callback)(void);//pointer<br />            void (*key_rep_action_callback)(void);//pointer<br />    }TKEY;<br />TKEY key&#91;NUMBER_OF_KEYS&#93;;<br />uint8_t key_timers&#91;NUMBER_OF_KEYS&#93;;    // i w keys.h zrobić extern na key_timers i oszczędzasz NUMBER_OF_KEYS*rozmiar zmiennej wskaźnikowej  bajtów pamięci[/syntax]<br /><br />w main.c ustawić tablicę jak pisałeś a w dalszej części biblioteki zamiast odwoływać się przez adres zapisany w strukturze to bezpośrednio do timera przez indeks tablicy. Jaki zysk jest w przechowywaniu dodatkowo wskaźnika w strukturze?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 2 wrz 2013, o 20:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-09-02T19:23:08+01:00</updated>
<published>2013-09-02T19:23:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47925#p47925</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47925#p47925"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47925#p47925"><![CDATA[
Jeżeli tak to OK. Tylko jak osobne timery to jak to zgrabnie zrobić w inicie. Tablica timerów brzmi rozsądnie, tylko moduł główny musi wiedzieć ile jest elementów tablicy key żeby po nich pozamiatać przy inicjalizacji.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Tylko czy wtedy nie lepiej zdefiniować taką tablicę timerów w keys.c i jako extern a wywalić ze struktury niepotrzebne wskazanie na delay_timer? Zamiast odwoływać się do pola struktury to do elementu tablicy deklarowanej w keys.c i inicjowanej w module głównym.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />No chyba że liczba różnych timerów jest inna niż rozmiar tablicy key. To wtedy nie będzie 1 do 1 w celach oszczędności pamięci.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 2 wrz 2013, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-09-02T18:31:02+01:00</updated>
<published>2013-09-02T18:31:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47921#p47921</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47921#p47921"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47921#p47921"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />siedzi sobie na zewnątrz zmienna timer - wystawiona do konfiguracji, a przy inicjalizacji programu wpisujesz do wskaźnika jej adres no i masz<br /></div><br />Ja również nie za bardzo kumam.<br />Jest zdefiniowana tablica key zawierająca elementy typu TKEY czyli każdy element tej tablicy to struktura zawierająca między innymi pole delay_timer a to znaczy że różnych wartości  delay_timer może być tyle ile jest elementów tablicy key. Żeby zamienić delay_timer na wskaźnik należałoby zdefiniować tablicę takich timerów o rozmiarze zgodnym z rozmiarem tablicy key i do każdego wskaźnika wewnątrz struktury przypisywać wskazanie na kolejne elementy tablicy zdefiniowanej w module głównym. Jeżeli natomiast każda ze struktur miałaby przechowywać wskaźnik do zmiennej zdefiniowanej w module główny ( jednej zmiennej nie tablicy) to znaczy że to pole nie jest potrzebne w strukturze bo każdy element tej tablicy przechowuje ten sam adres.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 2 wrz 2013, o 18:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-09-02T17:55:46+01:00</updated>
<published>2013-09-02T17:55:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47916#p47916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47916#p47916"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47916#p47916"><![CDATA[
siedzi sobie na zewnątrz zmienna timer - wystawiona do konfiguracji, a przy inicjalizacji programu wpisujesz do wskaźnika jej adres no i masz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 wrz 2013, o 17:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-09-02T17:52:43+01:00</updated>
<published>2013-09-02T17:52:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47913#p47913</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47913#p47913"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47913#p47913"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />To zmień to pole na wskaźnik.<br /></div><br /><br />Dokładnie czyli potraktuj tak samo jak callbacki swoje <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> — 2 wrz 2013, o 17:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-09-02T17:29:39+01:00</updated>
<published>2013-09-02T17:29:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47907#p47907</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47907#p47907"/>
<title type="html"><![CDATA[Re: Wystawienie jednego pola struktury poza moduł.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4051&amp;p=47907#p47907"><![CDATA[
To zmień to pole na wskaźnik.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 2 wrz 2013, o 17:29</p><hr />
]]></content>
</entry>
</feed>