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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-08-25T11:18:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=12743&amp;mode</id>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-08-25T11:18:26+01:00</updated>
<published>2015-08-25T11:18:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12743&amp;p=138284#p138284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12743&amp;p=138284#p138284"/>
<title type="html"><![CDATA[Re: zapis uint16_t w zewnętrznej pamięci flash - co robię źl]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12743&amp;p=138284#p138284"><![CDATA[
Hmm... Zauważyłem dziwną rzecz - pomaga kilkukrotne wykonanie pod rząd instrukcji Page_To_Buffer(4095, 1)a, przed odczytaniem danych z bufora. Co może być nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 25 sie 2015, o 11:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-08-25T08:14:36+01:00</updated>
<published>2015-08-25T08:14:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12743&amp;p=138263#p138263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12743&amp;p=138263#p138263"/>
<title type="html"><![CDATA[zapis uint16_t w zewnętrznej pamięci flash - co robię źle?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12743&amp;p=138263#p138263"><![CDATA[
Eksperymentuję obecnie z zewnętrzną pamięcią flash na SPI (AT45DB161D). Zapisuję w niej większą ilość danych, które są następnie odczytywane bajt po bajcie. Używam dwóch zmiennych pomocniczych typu uint16_t do oznaczenia ostatniej strony zawierającej dane i ostatniego bajtu w tej stronie, aby po zakończeniu cyklu odczytu program wracał do początku i nie czytał śmieci znajdujących się dalej. Wartość tych zmiennych jest ustalana w procedurze zapisywania danych do pamięci.<br /><br />Oczywiście wszystko działa do czasu pierwszego resetu, ale potem wartość tych zmiennych się resetuje i wypadałoby je przechowywać w jakiejś pamięci nieulotnej. Postanowiłem wykorzystać do tego ostatnią stronę pamięci flash.<br /><br />Poza zakończeniu zapisywania danych do pamięci wykonuję następujący kod:<br /><br />[syntax=c]last_page = page_id;<br />last_page_ptr = page_ptr;<br /><br />Buffer_Write_Byte(1, 0, (last_page &amp; 0xFF) );<br />Buffer_Write_Byte(1, 1, (last_page &gt;&gt; 8) );<br />Buffer_Write_Byte(1, 2, (last_page_ptr &amp; 0xFF) );<br />Buffer_Write_Byte(1, 3, (last_page_ptr &gt;&gt; 8) );<br />Buffer_To_Page(1, 4095);[/syntax]<br /><br />Jak już mówiłem - w tym momencie program działa prawidłowo, opierając się na wartościach zmiennych last_page i last_page_ptr.<br /><br />Po resecie wykonywany jest następujący fragment kodu, w ramach inicjacji programu.<br /><br />[syntax=c]Page_To_Buffer(4095, 1);<br />last_page =  ((uint16_t)Buffer_Read_Byte(1, 1)&lt;&lt;8) | (uint16_t)Buffer_Read_Byte(1, 0);<br />last_page_ptr = ((uint16_t)Buffer_Read_Byte(1, 3)&lt;&lt;8) | (uint16_t)Buffer_Read_Byte(1, 2);[/syntax]<br /><br />Pomimo tego program czyta danej dalej, pomijając granicę wyznaczaną przez te zmienne.<br /><br />Gdzie popełniłem błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 25 sie 2015, o 08:14</p><hr />
]]></content>
</entry>
</feed>