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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-29T19:46:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=9904&amp;mode</id>
<entry>
<author><name><![CDATA[_lukasz]]></name></author>
<updated>2014-12-29T19:46:16+01:00</updated>
<published>2014-12-29T19:46:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111128#p111128</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111128#p111128"/>
<title type="html"><![CDATA[Re: Zmienna IPAddress wewnątrz struktury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111128#p111128"><![CDATA[
Chyba jest małe nieporozumienie. Bo raz zalecasz żeby używać struktury zamiast klasy, a potem odnosisz się do implementacji z Arduino Ethernet. Jeżeli autor będzie korzystał z tej biblioteki to nie ma możliwości zmiany. Natomiast jeżeli tworzy swoje rozwiązanie to może napisać swoją klasę, która w najprostszej postaci nie różni się niczym od struktury.<br />Obiekty nad strukturami mają tą przewagę, że pozwalają wystawić interfejs, który nie pozwala na przypadkowe niepożądane modyfikacje (nie rozumiem dlaczego tak Ci przeszkadzają prywatne atrybuty).<br />Obiekt też możesz serializować tak jak strukturę (chyba, że nie zrozumiałem problemu), a dodatkowo możesz dorzucić specjalizowane metody - wcale nie wymagające dziedziczenia. <br />Równie dobrze mógłbym zapytać dlaczego struktura a nie typedef dla czteroelementowej tablicy (w obiekcie da się uzyskać dostęp jak do tablicy, a w strukturze nie).<br /><br />mirekk36 - tylko, że pomieszałeś teraz dwa problemy. To co przedstawiłeś można rozważać pod kątem zajętości pamięci i wybrać rozwiązanie optymalne. Problem struktura/klasa nie daje się już tak prosto sprowadzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3553">_lukasz</a> — 29 gru 2014, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2014-12-29T10:22:41+01:00</updated>
<published>2014-12-29T10:22:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111005#p111005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111005#p111005"/>
<title type="html"><![CDATA[Re: Zmienna IPAddress wewnątrz struktury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111005#p111005"><![CDATA[
Ja też nie przepadam za &quot;czystym&quot; Arduino. Niemniej istnieje sporo peryferiów, które nie mają bibliotek np. pod AVR-y, ale bez problemu można znaleźć dla nich kod pod Arduino. Tak właśnie wyglądała sytuacja w moim przypadku. Jakiś czas temu skleciłem sobie płytkę z Atmegą644 i układem Wiznet W5100 (ten sam, który stosuje się w popularnych Ethernet Shieldach) i powoli zabrałem się za pisanie biblioteki, w oparciu o przykłady z Internetu. Po drodze jednak zajrzałem do kodu biblioteki Arduino Ethernet. Okazało się, że jest tam już praktycznie gotowy cały sterownik (trzeba było tylko pozbyć się nawiązań do wiring i pozmieniać kilka niskopoziomowych funkcji) oraz obsługa socketów. Po przeportowaniu tej części przyjrzałem się najwyższej warstwie (klasy takie jak Ethernet, EthernetServer, EthernetClient i EthernetUDP) stwierdzając, że usunięcie nawiązań do Arduino nie powinno być zbyt trudne, a dzięki nim zyskałem np. możliwość automatycznego przydzielania socketu, nie musiałem też od nowa implementować obsługi DNS albo DHCP.<br />Postanowiłem nie pozbywać się funkcjonalności tej biblioteki, stąd np. zostawiłem IPAddress i nie przerabiałem kodu pod obsługę zwykłych, czteroelementowych tablic z adresami IP. Na razie wszystko działa, chociaż przerobiona biblioteka znajduje się w fazie testów.<br /><br />Jednak w porządku - w strukturze w pamięci flash/EEPROM będę trzymał zwykłe tablice, później inicjując nimi obiekty klasy IPAddress.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 29 gru 2014, o 10:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-12-29T09:22:53+01:00</updated>
<published>2014-12-29T09:22:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111001#p111001</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111001#p111001"/>
<title type="html"><![CDATA[Re: Zmienna IPAddress wewnątrz struktury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=111001#p111001"><![CDATA[
to mniej więcej tak samo jak do byle przykładu w arduino do pętli for ... ludziska dają typ int dla zmiennej iteracyjnej i nie ważne, że zmienia się ona w zakresie np 0-10 ..... No można oczywiście dać int, można nawet long int albo i long long int - tylko po co ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 gru 2014, o 09:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[_lukasz]]></name></author>
<updated>2014-12-29T08:30:09+01:00</updated>
<published>2014-12-29T08:30:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110996#p110996</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110996#p110996"/>
<title type="html"><![CDATA[Re: Zmienna IPAddress wewnątrz struktury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110996#p110996"><![CDATA[
mokrowski nie rozumiem dlaczego doradzasz użycie struktury zamiast klasy. Nie wiem jaki miałby być zysk korzystania w c++ ze struktury zamiast z klasy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3553">_lukasz</a> — 29 gru 2014, o 08:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-12-29T01:16:52+01:00</updated>
<published>2014-12-29T01:16:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110988#p110988</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110988#p110988"/>
<title type="html"><![CDATA[Re: Zmienna IPAddress wewnątrz struktury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110988#p110988"><![CDATA[
&quot;IPAddress&quot; jest zapewne klasą, której konstruktor wymaga podania kilku parametrów na wzór: <!-- m --><a class="postlink" href="http://arduino.cc/en/Reference/EthernetIPAddress" >http://arduino.cc/en/Reference/EthernetIPAddress</a><!-- m --><br /><br />Umieszczenie zawartości obiektu w pamięci FLASH/EEPROM wymaga tzw. procesu serializacji tzn. &quot;rozbiciu&quot; poszczególnych składowych obiektu, aby możliwe było późniejsze ich zapisanie. Najlepiej w tym celu dodać metodę do klasy &quot;IPAddress&quot; dokonującą takowego zapisu/odczytu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 29 gru 2014, o 01:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2014-12-29T00:37:43+01:00</updated>
<published>2014-12-29T00:37:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110982#p110982</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110982#p110982"/>
<title type="html"><![CDATA[Zmienna IPAddress wewnątrz struktury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9904&amp;p=110982#p110982"><![CDATA[
Projekt o którym mowa co prawda nie jest pisany w Arduino, ale pod zwykłe AVR-y w C++ (próba przesiadki ze zwykłego C).<br />Na jego potrzeby pożyczyłem jednak trochę plików źródłowych z Arduino - głównie bibliotekę Arduino Ethernet, którą udało mi się pozbawić nawiązań do &quot;jądra&quot; Arduino.<br /><br />Mam teraz jednak pewien dylemat. Chciałem sobie utworzyć typ strukturalny, w którym byłyby zapisane wszystkie dane konfiguracyjne powstającego systemu. Potem utworzyłbym trzy zmienne tego typu: w pamięci RAM, EEPROM, oraz FLASH (ok, ta ostatnia to raczej stała). Takie podejście umożliwia wygodne zarządzanie ustawieniami - z kopii umieszczonej w RAM-ie korzystamy podczas normalnej pracy, w EEPROM-ie znajduje się bieżąca konfiguracja wczytywana przy starcie, natomiast FLASH przechowuje wartości domyślne, które można w razie czego przywrócić.<br /><br />W C wszystko było jasne. Tworzyłem sobie typ strukturalny, np.:<br /><br />[syntax=c]typedef struct {<br />uint8_t mymac&#91;6&#93;;<br />uint8_t myip&#91;4&#93;;<br />uint8_t ipmask&#91;4&#93;;<br />uint8_t gwip&#91;4&#93;;<br />uint8_t dnsip&#91;4&#93;;<br />} cfg_t[/syntax]<br /><br />A potem inicjowałem kolejne zmienne:<br /><br />[syntax=c]fg_t cfg;<br /><br />cfg_t eeprom_cfg EEMEM;<br /><br />const cfg_t pgm_cfg PROGMEM ={<br />//mymac<br />{0x00, 0xC1, 0x21, 0x3B, 0x72, 0x21}, <br />//myip<br />{192, 168, 1, 89},<br />//ipmask<br />{255, 255, 255, 0},<br />//gwip<br />{192, 168, 1, 1},<br />//dnsip<br />{8, 8, 8, 8}<br />};[/syntax]<br /><br />Dla PROGMEM musiałem oczywiście podać wartości.<br /><br />Teraz próbuję to samo zrobić pod C++, korzystając z arduinowego typu zmiennej IPAddress:<br /><br />[syntax=c]typedef struct {<br />uint8_t mymac&#91;6&#93;;<br />IPAddress myip;<br />IPAddress ipmask;<br />IPAddress gwip;<br />IPAddress dnsip;<br />} cfg_t[/syntax]<br /><br />Niestety próba podania wartości w klamrach, jak powyżej skutkuje warningiem:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">extended initializer lists only available with -std=c++11 or -std=gnu++11 &#91;enabled by default&#93;</div><br /><br />Ktoś może mi powiedzieć co jest tego powodem i jak prawidłowo umieścić wartości we flashu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 29 gru 2014, o 00:37</p><hr />
]]></content>
</entry>
</feed>