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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-07-17T14:53:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=15791&amp;mode</id>
<entry>
<author><name><![CDATA[Mac]]></name></author>
<updated>2016-07-17T14:53:34+01:00</updated>
<published>2016-07-17T14:53:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164153#p164153</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164153#p164153"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164153#p164153"><![CDATA[
Dziekuje w końcu &quot;zatrybiłem&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=3917">Mac</a> — 17 lip 2016, o 14:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-17T05:43:11+01:00</updated>
<published>2016-07-17T05:43:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164132#p164132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164132#p164132"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164132#p164132"><![CDATA[
<div class="quotetitle">Mac napisał(a):</div><div class="quotecontent"><br />definiujemy wskaźnik i jego typ dokładnie taki jaką ma zmienna w strukturze<br /></div><br />Niekoniecznie taki jak jest w strukturze - już mówiłem może być to wskaźnik jaki ci się żywnie podoba - i pisałem też że dobierasz go wg potrzeb ... w tym przykładzie który podałem może to być równie dobrze uint8_t albo uint16_t gdyby akurat taki był potrzebny z jakichś względów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 17 lip 2016, o 05:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mac]]></name></author>
<updated>2016-07-16T22:37:33+01:00</updated>
<published>2016-07-16T22:37:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164130#p164130</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164130#p164130"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164130#p164130"><![CDATA[
hmm... tytuł wziął sie nijako po obejrzeniu poradnika &quot;AVR EEPROM struktury&quot;  gdzie jest mowa o umieszczaniu struktur również w pamięci flash.<br /><br />jak coś to zmienie bo może faktycznie byc mylący<br /><br />Czyli rozumiem to tak <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" />:<br /><br />definiujemy  wskaźnik i jego typ dokładnie taki jaką ma zmienna w strukturze, nastepnie musimy zastosować jawne rzutowanie przed nazwą struktury aby niebyło konfliktu typów , bo &amp; przed nazwą  struktury odnosi się do 1 zmiennej nowego typu czyli TPRZYKLAD  a a nie do typu pod jakim zoststał zdefiniowany wskaźnik.<br /><br />czyli chcąc zdefiniować wskaźnik do zmiennnej &quot;x&quot; w strukturze musimy zrobić to tak:<br /><br />[syntax=c]uint8_t  *wsk1 = (uint8_t*) &amp; zmienna_flash.x;[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 28 minutach ]</span></strong><br /><br />Jacek dzieki za alternatywe ten sposób jest jakis taki bardziej czytelny - wiadomo co do czego się przypisuje , ale z kolei sposób P. MIrka  jest szybki ( mniej pisania) jak sie zna reguły to łatwo sie korzysta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3917">Mac</a> — 16 lip 2016, o 22:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-07-16T16:29:15+01:00</updated>
<published>2016-07-16T16:29:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164118#p164118</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164118#p164118"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164118#p164118"><![CDATA[
Ja jeszcze wspomnę o innym zapisie inicjowania zmiennych strukturalnych we flashu.<br />A mianowicie można to zrobić np. tak:<br />[syntax=c]typedef struct {<br />uint8_t x;<br />char tab&#91;3&#93;;<br />}TPRZYKLAD;<br /><br />TPRZYKLAD const zmienna_flash PROGMEM = {<br />.x=20,<br />.tab&#91;0&#93;='a',<br />.tab&#91;1&#93;='b',<br />.tab&#91;2&#93;='c'<br />};[/syntax]<br /><br />Szczególnie ten sposób przydaje się jeśli jedną strukturę umieścimy wewnątrz innej struktury<br />[syntax=c]typedef struct {<br />uint8_t x;<br />char tab&#91;3&#93;;<br />}TPRZYKLAD;<br /><br />typedef struct{<br />TPRZYKLAD zmienna1;<br />TPRZYKLAD zmienna2;<br />}TPRZYKLAD2;[/syntax]<br /><br />Wtedy inicjalizacja będzie wyglądać tak<br />[syntax=c]TPRZYKLAD2 const zmienna_flash PROGMEM = {<br />.zmienna1.x=20,<br />.zmienna1.tab&#91;0&#93;='a',<br />.zmienna1.tab&#91;1&#93;='b',<br />.zmienna1.tab&#91;2&#93;='c',<br /><br />.zmienna2.x=10,<br />.zmienna2.tab&#91;0&#93;='d',<br />.zmienna2.tab&#91;1&#93;='e',<br />.zmienna2.tab&#91;2&#93;='f'<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 16 lip 2016, o 16:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-16T12:57:22+01:00</updated>
<published>2016-07-16T12:57:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164104#p164104</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164104#p164104"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164104#p164104"><![CDATA[
<div class="quotetitle">Mac napisał(a):</div><div class="quotecontent"><br />rozumiem że kolejność inicjalizacji jest ważna<br /></div><br />No jak to kolejność miałaby być nie ważna ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no chyba sam nie wierzysz w to co piszesz - nawet nie ma co odpowiadać na to pytanie bo odpowiedź jest oczywista<br /><br /><div class="quotetitle">Mac napisał(a):</div><div class="quotecontent"><br />tzn. jak wyglądałby wskaźnik do jakiejś zmiennej zawartej w strukturze we FLASH<br />czy tak?<br /></div><br />Jak pytasz o wskaźnik to najpierw zastanów się DOBRZE o jakiego typu tobie wskaźnik chodzi i do czego będzie potrzebny. Bo gdy ktoś tak zadaje w ten sposób pytanie to już czuję przez skórę, że kompletnie ta osoba nie rozumie do czego są typy wskaźników i co one oznaczają ... Widać to zresztą po twoim przykładowym kodzie ...<br /><br />więc podpowiem ci określając to o co nie zapytałeś na początek:<br /><br />1. załóżmy że potrzebuję wskaźnik typu char* na przykład do elementów tablicy w strukturze, po to aby później tym wskaźnikiem móc poruszać się po tych elementach tablicy bez korzystania ze struktury. Wtedy nie mogę tego napisać tak:<br /><br />[syntax=c]char * wsk = &amp;zmienna_flash.tab&#91;0&#93;;[/syntax]<br /><br />dlatego że kompilator od razu dostanie czkawki i rypnie warnigiem, o niezgodności typów wskaźnikowych i ma rację bo znak pobierania adresu postawiony jest przecież przed nazwą struktury a ona jest nazwą wskazującą będącą wskaźnikiem na pierwszy element ale typu TPRZYKŁAD a nie char, więc trzeba wyjaśnić grzecznie kompilatorowi żeby nie bredził, że my wiemy co chcemy zrobić i żeby siedział cicho z warningami - takim oto sposobem - stosując jawne rzutowanie na docelowy typ wskaźnikowy jaki chcemy uzyskać czyli:<br /><br />[syntax=c]char * wsk = (char*)&amp;zmienna_flash.tab&#91;0&#93;;[/syntax]<br /><br />i sprawa załatwiona. - teraz możesz sobie np w pętli for() np wysłać wszystkie elementy tablicy do LCD<br /><br />[syntax=c]for( uint8_t i=0; i&lt;3; i++ ) lcd_putc( *(wsk++) );[/syntax]<br /><br />co jest oczywiście odpowiednikiem tego:<br /><br />[syntax=c]for( uint8_t i=0; i&lt;3; i++ ) lcd_putc( zmienna_flash.tab&#91; i &#93; );[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br /><span style="color: #FF0000">A z ciekawości powiedz mi po jasny gwint dałeś tytuł postu &quot;struktury eeprom&quot; jak pytasz o struktury we Flash ?</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lip 2016, o 12:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mac]]></name></author>
<updated>2016-07-16T11:07:08+01:00</updated>
<published>2016-07-16T11:07:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164101#p164101</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164101#p164101"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164101#p164101"><![CDATA[
Dziekuje P. Mirku za odpowiedź ( post już poprawiłem ) juz mi się trochę rozjaśniło o co chodzi z inicjalizacją tylko jeszcze parę pytań <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br /><br />rozumiem że kolejność inicjalizacji jest ważna tzn. nieprawidłowa byłaby taka inicjal. ?<br />[syntax=c]const TPRZYKŁAD zmienna_flash PROGMEM = {{'a','b','c'},20};[/syntax]<br /><br />no i jeszcze korzystając z okazji chciałbym zapytać o wskaźniki<br /><br />tzn. jak wyglądałby wskaźnik do jakiejś zmiennej zawartej w strukturze we FLASH<br />czy tak?<br />[syntax=c]TPRZYKŁAD *wsk = &amp; zmienna_flash.tab&#91;2&#93;[/syntax]<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3917">Mac</a> — 16 lip 2016, o 11:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-16T03:53:33+01:00</updated>
<published>2016-07-16T03:53:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164096#p164096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164096#p164096"/>
<title type="html"><![CDATA[Re: struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164096#p164096"><![CDATA[
Po pierwsze to zacznij od tego:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2013/07/struktury-w-c-wyjasnijmy-sobie-dokadnie.html" >http://mirekk36.blogspot.com/2013/07/st ... adnie.html</a><!-- m --><br /><br />potem przeczytaj to:<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 />skoro nie dodałeś specyfikatora const dla zmiennej we Flash<br /><br />Odpowiadając na pytanie - zmienne się inicjalizuje zawsze tak samo niezależnie czy we flash czy RAM.<br /><br />Poza tym zobacz ile błędów popełniłeś w tej definicji struktury:<br /><br />1. nie tepedef tylko typedef<br />2. nie uin8_t tylko uint8_t<br />3. gdzie masz średniki ?<br /><br />Zaś jeśli chodzi o inicjalizację twoją to co to jest u ciebie to <br /><br />a,b,c ?<br /><br />jakieś zmienne czy elementy tablicy ?<br /><br />jeśli definiujesz elementy tablicy to co? nie dodajesz nawiasów klamrowych ?<br /><br />W twoim przypadku powinno wyglądać to tak:<br /><br />[syntax=c]typedef struct {<br />uint8_t x;<br />char tab&#91;3&#93;;<br />} TPRZYKŁAD;<br /><br />const TPRZYKŁAD zmienna_flash PROGMEM = { 20, {'a','b','c'} };[/syntax]<br /><br /><span style="color: #FF0000">( na przyszłość stosuj prawidłowe formatowanie kodu w postach - masz przecież instrukcję: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --> )</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lip 2016, o 03:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mac]]></name></author>
<updated>2016-07-16T10:41:15+01:00</updated>
<published>2016-07-15T23:36:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164094#p164094</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164094#p164094"/>
<title type="html"><![CDATA[struktury eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15791&amp;p=164094#p164094"><![CDATA[
Witam<br /><br />pytanie: np. mamy zdefiniowany nowy typ strukturalny<br />[syntax=c]typedef struct {<br />uint8_t x;<br />char tab&#91;3&#93;;<br />}TPRZYKŁAD[/syntax]<br />i chcemy teraz stworzyć zmienna tego typu i umieścić w FLASH<br />,tą zmienną we flash trzeba za inicjalizować<br />[syntax=c]TPRZYKŁAD zmienna_flash PROGMEM = {20,a,b,c }[/syntax]<br />Czy taka inicjalizacja jest ok ? chodzi mi tu o to że mamy tablice &quot;char&quot; i czy taką tablicę tak samo się inicjalizuje jak zwykłą zmienną x ?? podając wartości tablicy w nawiasach klamrowych za zmienną x ??<br /> - jakie ogólnie są zasady inicjalizacji zmiennych we flash<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3917">Mac</a> — 15 lip 2016, o 23:36</p><hr />
]]></content>
</entry>
</feed>