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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-05T17:18:41+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5420&amp;mode</id>
<entry>
<author><name><![CDATA[grayfox]]></name></author>
<updated>2014-01-05T17:18:41+01:00</updated>
<published>2014-01-05T17:18:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63916#p63916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63916#p63916"/>
<title type="html"><![CDATA[Re: Operacje na wskaźniku void]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63916#p63916"><![CDATA[
Tylko dodając te 2 parametry, mam już 4 bajty w plecy, dokładnie tyle ile zajmuje int32_t. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Wciąż szukam innej drogi, chociaż powoli skłaniam się ku oddzielnej funkcji do każdego typu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2360">grayfox</a> — 5 sty 2014, o 17:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-04T19:27:46+01:00</updated>
<published>2014-01-04T19:27:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63810#p63810</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63810#p63810"/>
<title type="html"><![CDATA[Re: Operacje na wskaźniku void]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63810#p63810"><![CDATA[
Możesz tak:<br />[syntax=c]char * intToStr(void * num, uint8_t len);<br />intToStr(&amp;a, sizeof(a));[/syntax]<br />nadal nie wiadomo jak rozróżnić liczby ze znakiem np. int8_t i bez znaku np. uint8_t. Możesz też warunek umieścić w wywołaniu funkcji:<br />[syntax=c]char * intToStr(void * num, uint8_t minus);<br />intToStr(&amp;a, a &lt; 0);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 4 sty 2014, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grayfox]]></name></author>
<updated>2014-01-04T14:38:19+01:00</updated>
<published>2014-01-04T14:38:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63758#p63758</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63758#p63758"/>
<title type="html"><![CDATA[Operacje na wskaźniku void]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5420&amp;p=63758#p63758"><![CDATA[
Witam serdecznie użytkowników forum. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dopiero raczkuję z programowaniem uC i jestem w trakcie pisania biblioteki do obsługi wyświetlaczy LCD opartych na sterowniku HD44780.<br /><br />Starając się maksymalnie oszczędzić pamięć procesora, chcę napisać własną procedurę mającą na celu zamianę liczby na łańcuch znaków, aby wykorzystać ją do wysyłania danych liczbowych na wyświetlacz. <br />Ponieważ nie wiem czy podawana liczba będzie 8, 16, czy 32 bitowa, zamiast tworzyć dużą zmienną, która niepotrzebnie odkładała by się na stosie, postanowiłem użyć wskaźników, a ponieważ nie znam typu parametru, chcę użyć typu void.<br /><br />Moja deklaracja funkcji wygląda następująco:<br />[syntax=c]char * intToStr(void * num);[/syntax]<br /><br />Jednak, gdy potrzebuję sprawdzić, czy podany parametr jest mniejszy od 0, za nic nie mogę dojść jak to zrobić.<br />Przesyłając zmienną w sposób:<br />[syntax=c]intToStr(&amp;a);[/syntax]<br />Jedyny sposób, w którym poprawnie funkcja odczytywała liczbę było zapisanie operacji na wskaźniku w sposób:<br />[syntax=c]if ( *(int32_t*)num &lt; 0 ) {...}[/syntax]<br />Przy czym, jeżeli typ podanej liczby będzie np int8_t, takie rzutowanie jest bez sensu. Sposoby o których myślałem, a niestety nie działają to:<br />[syntax=c]if ( *(typeof(*num)*)num &lt; 0 ) {...}<br />lub podanie rzutowania przy parametrze:<br />intToStr((int8_t*)&amp;a);[/syntax]<br /><br />Jak więc ugryźć ten problem ? Przypuszczam, że to kwestia braku zrozumienia prze mnie działania wskaźnika void, bo jak narazie nie widzę sensownego zastosowania tego typu.<br /><br />Bardzo dziękuję za pomoc, pozdrawiam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2360">grayfox</a> — 4 sty 2014, o 14:38</p><hr />
]]></content>
</entry>
</feed>