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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-10-11T16:28:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23386&amp;mode</id>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2020-10-11T16:27:04+01:00</updated>
<published>2020-10-11T16:27:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229385#p229385</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229385#p229385"/>
<title type="html"><![CDATA[Re: Zapis i odczyt do/z EEPROM zagwózdka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229385#p229385"><![CDATA[
Uniwersalność widać nie zawsze ma sens...<br />ale makro trochę upraszcza sprawę, dzięki:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 11 paź 2020, o 16:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2020-10-11T16:28:30+01:00</updated>
<published>2020-10-11T16:09:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229383#p229383</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229383#p229383"/>
<title type="html"><![CDATA[Re: Zapis i odczyt do/z EEPROM zagwózdka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229383#p229383"><![CDATA[
<div class="quotetitle">gordon10 napisał(a):</div><div class="quotecontent"><br />[syntax=c]inline void copy_eem_to_ram( void * ram_data, void * eem_data ) {                      <br />        eeprom_read_block( ram_data, eem_data, sizeof(ram_data) );<br />}[/syntax]<br />Co mam wpisać w sizeof( ??? ) żeby rozmiar danych był obliczany automatycznie, żebym nie musiał za każdym razem zmieniać tego ręcznie<br /></div><br />Za pomocą funkcji <strong><em>inline</em></strong> tego nie zrobisz. We fragmencie, który zacytowałem <strong><em>sizeof(ram_data)</em></strong> przyjmie wartość 2, ponieważ taki jest rozmiar samego wskaźnika. Aby sprawdzić rozmiar typu danych wskazywanych przez wskaźnik (czyli Twojej struktury TFURNANCE) należałoby użyć składni <strong><em>sizeof(*ram_data)</em></strong>, ale u Ciebie to nie zadziała, ponieważ <strong><em>ram_data</em></strong> jest typu <strong><em>void*</em></strong>, więc kompilator nie zgadnie, jakiego typu elementy będziesz przekazywał do funkcji. Żeby to zadziałało parametr <strong><em>ram_data</em></strong> musiałby być typu <strong><em>TFURNANCE*</em></strong><br />Możesz za to spróbować osiągnąć cel za pomocą makra:[syntax=c]#define copy_eem_to_ram(r,e) eeprom_read_block(&amp;r, &amp;e, sizeof(r))<br />// wywołanie<br />    copy_eem_to_ram(furnance, furnance_E);[/syntax]<br /><br />EDIT: Poprawiłem nazwę funkcji: było <strong><em>eeprom_write_block</em></strong>, powinno być <strong><em>eeprom_read_block</em></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 11 paź 2020, o 16:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2020-10-11T16:04:11+01:00</updated>
<published>2020-10-11T16:04:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229382#p229382</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229382#p229382"/>
<title type="html"><![CDATA[Re: Zapis i odczyt do/z EEPROM zagwózdka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229382#p229382"><![CDATA[
Heh no to sobie &quot;uprościłem&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Ale chcę trochę podrążyć temat i w takim razie spytam inaczej:<br />Jak wyłuskać wielkość(rozmiar) elementu/zmiennej/typu, na który wskazuje wskaźnik?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 11 paź 2020, o 16:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[auers]]></name></author>
<updated>2020-10-11T15:51:46+01:00</updated>
<published>2020-10-11T15:51:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229381#p229381</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229381#p229381"/>
<title type="html"><![CDATA[Re: Zapis i odczyt do/z EEPROM zagwózdka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229381#p229381"><![CDATA[
[syntax=c]eeprom_read_block( ram_data, eem_data, sizeof(ram_data)[/syntax]<br />To Ci nie działa ponieważ jako argument sizeof podałeś wskaźnik i operator zwraca Ci rozmiar typu wskaźnikowego a nie struktury.<br />Jeżeli chcesz, aby zwrócony był rozmiar struktury to musisz to zrobić właśnie tak jak już to zrobiłeś: <br /><br />[syntax=c]eeprom_write_block( ram_data, eem_data, sizeof(TFURNANCE) );[/syntax]<br />Chyba zamiast uprościć to sobie komplikujesz, nie bardzo widzę co i w jakim celu chcesz bardziej automatyzować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7806">auers</a> — 11 paź 2020, o 15:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2020-10-11T13:53:16+01:00</updated>
<published>2020-10-11T13:53:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229380#p229380</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229380#p229380"/>
<title type="html"><![CDATA[Zapis i odczyt do/z EEPROM zagwózdka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23386&amp;p=229380#p229380"><![CDATA[
Witam,<br />Kombinuję przy zapisie/odczycie ustawień urządzenia do/z EEPROM. Chodzi o to, że przy zmianie ustawień, zapisywana jest oda razu kopia struktury do EEPROM, a przy uruchomieniu urządzenia odczyt struktury z EEMEM do struktury w RAM. <br />Wszystko działa poprawnie gdy używam bezpośrednio funkcji systemowych. Jednak chciałem sobie uprościć zadanie, żeby nie wpisywać za każdym razem wielkości bloku danych i to już nie działa tak jakbym chciał. Już pokazuję na przykładach o co chodzi:<br /><br />To pewnie mało ważne, ale mam taką strukturę danych oraz zmienne, w których przechowuję ustawienia pieca:<br />[syntax=c]typedef struct {<br />uint8_t status;// status sterownika<br />int8_t temp_up;// temperatura max (c.w.u.) - wylaczanie pompy cwu<br />int8_t temp_lo;// temperatura min (pieca) - wlaczanie pompy cwu<br />int8_t temp_delta;// delta temperatury<br />int8_t temp_furn;// temperatuta aktualna na piecu<br />int8_t temp_cwu;// temp aktualna ladowania cwu<br />} TFURNANCE;<br /><br />TFURNANCE furnance;// ustawienia pieca w RAM<br />TFURNANCE furnance_E;// strukt. pieca w EEPROM[/syntax]<br />Gdy stosuję funkcje systemowe (poniżej) wszystko jest ok. Dane ładnie się zapisują i odczytują.<br />[syntax=c]eeprom_write_block(&amp;furnance, &amp;furnance_E, sizeof(TFURNANCE));// zapis do EEMEM<br />eeprom_read_block(&amp;furnance, &amp;furnance_E, sizeof(furnance));        // odczyt z EEMEM przy starcie[/syntax]<br />Jednak napisałem funckcje, w których przekazuję tylko źródło i miejsce docelowe danych, a rozmiar danych już miał się ustawiać automatycznie (i tu pewnie robię jakiegoś babola).<br />[syntax=c]inline void copy_eem_to_ram( void * ram_data, void * eem_data ) {<br />eeprom_read_block( ram_data, eem_data, sizeof(ram_data) );<br />}<br /><br />inline void copy_ram_to_eem( void * ram_data, void * eem_data ) {<br />eeprom_write_block( ram_data, eem_data, sizeof(ram_data) );<br />}<br /><br />// Użycie funkcji w programie<br />copy_ram_to_eem (&amp;furnance, &amp;furnance_E);   // zapis ustawien do EEMEM<br />copy_eem_to_ram (&amp;furnance, &amp;furnance_E);   // odczyt z EEMEM[/syntax]<br />Przy takim rozwiązaniu to nie działa.<br /><br />Działa dopiero gdy rozmiar danych określę na sztywno<br />[syntax=c]inline void copy_eem_to_ram( void * ram_data, void * eem_data ) {<br />eeprom_read_block( ram_data, eem_data, sizeof(TFURNANCE) );    // rozmiar danych na sztywno!!! sizeof(TFURNANCE) <br />}<br /><br />inline void copy_ram_to_eem( void * ram_data, void * eem_data ) {<br />eeprom_write_block( ram_data, eem_data, sizeof(TFURNANCE) );    // rozmiar danych na sztywno!!! sizeof(TFURNANCE)<br />}[/syntax]<br /><br />Co mam wpisać w sizeof( ??? ) żeby rozmiar danych był obliczany automatycznie, żebym nie musiał za każdym razem zmieniać tego ręcznie <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br />Będę wdzięczny za podpowiedź.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 11 paź 2020, o 13:53</p><hr />
]]></content>
</entry>
</feed>