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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-06-11T22:18:31+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20860&amp;mode</id>
<entry>
<author><name><![CDATA[TomekTomek55]]></name></author>
<updated>2018-06-11T22:18:31+01:00</updated>
<published>2018-06-11T22:18:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208879#p208879</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208879#p208879"/>
<title type="html"><![CDATA[Re: Funkcja ze wskaznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208879#p208879"><![CDATA[
Tak masz rację dobrze to wyjaśniłeś tego mi brakowało.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4629">TomekTomek55</a> — 11 cze 2018, o 22:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-06-11T06:13:16+01:00</updated>
<published>2018-06-11T06:13:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208845#p208845</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208845#p208845"/>
<title type="html"><![CDATA[Re: Funkcja ze wskaznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208845#p208845"><![CDATA[
<div class="quotetitle">TomekTomek55 napisał(a):</div><div class="quotecontent"><br />void Kopiuj(void *ram, const wskAE *pgm, wskAE *eeprom){<br />        memcpy_P (ram, pgm, sizeof(*ram));<br />}<br /></div><br />Wskaźnik <strong><em>ram</em></strong> jest typu void, więc za pomocą <strong><em>sizeof(*ram)</em></strong> w rzeczywistości próbujesz pobrać rozmiar typu <strong><em>void</em></strong>, który jest nieokreślony.<br /><br />Musisz przekazać rozmiar kopiowanego obszaru do funkcji jako jej argument.<br />[syntax=c]//definicje typów<br /><br />typedef struct {<br />    uint8_t  aa;<br />    uint16_t bb;<br />    uint8_t  cc;<br />    uint16_t dd;<br />} struct1;<br /><br />typedef struct {<br />    uint8_t  aa;<br />    uint16_t bb;<br />} struct2;<br /><br />// definicje zmiennych<br /><br />// dane w RAM<br />struct1 struktura1_ram;<br />struct2 struktura2_ram;<br /><br />// dane we FLASH<br />const struct1 struktura1_pgm PROGMEM = {<br />    123, 456, 78, 901<br />};<br />const struct2 struktura2_pgm PROGMEM = {<br />    21, 456<br />};<br /><br />//prototyp funkcji<br />void Kopiuj(void *ram_ptr, const void *pgm, size_t size);<br /><br /><br />// wywołanie funkcji<br />    Kopiuj(&amp;struktura1_ram, &amp;struktura1_pgm, sizeof(struktura1_ram));<br />    Kopiuj(&amp;struktura2_ram, &amp;struktura2_pgm, sizeof(struktura2_ram));<br /><br />// definicja funckji<br />void Kopiuj(void *ram_ptr, const void *pgm_ptr, size_t size)<br />{<br />    memcpy_P (ram_ptr, pgm_ptr, size);<br />}[/syntax]<br /><br />Teraz <strong><em>sizeof()</em></strong> zadziała prawidłowo, bo podajesz jako argument zmienną o określonym typie, której rozmiar jest znany.<br /><br />Oczywiście zakładam, że kopiujesz ze struktury we FLASH do struktury <strong>tego samego typu</strong> w RAM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 11 cze 2018, o 06:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[TomekTomek55]]></name></author>
<updated>2018-06-10T22:45:45+01:00</updated>
<published>2018-06-10T22:45:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208841#p208841</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208841#p208841"/>
<title type="html"><![CDATA[Funkcja ze wskaznikiem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20860&amp;p=208841#p208841"><![CDATA[
Witam mam następujący problem z funkcja która ma kopiować rożne struktury z pamięci Flash do Ram.Rożne w sesie ze chciałem aby ta funkcja była uniwersalna i umożliwiała kopiowanie<br />struktur o rożnej długości. Dlatego tez pierwszy wskaźnik w funkcji kopiującej zdefiniowałem jako void ale to nie działa jesli zdefiniuje go jako wskAE tak jak w strukturze to jest <br />ok i działa.Ale tak jak wspomniałem jak będę miał strukturę innej długości np NOWA to już murze mieć pierwszy wskaźnik typu otwartego aby jedna funkcja skopiować te struktury.<br /><br />Morze mi ktoś podpowiedzieć co robię źle?<br /><br />[syntax=c]//deklaracja zmiennych pamiec RAM<br />typedef struct {<br />uint8_t  aa;        <br />uint16_t bb; <br />uint8_t  cc;        <br />uint16_t dd;             <br />} NOWA;<br /><br />NOWA  ABCD_NOWA;<br /><br /><br /><br /><br />//deklaracja zmiennych pamiec RAM<br />typedef struct {<br />uint8_t  aa;        <br />uint16_t bb;              <br />} wskAE;<br /><br />wskAE  ABCD;<br /><br /><br />//inicjalizacja pamieci FLASH<br />const wskAE  pgm_azymut  PROGMEM = {   <br />        120,<br />        200,<br />};<br /><br /><br /><br />//definicja funkcji<br />void Kopiuj(void *ram, const wskAE *pgm, wskAE *eeprom);<br /><br /><br /><br /><br /><br />//wywolanie funkcji<br />Kopiuj(&amp;ram_ABCD, &amp;pgm_ABCD);<br /><br /><br /><br /><br /><br /><br />//deklaracja funkcji<br />void Kopiuj(void *ram, const wskAE *pgm, wskAE *eeprom){<br />memcpy_P (ram, pgm, sizeof(*ram));<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4629">TomekTomek55</a> — 10 cze 2018, o 22:45</p><hr />
]]></content>
</entry>
</feed>