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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-01-29T18:46:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=20098&amp;mode</id>
<entry>
<author><name><![CDATA[Mellanogaster]]></name></author>
<updated>2018-01-29T18:46:33+01:00</updated>
<published>2018-01-29T18:46:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202888#p202888</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202888#p202888"/>
<title type="html"><![CDATA[Re: void* data a const void* data]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202888#p202888"><![CDATA[
dokładnie <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=2911">Mellanogaster</a> — 29 sty 2018, o 18:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[StaryAnoda]]></name></author>
<updated>2018-01-29T18:12:53+01:00</updated>
<published>2018-01-29T18:12:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202884#p202884</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202884#p202884"/>
<title type="html"><![CDATA[Re: void* data a const void* data]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202884#p202884"><![CDATA[
Ok czyli podsumowując const void* data w argumencie funkcji zabezpiecza aby w ciele funkcji jakiś kiepski programista nie modyfikował zawartości tego wskaźnika tak ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12916">StaryAnoda</a> — 29 sty 2018, o 18:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mellanogaster]]></name></author>
<updated>2018-01-29T17:40:08+01:00</updated>
<published>2018-01-29T17:40:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202880#p202880</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202880#p202880"/>
<title type="html"><![CDATA[Re: void* data a const void* data]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202880#p202880"><![CDATA[
Funkcja do czytania nie może mieć const bo by nie mogła pod tą zmienną nic zapisać, a write powinno być const aby nie zmienić źródła danych zapisywanych. Data jest po stronie ramu i w jednym przypadku jest źródłem zapisu do eeproma, a w drugim miejscem pod które przepisujemy z eeproma. Oznaczanie argumentu funkcji jako const  to dobra praktyka tam gdzie funkcja nie powinna go modyfikować, zwłaszcza gdy jest nim wskaźnik <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=2911">Mellanogaster</a> — 29 sty 2018, o 17:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[StaryAnoda]]></name></author>
<updated>2018-01-29T12:47:09+01:00</updated>
<published>2018-01-29T12:47:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202861#p202861</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202861#p202861"/>
<title type="html"><![CDATA[void* data a const void* data]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20098&amp;p=202861#p202861"><![CDATA[
Hej <br /><br />Mam pytanie, czytam serię artykułów ze strony: <a href="https://forbot.pl/blog/kurs-stm32-11-i2c-w-praktyce-pamiec-eeprom-id10556"  class="postlink">https://forbot.pl/blog/kurs-stm32-11-i2c-w-praktyce-pamiec-eeprom-id10556</a><br /><br />[syntax=c]void eeprom_read(uint32_t addr, void* data, int size)<br />{<br /> int i;<br /> uint8_t* buffer = (uint8_t*)data;<br /> <br /> eeprom_set_addr(addr);<br /> <br /> I2C_GenerateSTART(I2C1, ENABLE);<br /> while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) != SUCCESS);<br /> <br /> I2C_AcknowledgeConfig(I2C1, ENABLE);<br /> I2C_Send7bitAddress(I2C1, 0xa0, I2C_Direction_Receiver);<br /> while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) != SUCCESS);<br /> <br /> for (i = 0; i &lt; size - 1; i++) {<br /> while(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED) != SUCCESS);<br />     buffer&#91;i&#93; = I2C_ReceiveData(I2C1);<br />    }<br /> I2C_AcknowledgeConfig(I2C1, DISABLE);<br />    I2C_GenerateSTOP(I2C1, ENABLE);<br />    while(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED) != SUCCESS);<br />    buffer&#91;i&#93; = I2C_ReceiveData(I2C1);<br />}[/syntax]<br /><br />[syntax=c]void eeprom_write(uint32_t addr, const void* data, int size)<br />{<br /> int i;<br /> const uint8_t* buffer = (uint8_t*)data;<br /> <br /> eeprom_set_addr(addr);<br /> for (i = 0; i &lt; size; i++) {<br /> I2C_SendData(I2C1, buffer&#91;i&#93;);<br /> while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING) != SUCCESS);<br /> }<br /> I2C_GenerateSTOP(I2C1, ENABLE);<br />}[/syntax]<br /><br />Nie rozumiem dlaczego dla zapisu do pamięci jest const ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12916">StaryAnoda</a> — 29 sty 2018, o 12:47</p><hr />
]]></content>
</entry>
</feed>