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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-07T12:33:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10071&amp;mode</id>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2015-01-07T12:33:26+01:00</updated>
<published>2015-01-07T12:33:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112899#p112899</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112899#p112899"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112899#p112899"><![CDATA[
Bardzo dziękuję za pomoc. Teraz działa elegancko.<br /><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=2202">Elektro_maniak</a> — 7 sty 2015, o 12:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-01-07T12:24:36+01:00</updated>
<published>2015-01-07T12:24:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112896#p112896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112896#p112896"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112896#p112896"><![CDATA[
Chyba tu będzie błąd:<br /><div class="quotetitle">xor napisał(a):</div><div class="quotecontent"><br />tmp_ptr = (const uint8_t *)pgm_read_word(txt[0]-&gt;sgn);<br /></div><br />makro pgm_read_* przyjmuje wskaźnik na komórkę pamięci a podana jest wartość, czyli było by jakoś tak (trzeba sprawdzić priorytet operatorów):<br />[syntax=c]tmp_ptr = (const uint8_t *)pgm_read_word(&amp;txt&#91;0&#93;-&gt;sgn);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 7 sty 2015, o 12:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2015-01-07T11:15:35+01:00</updated>
<published>2015-01-07T11:15:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112886#p112886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112886#p112886"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112886#p112886"><![CDATA[
Witaj,<br />Niestety to nadal nie jest to, bo jak dostawałem krzaki tak dostaję nadal. Musi gdzieś tu być wciąż jakiś błąd, który nam ucieka.<br />Ale i tak bardzo dziękuję Ci za pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2202">Elektro_maniak</a> — 7 sty 2015, o 11:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-01-07T09:15:40+01:00</updated>
<published>2015-01-07T09:15:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112873#p112873</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112873#p112873"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112873#p112873"><![CDATA[
Żadne &quot;bo jest warning&quot; tylko typy muszą być zgodne<br /><br />[syntax=c]const Sign **txt;<br /><br />    txt = (const Sign**)malloc(3*sizeof(Sign*));<br />    txt&#91;0&#93; = &amp;_A;[/syntax]<br /><br />W buffor[0..7][3] jak się domyślam, ma się znaleźć zawartość tablicy __A (uwielbiam takie nazwy <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":-|" title="Średnio zadowolony" />)? W takim razie przydało by się po drodze odczytać wskaźnik z _A-&gt;sgn, czyli w sumie było by jakoś tak:<br /><br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />const uint8_t __A&#91;&#93; PROGMEM = {0b0001000,<br />                            0b0010100,<br />                            0b0100010,<br />                            0b1000001,<br />                            0b1111111,<br />                            0b1000001,<br />                            0b1000001};<br /><br />typedef struct {<br />         uint8_t size;<br />         const uint8_t *sgn;<br />} Sign;<br /><br />const Sign _A PROGMEM = {119,__A};<br /><br />int main(void)<br />{<br />uint8_t buffor&#91;10&#93;&#91;10&#93;;<br />    const Sign **txt;<br />    txt = (const Sign**)malloc(3*sizeof(*txt));<br /><br />    txt&#91;0&#93; = &amp;_A;<br /><br />    {<br />    const uint8_t *tmp_ptr;<br /><br />    tmp_ptr = (const uint8_t *)pgm_read_word(txt&#91;0&#93;-&gt;sgn);<br /><br />    for (uint8_t i=0; i&lt;7; i++)<br />         buffor&#91;i&#93;&#91;3&#93; = pgm_read_byte(tmp_ptr++);<br /><br />    }<br /><br />while(1);<br /><br />}[/syntax]<br /><br />zamiast txt[0] = &amp;_A; można by wrócić do funkcji:<br /><br />[syntax=c]const Sign* GetChar(char character) {<br />    switch (character) {<br /> <br />        case 'A':return &amp;_A;<br />}<br />}<br />//...<br />    txt&#91;0&#93; = GetChar('A');[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 7 sty 2015, o 09:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2015-01-06T23:36:27+01:00</updated>
<published>2015-01-06T23:36:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112854#p112854</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112854#p112854"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112854#p112854"><![CDATA[
Ok, to w takim razie w jaki sposób mogę uzyskać wskaźnik do tej struktury w pamięci flash?<br /><br />Próbowałem też w poniższy sposób, ale on powinien zadziałać tylko w przypadku, kiedy _A jest w RAM:<br />[syntax=c]Sign **txt;<br />txt = (Sign**)malloc(1*sizeof(*txt));<br />txt&#91;0&#93; = (Sign*)&amp;_A; //GetChar('A');<br />// przy txt&#91;0&#93; = &amp;_A; dostaję ostrzeżenie assignment discards qualifiers from pointer target type, stąd to rzutowanie<br /><br />for (uint8_t i=0; i&lt;7; i++)<br />     buffor&#91;i&#93;&#91;3&#93; = pgm_read_byte(txt&#91;0&#93;-&gt;sgn++);[/syntax]<br /><br />Niestety tak jak jest teraz to wywala krzaki.<br /><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=2202">Elektro_maniak</a> — 6 sty 2015, o 23:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-01-06T23:16:51+01:00</updated>
<published>2015-01-06T23:16:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112846#p112846</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112846#p112846"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112846#p112846"><![CDATA[
<div class="quotetitle">Elektro_maniak napisał(a):</div><div class="quotecontent"><br />incompatible types in assignment<br /></div><br />Bo txt jest (czy raczej powinno być) wskaźnikiem na wskaźniki do Sign, czyli<br />[syntax=c]Sign **txt;[/syntax]<br />wtedy <br /><strong>txt[0]</strong> jest typu <em>Sign*</em> i pasuje do typu zwracanego przez <strong>GetChar</strong><br /><div class="quotetitle">Elektro_maniak napisał(a):</div><div class="quotecontent"><br />A z funkcją GetChar, to niestety nie wiem co jest źle. pgm_read_word jest po to, bo chciałbym odczytać wskaźnik w pamięci flash do tablicy _A.<br /></div><br />[syntax=c]pgm_read_word(&amp;_A)[/syntax] nie zwraca wskaźnika do <strong>_A</strong> tylko zawartość <strong>_A</strong>, a konkretnie dwa pierwsze bajty zapisane pod adresem _A: <a href="http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga32d8ab354156f4b1ffdb77a275ba6223"  class="postlink">http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga32d8ab354156f4b1ffdb77a275ba6223</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 6 sty 2015, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2015-01-06T21:05:13+01:00</updated>
<published>2015-01-06T21:05:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112824#p112824</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112824#p112824"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112824#p112824"><![CDATA[
Właśnie ta gwiazdka też mi nie pasowała, ale jedynie tak kompiluje się bez żadnych ostrzeżeń czy warningów.<br />Jak dam:<br />[syntax=c]txt&#91;0&#93; = GetChar('A');[/syntax]<br />to dostaję: incompatible types in assignment<br /><br />A z funkcją GetChar, to niestety nie wiem co jest źle.  pgm_read_word jest po to, bo chciałbym odczytać wskaźnik w pamięci flash do tablicy _A. Nie wiem jak to powinno inaczej wyglądać. Proszę o pomoc.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2202">Elektro_maniak</a> — 6 sty 2015, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-01-06T20:43:43+01:00</updated>
<published>2015-01-06T20:43:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112820#p112820</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112820#p112820"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112820#p112820"><![CDATA[
To zastanów się po co ta gwiazdka. Ta linia nie wywala błędu czy warninga?<br />To nie wszystko: zastanów się co tak naprawdę zwraca funkcja GetChar. W założeniach ma zwracać wskaźnik na _A, a faktycznie zwraca dwa pierwsze bajty _A, nieprawdaż?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 6 sty 2015, o 20:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2015-01-06T19:56:31+01:00</updated>
<published>2015-01-06T19:56:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112810#p112810</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112810#p112810"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112810#p112810"><![CDATA[
Przepraszam, miało być oczywiście:<br /><br />[syntax=c]txt&#91;0&#93; = *GetChar('A');[/syntax]<br /><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=2202">Elektro_maniak</a> — 6 sty 2015, o 19:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2015-01-06T18:58:08+01:00</updated>
<published>2015-01-06T18:58:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112792#p112792</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112792#p112792"/>
<title type="html"><![CDATA[Re: wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112792#p112792"><![CDATA[
<div class="quotetitle">Elektro_maniak napisał(a):</div><div class="quotecontent"><br />const uint8_t __A[]<br /></div><br /><br />My, zwykli śmiertelnicy nie używamy nazw rozpoczynających się od podkreślnika albowiem są zarezerwowane: <a href="http://stackoverflow.com/questions/3325815/what-does-double-underscore-mean-in-variable-name-in-c-language"  class="postlink">http://stackoverflow.com/questions/3325815/what-does-double-underscore-mean-in-variable-name-in-c-language</a><br /><div class="quotetitle">Elektro_maniak napisał(a):</div><div class="quotecontent"><br />Którą uzupełniam w sposób następujący:<br /><br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br /><br />    dsp.txt[0] = *GetChar('A');<br /><br />GeSHi<br /></div><br /><br />No nie bardzo &quot;którą uzupełniam&quot;, zmienna <em>dsp </em>pojawia się w tym miejscu po raz pierwszy, nic nie wiadomo o jej typie, można tylko snuć spekulacje. Na przykład takie, że jeżeli typem <em>dsp.txt</em> jest <em>Sign*</em> to powyższe przypisanie jest wielce podejrzane. Funkcja <em>GetChar</em> zwraca wskaźnik na <em>Sign</em>, a jeżeli damy tam operator wyłuskania to co uzyskamy? Chyba jakąś lipe?<br />Jeśli <em>dsp.txt</em> to tablica elementów <em>uint8_t</em> to też wygląda to źle.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 6 sty 2015, o 18:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2015-01-06T13:11:18+01:00</updated>
<published>2015-01-06T13:11:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112701#p112701</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112701#p112701"/>
<title type="html"><![CDATA[wskaźniki, struktury, tablice - odczyt z  pamięci flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10071&amp;p=112701#p112701"><![CDATA[
Witajcie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />W pamięci flash trzymam tablicę w stylu:<br /><br />[syntax=c]const uint8_t __A&#91;&#93; PROGMEM = {0b0001000,<br />0b0010100,<br />0b0100010,<br />0b1000001,<br />0b1111111,<br />0b1000001,<br />0b1000001};[/syntax]<br /><br />Następnie stworzyłem nowy typ strukturalny:<br /><br />[syntax=c]typedef struct {<br /> uint8_t size;<br /> const uint8_t *sgn;<br />} Sign;[/syntax]<br /><br />Tworzę sobie w pamięci flash obiekty tego typu:<br /><br />[syntax=c]const Sign _A PROGMEM = {119,__A};[/syntax]<br /><br />Stworzyłem sobie funkcję, pobierającą wskaźnik z pamięci flash na daną strukturę Sign:<br /><br />[syntax=c]Sign* GetChar(char character) {<br />switch (character) {<br /><br />case 'A':<br />return (Sign*) pgm_read_word(&amp;_A);<br />...<br />        }<br />}[/syntax]<br /><br />Następnie chciałbym stworzyć sobie dynamiczną tablicę wskaźników na typ Sign:<br /><br />[syntax=c]Sign *txt;<br />txt = (Sign*)malloc(3*sizeof(*txt));[/syntax]<br /><br />Którą uzupełniam w sposób następujący:<br /><br />[syntax=c]dsp.txt&#91;0&#93; = *GetChar('A');[/syntax]<br /><br />i próbuję wyświetlić zawartość tablicy __A w sposób następujący:<br /><br />[syntax=c]for (uint8_t i=0; i&lt;7; i++)<br />     buffor&#91;i&#93;&#91;3&#93; = pgm_read_byte(txt-&gt;sgn++);[/syntax]<br /><br />Ale niestety dostaję krzaki. Co robię źle?<br /><br />Dodam, że takie coś działa znakomicie:<br /><br />[syntax=c]Sign sg;<br />memcpy_P(&amp;sg ,&amp;_A, sizeof(_A));<br /><br />for (uint8_t i=0; i&lt;7; i++)<br />     buffor&#91;i&#93;&#91;3&#93; = pgm_read_byte(sg.sgn++);[/syntax]<br /><br />Ale zależy mi, by zrobić podobnie do tego, jak wyżej opisałem.<br /><br />Pozdrawiam i dziękuję za pomoc:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2202">Elektro_maniak</a> — 6 sty 2015, o 13:11</p><hr />
]]></content>
</entry>
</feed>