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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-02T23:04:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9810&amp;mode</id>
<entry>
<author><name><![CDATA[misiulu]]></name></author>
<updated>2015-01-02T23:04:35+01:00</updated>
<published>2015-01-02T23:04:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111879#p111879</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111879#p111879"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111879#p111879"><![CDATA[
Brawo ! Gratulacje !!! :&gt;<br /><br />Teraz przynajmniej już jest rozwiązanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />W przyszłości może ktoś je zoptymalizuje hehe, ale ważne że jest działająca podstawa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4068">misiulu</a> — 2 sty 2015, o 23:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kudzu]]></name></author>
<updated>2015-01-02T22:38:20+01:00</updated>
<published>2015-01-02T22:38:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111876#p111876</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111876#p111876"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111876#p111876"><![CDATA[
SUKCES!:D<br /><br />Zrobiłem to tak:<br /><br />[syntax=c]...<br />uint8_t byte_a;<br />uint8_t byte_b;<br />uint32_t address_a;<br />uint32_t address_b;<br />...<br />void memory_fill(void)<br />{<br />...<br />address_a = pgm_get_far_address(lcd_test_screen_1a&#91;0&#93;);<br />address_b = pgm_get_far_address(lcd_test_screen_1b&#91;0&#93;);<br /><br />for(unsigned int k=0; k&lt;19200; k++)<br />{<br />if((address_a+k)&lt;0x10000)<br />{<br />byte_a = pgm_read_byte(&amp;lcd_test_screen_1a&#91;k&#93;);<br />}<br />else<br />{<br />byte_a = pgm_read_byte_far(0x10000 | (uint16_t)&amp;lcd_test_screen_1a&#91;k&#93;);<br />}<br /><br />if((address_b+k)&lt;0x10000)<br />{<br />byte_b = pgm_read_byte(&amp;lcd_test_screen_1b&#91;k&#93;);<br />}<br />else<br />{<br />byte_b = pgm_read_byte_far(0x10000 | (uint16_t)&amp;lcd_test_screen_1b&#91;k&#93;);<br />}<br />...<br />}<br />...<br />}[/syntax]<br /><br />Trochę mało wydajne, ale działa! Jakież to fantastyczne, że człowiek potrafi się z takich małych sukcesów cieszyć jak głupi;)<br />I właśnie skończyło mi się w butelce piwo... Kormoran Jasny (mocno chmielony) - przyzwoity;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3232">kudzu</a> — 2 sty 2015, o 22:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kudzu]]></name></author>
<updated>2015-01-02T19:19:50+01:00</updated>
<published>2015-01-02T19:19:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111828#p111828</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111828#p111828"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111828#p111828"><![CDATA[
<div class="quotetitle"><a href="http://www.avrfreaks.net/comment/502866#comment-502866"  class="postlink">http://www.avrfreaks.net/comment/502866#comment-502866</a> napisał(a):</div><div class="quotecontent"><br />GET_FAR_ADDRESS macro has many limitations. It requires a compile-time known constant address (that's the reason to fail when the array element is accesed using a variable index) and operates at run-time (that's the reason why GET_FAR_ADDRESS it's not allowed to be used in variable initializations for const, flash, and generally for any static storage).<br /></div><br /><br />Wspomniane makro <em>GET_FAR_ADDRESS</em> to to samo, co oryginalne<em> pgm_get_far_address</em>.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3232">kudzu</a> — 2 sty 2015, o 19:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[misiulu]]></name></author>
<updated>2015-01-02T17:00:26+01:00</updated>
<published>2015-01-02T17:00:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111815#p111815</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111815#p111815"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111815#p111815"><![CDATA[
No to super, że są postępy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ja niestety nie mam akurat na wyposażeniu procka &gt; 64kB Flash więc nie mogę Ci pomóc w praktyce <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Ale jak Ci się uda to dla potomnych będzie i na pewno się przyda hehe <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><div class="quotetitle">kudzu napisał(a):</div><div class="quotecontent"><br />Pierwszy sukces! Działa taka konstrukcja:<br /><br />    byte_a = pgm_read_byte_far(0x10000 | (uint16_t)&amp;lcd_test_screen_1a[k]);<br /><br /><br />Problem jest tylko taki, że nie rozpoznaje danych poniżej 64k. Kwestia czasu...<img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /></div><br /><br />A zobacz co zwraca te całe wyrażenie przedstawione wyżej poniżej 64Kb. Może jest to jakaś stała wartość. Wtedy jak ona występuje to dać odczyt po staremu, a resztę puścić z tym co działa powyżej 64k.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4068">misiulu</a> — 2 sty 2015, o 17:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kudzu]]></name></author>
<updated>2015-01-02T13:55:09+01:00</updated>
<published>2015-01-02T13:55:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111795#p111795</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111795#p111795"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111795#p111795"><![CDATA[
<div class="quotetitle">misiulu napisał(a):</div><div class="quotecontent"><br />Bo teraz sam doczytałem, że operator wyłuskania adresu &quot;&amp;&quot; działa tylko do 16 bitów. Spróbuj w funkcji pgm_read_byte_far użyć pgm_get_far_address (zmienna). Może wtedy kompilator przestanie krzyczeć i wszystko zacznie działać przynajmniej w części <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br />Spróbowałem tak:<br /> <br />[syntax=c]byte_a = pgm_read_byte_far(pgm_get_far_address(lcd_test_screen_1a&#91;k&#93;));<br />byte_b = pgm_read_byte_far(pgm_get_far_address(lcd_test_screen_1b&#91;k&#93;));[/syntax] <br />jak również pośrednio przez dodatkowe zmienne, ale za każdym razem w konsoli pojawia mi się:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />./eg9018c.o: In function `memory_fill':<br />eg9018c.c:(.text.memory_fill+0x22): undefined reference to `r30'<br />eg9018c.c:(.text.memory_fill+0x24): undefined reference to `r30'<br />eg9018c.c:(.text.memory_fill+0x26): undefined reference to `r30'<br />eg9018c.c:(.text.memory_fill+0x34): undefined reference to `r30'<br />eg9018c.c:(.text.memory_fill+0x36): undefined reference to `r30'<br />./eg9018c.o:eg9018c.c:(.text.memory_fill+0x38): more undefined references to `r30' follow<br />collect2.exe: error: ld returned 1 exit status<br />make: *** [Terminal.elf] Błąd 1<br /></div><br /><br />Podejrzałem sobie asemblera i wychodzi na to, że ostatnia tablica połową jest przed 64k, a połową za.<br />Nie miałem pojęcia, że mogą pojawić się tak duże problemy z odczytem danych z flasha:/<br /><br />Jeszcze dla unaocznienia problemu wklejam zdjęcie:<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/3232/6865c780fa92cda80bf7f1268eb2b544.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3232/6865c780fa92cda80bf7f1268eb2b544.JPG" alt="Obrazek" /></a><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 22 minutach ]</span></strong><br /><br /><a href="http://www.avrfreaks.net/forum/controller-jumps-wrong-pgm-array"  class="postlink">http://www.avrfreaks.net/forum/controller-jumps-wrong-pgm-array</a> - jakbym to pisał...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 47 minutach ]</span></strong><br /><br />Pierwszy sukces! Działa taka konstrukcja:<br /><br />[syntax=c]byte_a = pgm_read_byte_far(0x10000 | (uint16_t)&amp;lcd_test_screen_1a&#91;k&#93;);[/syntax]<br />Problem jest tylko taki, że nie rozpoznaje danych poniżej 64k. Kwestia czasu...<img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3232">kudzu</a> — 2 sty 2015, o 13:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[misiulu]]></name></author>
<updated>2014-12-30T23:18:07+01:00</updated>
<published>2014-12-30T23:18:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111380#p111380</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111380#p111380"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111380#p111380"><![CDATA[
No to przynajmniej jakiś postęp <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Teraz trzeba by tylko wykombinować jak sprawdzić i automatycznie użyć odpowiedniej funkcji w zależności od adresu.<br /><br />Nie wiem czy to zadziała, ale argumentem funkcji pgm_read_byte jest przecież adres w pamięci FLASH. Więc może wystarczy sprawdzić czy ten adres jest większy niż &quot;wartość 64kB&quot; i użyć wtedy funkcji pgm_read_byte_far, a jeżeli mniejszy to wtedy użyć funkcji pgm_read_byte.<br /><br />Jednak nie wiem dokładnie jaka jest to graniczna wartość. Chyba dla każdego mikrokontrolera będzie inna. Trzeba by zobaczyć w datasheecie od jakiego adresu zaczyna się pamięć FLASH w twoim przypadku ATmedze 128 i zobaczyć jaki będzie adres po tych 64kB od początku FLASH. Metodą prób i błędów patrząc na obrazek czy jest wyświetlany poprawnie może uda się dopasować adres do porównania i wtedy będzie dokładnie wiadomo jak to obliczać w przyszłości <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 18 minutach ]</span></strong><br /><br /><div class="quotetitle">kudzu napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">misiulu napisał(a):</div><div class="quotecontent"> powyżej 64kB stosować należy funkcję pgm_read_byte_far<br /></div><br />I tu chyba właśnie leży problem. Niestety zmiana wprost pgm_read_byte na .._far powoduje wykrzyczenie przez kompilator ostrzeżenia:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />cast from pointer to integer of different size [-Wpointer-to-int-cast]<br /></div><br />Zignorowanie ostrzeżenia sprawia, że na ekranie pojawia się tylko ten nieprawidłowy fragment obrazka, a pozostała, prawidłowa część jest niewidoczna.<br />Nie potrafię na razie poprawnie zmodyfikować kodu.</div><br /><br />Bo teraz sam doczytałem, że operator wyłuskania adresu &quot;&amp;&quot; działa tylko do 16 bitów. Spróbuj w funkcji pgm_read_byte_far użyć pgm_get_far_address (zmienna). Może wtedy kompilator przestanie krzyczeć i wszystko zacznie działać przynajmniej w części <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=4068">misiulu</a> — 30 gru 2014, o 23:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kudzu]]></name></author>
<updated>2014-12-30T21:21:21+01:00</updated>
<published>2014-12-30T21:21:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111353#p111353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111353#p111353"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111353#p111353"><![CDATA[
<div class="quotetitle">misiulu napisał(a):</div><div class="quotecontent"><br />powyżej 64kB stosować należy funkcję pgm_read_byte_far<br /></div><br />I tu chyba właśnie leży problem. Niestety zmiana wprost pgm_read_byte na .._far powoduje wykrzyczenie przez kompilator ostrzeżenia:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />cast from pointer to integer of different size [-Wpointer-to-int-cast]<br /></div><br />Zignorowanie ostrzeżenia sprawia, że na ekranie pojawia się tylko ten nieprawidłowy fragment obrazka, a pozostała, prawidłowa część jest niewidoczna.<br />Nie potrafię na razie poprawnie zmodyfikować kodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3232">kudzu</a> — 30 gru 2014, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kudzu]]></name></author>
<updated>2014-12-29T15:44:25+01:00</updated>
<published>2014-12-29T15:44:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111048#p111048</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111048#p111048"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=111048#p111048"><![CDATA[
Kurcze, nie znałem tego problemu... Nie wiem czy tu leży problem, ale stanowczo muszę o tym poczytać:) Dzięki!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3232">kudzu</a> — 29 gru 2014, o 15:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[misiulu]]></name></author>
<updated>2014-12-23T00:35:30+01:00</updated>
<published>2014-12-23T00:35:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=110062#p110062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=110062#p110062"/>
<title type="html"><![CDATA[Re: [ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=110062#p110062"><![CDATA[
Ja to się nie znam, ale może przyczyna tkwi w funkcji odczytywania danych z pamięci FLASH. Mianowicie powyżej 64kB stosować należy funkcję pgm_read_byte_far, a poniżej pgm_read_byte_near co jest to samo co pgm_read_byte. Może część obrazka jest w tej dalszej części, a przez to, że adres użyty w funkcji pgm_read_byte jest krótszy niż w tej drugiej z &quot;far&quot; to wskazuje na część obrazka pierwszego we wcześniejszej części pamięci.<br /><br />Niestety nie miałem jeszcze w praktyce z tym do czynienia więc nie wiem czy to to akurat jest problemem i co gorsza jak sprawdzić jaką funkcję użyć <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4068">misiulu</a> — 23 gru 2014, o 00:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kudzu]]></name></author>
<updated>2014-12-22T22:55:20+01:00</updated>
<published>2014-12-22T22:55:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=110051#p110051</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=110051#p110051"/>
<title type="html"><![CDATA[[ATmega1284P] Duże tablice we FLASHu - błędy danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9810&amp;p=110051#p110051"><![CDATA[
Od razu do rzeczy.<br />W projekcie mam m.in. dwa pliki nagłówkowe, każdy z nich zawiera dwie tablice po 19200 elementów bajtowych (musiałem rozbić na dwie tablice, bo 38400 elementów dla AVRa to za dużo). Generalnie są to 2 obrazy monochromatyczne 640x480:<br /><br />[syntax=c]// lcd_test_screen_1.h<br /><br />#ifndef LCD_TEST_SCREEN_1_H_<br />#define LCD_TEST_SCREEN_1_H_<br /><br />const uint8_t lcd_test_screen_1a&#91;&#93; PROGMEM = {0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0x03... };<br />const uint8_t lcd_test_screen_1b&#91;&#93; PROGMEM = {0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0x03... };<br /><br />#endif[/syntax]<br />[syntax=c]// lcd_test_screen_2.h<br /><br />#ifndef LCD_TEST_SCREEN_2_H_<br />#define LCD_TEST_SCREEN_2_H_<br /><br />const uint8_t lcd_test_screen_2a&#91;&#93; PROGMEM = {0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0x03... };<br />const uint8_t lcd_test_screen_2b&#91;&#93; PROGMEM = {0xff, 0x7f, 0x00, 0x00, 0xf0, 0xff, 0x7f, 0x00, 0x00, 0xfe, 0xff, 0x03... };<br /><br />#endif[/syntax]<br /><br />Wykorzystuję je w ten sposób:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;lcd.h&quot;<br />#include &quot;lcd_test_screen_1.h&quot;<br />#include &quot;lcd_test_screen_2.h&quot;<br /><br />uint8_t byte_a;<br />uint8_t byte_b;<br />uint8_t scr_count=1;<br />uint8_t scr_switch=0;<br /><br />(..)<br /><br />for(unsigned int k=0; k&lt;19200; k++)<br />{<br />if(scr_switch)<br />{<br />byte_a = pgm_read_byte(&amp;lcd_test_screen_1a&#91;k&#93;);<br />byte_b = pgm_read_byte(&amp;lcd_test_screen_1b&#91;k&#93;);<br />}<br />else<br />{<br />byte_a = pgm_read_byte(&amp;lcd_test_screen_2a&#91;k&#93;);<br />byte_b = pgm_read_byte(&amp;lcd_test_screen_2b&#91;k&#93;);<br />}<br /><br />LCD_CP2_SET;<br />PORT(LCD_DATA) = ((byte_a &lt;&lt; 4) | (byte_b &amp; 0x0F));<br />LCD_CP2_CLR;<br /><br />LCD_CP2_SET;<br />PORT(LCD_DATA) = ((byte_a &amp; 0xF0) | (byte_b &gt;&gt; 4));<br />LCD_CP2_CLR;<br />}<br /><br />(...)[/syntax]<br /><br />Jeden z obrazów wyświetla się na LCD prawidłowo, ale drugi (testowo przełączają się cyklicznie co 3 sekundy - zmienna scr_switch) zawiera kawałek pierwszego - zawsze ten sam fragment i w tym samym miejscu. Nie jest to wina błędu w tablicach - zrobiłem dwa komplety tablic z identyczną zawartością - to samo. Ale kiedy zostawię tylko jedną parę tablic i przełączam tak (czyli przełączam to samo):<br /><br />[syntax=c]for(unsigned int k=0; k&lt;19200; k++)<br />{<br />if(scr_switch)<br />{<br />byte_a = pgm_read_byte(&amp;lcd_test_screen_1a&#91;k&#93;);<br />byte_b = pgm_read_byte(&amp;lcd_test_screen_1b&#91;k&#93;);<br />}<br />else<br />{<br />byte_a = pgm_read_byte(&amp;lcd_test_screen_1a&#91;k&#93;);<br />byte_b = pgm_read_byte(&amp;lcd_test_screen_1b&#91;k&#93;);<br />}[/syntax]<br />To wszystko jest OK. Wnioskuję z tego, że sama metoda zapisu danych do LCD jest w porządku.<br /><br />Czy możliwe jest, żeby kompilator/procek nie radził sobie z tak dużą ilością danych i coś mieszał? Z drugiej strony to tylko 77660 bajtów to tylko 60% FLASHu.<br /><br />Mam pomysł na jeszcze jeden test, ale nie wiem, jak sprawić, żeby kompilator zapisał do wsadu również nieużywane tablice. Będę przełączał tylko jeden obraz (ostatni przykład), ale do pamięci wrzucę oba. Sprawdzę czy ilość danych ma wpływ na działanie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 20 minutach ]</span></strong><br /><br /><div class="quotetitle">kudzu napisał(a):</div><div class="quotecontent"><br />Mam pomysł na jeszcze jeden test, ale nie wiem, jak sprawić, żeby kompilator zapisał do wsadu również nieużywane tablice. Będę przełączał tylko jeden obraz (ostatni przykład), ale do pamięci wrzucę oba. Sprawdzę czy ilość danych ma wpływ na działanie.<br /></div><br /><br />I już wiem. Szczerze mówiąc bardzo mnie to zaskoczyło! Otóż, jeżeli we wsadzie umieszczę oba obrazy (obie pary tablic), ale &quot;przełączam&quot; (przepisuję do LCD) ciągle ten sam obraz, to w przypadku jednej pary tablic jest dobrze, a drugiej źle.<br />I jeszcze jedno spostrzeżenie - jeżeli kolejność dołączania plików nagłówkowych ma odzwierciedlenie w kolejności danych we wsadzie, to problemy mam z pierwszym plikiem nagłówkowym. Zamiana kolejności #include zmienia sytuację.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 23 minutach ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />I jeszcze jedno spostrzeżenie - jeżeli kolejność dołączania plików nagłówkowych ma odzwierciedlenie w kolejności danych we wsadzie, to problemy mam z pierwszym plikiem nagłówkowym.<br /></div><br />Tu sprostowanie, bo robiłem już próby z obiema parami tablic w jednym pliku - te same błędy. Czyli nie jest to wina plików nagłówkowych, a stricte tablic we wsadzie:/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3232">kudzu</a> — 22 gru 2014, o 22:55</p><hr />
]]></content>
</entry>
</feed>