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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-27T22:50:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17747&amp;mode</id>
<entry>
<author><name><![CDATA[Jarecki]]></name></author>
<updated>2017-02-27T22:50:21+01:00</updated>
<published>2017-02-27T22:50:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183732#p183732</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183732#p183732"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183732#p183732"><![CDATA[
Teraz się wszystko wyjaśniło, bardzo dziękuję Panie Mirku <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> błędnie szukałem odpowiedzi na moje pytanie w plikach nagłówkowych pgmspace.h<br />Teraz mogę spokojnie czytać dalej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Pozdrawiam <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=2511">Jarecki</a> — 27 lut 2017, o 22:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-02-27T22:26:38+01:00</updated>
<published>2017-02-27T22:26:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183729#p183729</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183729#p183729"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183729#p183729"><![CDATA[
<div class="quotetitle">Jarecki napisał(a):</div><div class="quotecontent"><br />Wydaje mi się, że pgm_read_byte(str++) jako argument spodziewa się wskaźnika na uint16_t a dostaje na uint8_t, zgadza się?<br /></div><br />pgm_read_byte() nie spodziewa się ŻADNEGO wskaźnika uint16_t, tu kolega coś bardzo mocno myli tzn nie rozumie do końca co oznaczają TYPY wskaźników a czym są same wskaźniki (bo rzeczywiście wskaźnik jest zawsze adresem 16-bitowym, co nie ma NIC wspólnego z samym typem wskaźnika)<br /><br />pgm_read_byte() zwraca wartość short int, a jako argumentu oczekuje wskaźnika do pamięci FLASH<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br /><div class="quotetitle">Jarecki napisał(a):</div><div class="quotecontent"><br />nie jasne jest dla mnie to rzutowanie w funkcji eeprom_read_byte....<br />Może nie rozumiem dlatego, że nie ma jasno napisanego czego spodziewają się te funkcje. Zresztą to:<br /></div><br />No to powiedz mi jak to można sprawdzić - jeśli nie wiesz czego się spodziewa taka funkcja czy inna?<br /><br />no co za problem spróbować skompilować tę linię BEZ jawnego rzutowania ? - jeśli wywali ci warninga to zaraz się zorientujesz - no a po drugie - pomyśl - WYSTARCZY w googla wpisać nazwę tej funkcji<br /><br />eeprom_read_byte<br /><br />nie piszę tego żeby odsyłać cię do googla z problemem - tylko żebyś zrozumiał - że WARTO zaglądać do DOKUMENTACJI AVR GCC w takich wypadkach zamiast się dręczyć i zastanawiać czego się spodziewa taka funkcja - skoro gdy zajrzysz do dokumentacji no to masz jak byk napisane <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />a pierwszy link w googlu od razu wskaże ci na opis tych komend bo one są akurat specyficzne TYLKO dla AVR GCC a nie innych odmian GDD<br /><br />no więc weź zajrzyj do pierwszego linka<br /><br /><!-- m --><a class="postlink" href="http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html" >http://www.nongnu.org/avr-libc/user-man ... eprom.html</a><!-- m --><br /><br />i powiedz mi - po co tyle się zastanawiać skoro masz to podane WPROST <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i to w jednej z pierwszych linijek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lut 2017, o 22:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarecki]]></name></author>
<updated>2017-02-27T22:10:16+01:00</updated>
<published>2017-02-27T22:10:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183728#p183728</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183728#p183728"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183728#p183728"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />a zaglądałeś do ŚRODKA tych funkcji ? znowu wydaje mi się, że nie - jeśli zaś tak to powiedz mi czego nie rozumiesz ze środka takiej funkcji zamiast myśleć co sugeruje pgm_read_byte .... w środku masz tak:<br /><br />[syntax=c]void lcd_str_P(const char * str)<br />{<br />register char znak;<br />while ( (znak=pgm_read_byte(str++)) ) lcd_char( znak );<br />}[/syntax]<br /><br />zmienna znak jest typu char, zapisywana jest do niej zmienna typu uint8_t - w czym widzisz problem?<br /></div><br /><br />Wydaje mi się, że pgm_read_byte(str++) jako argument spodziewa się wskaźnika na uint16_t a dostaje na uint8_t, zgadza się? Pewnie kompilator zrobi niejawne rzutowanie ale pytam bo chciałbym wiedzieć na 100% jak jest <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Bardzo dziękuję za odpowiedź Panie Mirku, na bloga zaglądam często ale gdzieś mi to umknęło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Mam kody z jeszcze cieplutkich pedrive-ów, i w tych fragmentach:<br /><br />[syntax=c]void lcd_str_P(const char * str)<br />{<br />register char znak;<br />while ( (znak=pgm_read_byte(str++)) ) lcd_char( znak );[/syntax] <br /><br />[syntax=c]void lcd_str_E(char * str)<br />{<br />register char znak;<br />while(1)<br />{<br />znak=eeprom_read_byte( (uint8_t *)(str++) );[/syntax]<br /> <br />nie jasne jest dla mnie to rzutowanie w funkcji <strong>eeprom_read_byte</strong>....<br />Może nie rozumiem dlatego, że nie ma jasno napisanego czego spodziewają się te funkcje. Zresztą to:<br /><br />[syntax=c]#define pgm_read_byte(address_short)    pgm_read_byte_near(address_short)[/syntax]<br /><br />Wygląda jak makro a nie funkcja <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=2511">Jarecki</a> — 27 lut 2017, o 22:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-02-27T21:45:41+01:00</updated>
<published>2017-02-27T21:45:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183723#p183723</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183723#p183723"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183723#p183723"><![CDATA[
<div class="quotetitle">Jarecki napisał(a):</div><div class="quotecontent"><br />na str. 230 i 231 (nowe wydanie w twardej oprawie) są omówione funkcje:<br /></div><br />czy kolega zagląda do kodów na dołączonym nośniku do książki ? DVD albo Pendrive ? wydaje mi się, że nie za bardzo ... w najnowszej wersji książki musiałem bowiem przeportować kod ze staruszka WinAVR na nowy Atmel Toolchain - jest sporo zmian - szczególnie związanych z dostępem do danych pamięci FLASH - i opisałem to nawet na blogu - na którego kolega też chyba nie zagląda <br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/08/eclipse-kopot-z-pstr-przeczytaj.html" >http://mirekk36.blogspot.com/2012/08/ec ... zytaj.html</a><!-- m --><br /><br />dlatego bardzo uprzejmie proszę:<br /><br />1. zajrzyj do tego artykułu na blogu<br />2. ale przede wszystkim zajrzyj do kodu na nośniku dołączonym do KSIĄŻKI bo tam MUSI to działać bez warningów - tymczasem ten zapis<br /><br />[syntax=c]void lcd_str_P(char * str)[/syntax]<br /><br />tzn wywołanie tej funkcji z podaniem wskaźnika do pamięci Flash gdzie jest tekst do wyświetlenia od razu dałoby ci warninga - zrób że próbę, sprawdź to sobie na żywym organiźmie czyli na procku i LCD - przecież to NAJLEPSZA szkoła<br /><br />a później jak zajrzysz do kodu na nośniku dołączonym do książki to zobaczysz, że nagłówek tej funkcji wygląda tak<br /><br />[syntax=c]void lcd_str_P(const char * str)[/syntax]<br /><br />czyli masz widoczną różnicę ... <br /><br />zaś co się tyczy pytania:<br /><br /><div class="quotetitle">Jarecki napisał(a):</div><div class="quotecontent"><br />Nazwy funkcji pgm_read_byte oraz eeprom_read_bytre sugerują że i tu i tu odczytujemy byte<br /></div><br />a zaglądałeś do ŚRODKA tych funkcji ? znowu wydaje mi się, że nie - jeśli zaś tak to powiedz mi czego nie rozumiesz ze środka takiej funkcji zamiast myśleć co sugeruje pgm_read_byte .... w środku masz tak:<br /><br />[syntax=c]void lcd_str_P(const char * str)<br />{<br />register char znak;<br />while ( (znak=pgm_read_byte(str++)) ) lcd_char( znak );<br />}[/syntax]<br /><br />zmienna znak jest typu char, zapisywana jest do niej zmienna typu uint8_t - w czym widzisz problem? Jedna i druga jest jednobajtowa, jedna i druga mówi i liczbie bez znaku - więc w takim przypadku kompilator nie będzie ci krzyczał warningiem ponieważ może to załatwić niejawnym rzutowaniem i już.<br /><br />Oczywiście jeśli ty zrobisz również to rzutowanie to kompilator wcale się nie obrazi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Podsumowując - w książce WYJAŚNIAM jak działa ogólnie mechanizm - zaś w kodach pokazuję już jak to wygląda w szczegółach i tak żeby działało bez warningów<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lut 2017, o 21:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarecki]]></name></author>
<updated>2017-02-27T20:27:09+01:00</updated>
<published>2017-02-27T20:27:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183712#p183712</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183712#p183712"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183712#p183712"><![CDATA[
tyle że w definicji:<br />[syntax=c]pgm_read_byte( address_short    )[/syntax]<br /><br />address_short jest typu uint16_t więc nie powinno być rzutowania?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2511">Jarecki</a> — 27 lut 2017, o 20:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-02-27T19:59:03+01:00</updated>
<published>2017-02-27T19:59:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183709#p183709</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183709#p183709"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183709#p183709"><![CDATA[
Tak z dedukcji <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br />Bo w przypadku EEPROM jest jak byk, że wskaźnik, a w FLASH napisali tylko address, więc skoro nie wartość, nie wskaźnik to pozostaje referencja<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 27 lut 2017, o 19:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarecki]]></name></author>
<updated>2017-02-27T19:45:38+01:00</updated>
<published>2017-02-27T19:45:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183708#p183708</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183708#p183708"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183708#p183708"><![CDATA[
<div class="quotetitle">michaeleagle napisał(a):</div><div class="quotecontent"><br />Zatem w obu przypadkach(pgm i eeprom) przekazujemy do funkcji adres bajtu, z tym ,że  do EEPROM przez wskaźnik a do FLASH przez referencję.<br /></div><br /><br />A gdzie jest informacja że przez referencje? <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=2511">Jarecki</a> — 27 lut 2017, o 19:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-02-27T19:38:16+01:00</updated>
<published>2017-02-27T19:38:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183706#p183706</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183706#p183706"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183706#p183706"><![CDATA[
Powiem jak mi się wydaje.<br />Makro powinno wyglądać tak(źle wkleiłem poprzednio)<br />[syntax=c]#define pgm_read_byte(address_short)   pgm_read_byte_near(address_short)[/syntax]<br />Makro ..._near odwołuje się do funkcji _LPM(ang. Load Program Memory) <br />[syntax=c]#define pgm_read_byte_near(address_short)   __LPM((uint16_t)(address_short))[/syntax]<br /><br />Zatem w obu przypadkach(pgm i eeprom) przekazujemy do funkcji adres bajtu, z tym ,że  do EEPROM przez wskaźnik a do FLASH przez referencję.<br />Może się mylę to niech ktoś mnie poprawi <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Jesteśmy przecież tu po to żeby się uczyć<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 27 lut 2017, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarecki]]></name></author>
<updated>2017-02-27T19:12:45+01:00</updated>
<published>2017-02-27T19:12:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183700#p183700</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183700#p183700"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183700#p183700"><![CDATA[
<div class="quotetitle">michaeleagle napisał(a):</div><div class="quotecontent"><br />[syntax=c]#define pgm_read_byte( address_short)[/syntax]<br /><br />[syntax=c]uint8_t eeprom_read_byte( const uint8_t * __p)[/syntax]<br /></div><br /><br />Jakoś nie do końca są dla mnie jasne parametry tych funkcji <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=2511">Jarecki</a> — 27 lut 2017, o 19:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-02-27T19:09:43+01:00</updated>
<published>2017-02-27T19:09:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183698#p183698</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183698#p183698"/>
<title type="html"><![CDATA[Re: BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183698#p183698"><![CDATA[
W kwestii działania, to nie zmienia to niczego.Nie musisz wcale dokonywać rzutowania żeby działało.<br />A dlaczego tak Mirek napisał to pewności nie mam, ale na stronie<br /><!-- m --><a class="postlink" href="http://www.nongnu.org/avr-libc/user-manual" >http://www.nongnu.org/avr-libc/user-manual</a><!-- m --><br />są opisy obu funkcji(makr) pgm_read_byte i eeprom_read_byte i zgodnie co napisali to budowa ich jest następująca:<br /><br />[syntax=c]#define pgm_read_byte( address_short)[/syntax]<br /><br />[syntax=c]uint8_t eeprom_read_byte( const uint8_t * __p)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 27 lut 2017, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarecki]]></name></author>
<updated>2017-02-27T18:55:24+01:00</updated>
<published>2017-02-27T18:55:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183696#p183696</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183696#p183696"/>
<title type="html"><![CDATA[BB pytanie o bibliotekę do LCD]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17747&amp;p=183696#p183696"><![CDATA[
Witam,<br />przeglądam funkcje do obsługi LCD w BB i nie mogę znaleźć odpowiedzi na następujące pytanie.<br /><br />na str. 230 i 231 (nowe wydanie w twardej oprawie) są omówione funkcje:<br /><br />a) <strong>void lcd_str_P(char * str)</strong><br />b) <strong>void lcd_str_E(char * str)</strong><br /><br />wewnątrz funkcji z podpunktu &quot;a&quot; mamy odczyt z FLASH -&gt;<strong> pgm_read_byte( str++)</strong><br />wewnątrz funkcji z podpunktu &quot;b&quot; mamy odczyt z EEPROM -&gt;<strong> eeprom_read_bytre( (uint8_t *)str++)</strong><br /><br />Nazwy funkcji <em><strong>pgm_read_byte</strong></em> oraz <em><strong>eeprom_read_bytre</strong></em> sugerują że i tu i tu odczytujemy byte dlatego nie rozumiem, dlaczego w funkcji z podpunktu &quot;b&quot; jest zrobione rzutowanie na wskaźnik na <strong>uint8_t</strong> a w funkcji z podpunktu &quot;a&quot; go nie ma?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2511">Jarecki</a> — 27 lut 2017, o 18:55</p><hr />
]]></content>
</entry>
</feed>