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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-01-06T00:45:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21828&amp;mode</id>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2019-01-06T00:45:58+01:00</updated>
<published>2019-01-06T00:45:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215485#p215485</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215485#p215485"/>
<title type="html"><![CDATA[Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215485#p215485"><![CDATA[
Obejrzyj filmik Mirka o kompilatorze i inkludach. Na pewno Ci się wyklaruje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 6 sty 2019, o 00:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T16:06:11+01:00</updated>
<published>2019-01-05T16:06:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215462#p215462</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215462#p215462"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215462#p215462"><![CDATA[
Dzięki jeszcze raz wszystkim!<br />Miłego weekendu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Victoria  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><a href="https://obrazkiforum.atnel.pl/3977/9b675206023cade6af4bf165ffbd8875.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/3977/9b675206023cade6af4bf165ffbd8875.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 5 sty 2019, o 16:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T16:04:28+01:00</updated>
<published>2019-01-05T16:04:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215461#p215461</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215461#p215461"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215461#p215461"><![CDATA[
zdecydowanie najlepsza z metod nauki, ale to co jeszcze ważniejsze w tej chwili - to! .... to właśnie to żeby zrozumieć co i jak jest kompilowane<br /><br />bo później to już będzie &quot;z górki&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 16:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T15:57:48+01:00</updated>
<published>2019-01-05T15:57:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215460#p215460</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215460#p215460"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215460#p215460"><![CDATA[
No teraz już rozumiem.. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Ale jak to początkującemu, niełatwo mi pewne rzeczy tak od kopa przyswoić...teraz jest to dla mnie całkiem logiczne.<br /><br />Dlatego przeczytałem ze 3 razy rozdział o wyświetlaczu HD44780 i dlatego też próbuję sam napisać na ile umiem z głowy bibliotekę do obsługi tego wyświetlacza. Wychodzę z założenia, że to bardziej pomoże, niż czytanie rozdziału nawet 20-raz  <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=3977">dayer41</a> — 5 sty 2019, o 15:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T15:46:23+01:00</updated>
<published>2019-01-05T15:46:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215457#p215457</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215457#p215457"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215457#p215457"><![CDATA[
No zobacz sam masz swój main.c<br /><br />inkludujesz w nim swój plik lcd4478.h - tak?<br /><br />co to oznacza? .... Preprocesor, który działa przed kompilatorem - wkleja (można tak wprost powiedzieć) WSZYSTKO co masz w swoim *.h do pliku lcd44780.c - rozumiesz?<br /><br />No i wkracza kompilator - i teraz skąd on ma wiedzieć co to jest uint8_t ??? (a zauważ, że wcześniej pisałeś że masz niby błąd związany z int) ... tymczasem to błąd związany z uint8_t<br /><br />Musisz zrozumieć, że kompilator kompiluje ODDZIELNIE KAŻDY plik *.c z takimi wklejonymi bebechami z plików *.h  (#include X - to znaczy wklej mnie pan tutaj to co w pliku X)<br /><br />no i jeśli nie masz w swoim main.c <br /><br />[syntax=c]#include &lt;avr/io.h&gt; // jak pokazywałem na tych rysunkach wyżej[/syntax]<br /><br />albo jeśli nie masz<br /><br />[syntax=c]#include &lt;stdint.h&gt;  // w swoim pliku hd44780.h[/syntax]<br /><br />no to Qurczę - skąd kompilator ma wiedzieć co oznacza uint8_t ??? ja się ciebie pytam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i kompilator też się ciebie pyta - wymiotując błędami<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Więc jak widzisz nie ma to NIC WSPÓLNEGO z typem &quot;int&quot; który widzisz przed funkcją main()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 15:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T15:36:28+01:00</updated>
<published>2019-01-05T15:36:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215456#p215456</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215456#p215456"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215456#p215456"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />No to właśnie pokaż co to za error ? bo nie powinno go być ale, że nie widzę błędu to ciężko coś podpowiedzieć<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />i pokaż kod tego krótkiego pliku main.c<br /></div><br /><br />main.c:<br />[syntax=c]#include &quot;hd44780.h&quot;<br /><br />int main (void)<br />{<br /><br />}[/syntax]<br />hd44780.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#include &quot;hd44780.h&quot;<br /><br /><br />void lcd_init(void)<br />{<br /><br />}<br /><br />void dir_out (void)<br />{<br />//ustawienie pinow D4- D7 jako wyjscia<br />PORT(LCD_D4_PORT) |= (1&lt;&lt;LCD_D4);<br />PORT(LCD_D5_PORT) |= (1&lt;&lt;LCD_D5);<br />PORT(LCD_D6_PORT) |= (1&lt;&lt;LCD_D6);<br />PORT(LCD_D7_PORT) |= (1&lt;&lt;LCD_D7);<br />}<br /><br />void dir_in (void)<br />{<br />//ustawienie pinow D4-D7 jako wyjscia<br />PORT(LCD_D4_PORT) &amp;= ~(1&lt;&lt;LCD_D4);<br />PORT(LCD_D5_PORT) &amp;= ~(1&lt;&lt;LCD_D5);<br />PORT(LCD_D6_PORT) &amp;= ~(1&lt;&lt;LCD_D6);<br />PORT(LCD_D7_PORT) &amp;= ~(1&lt;&lt;LCD_D7);<br />}<br /><br />inline void write_half (uint8_t data)<br />{<br />if (data &amp; (1&lt;&lt;0)) PORT(LCD_D4_PORT) |= (1&lt;&lt;LCD_D4);<br />else PORT(LCD_D4_PORT) &amp;= ~(1&lt;&lt;LCD_D4);<br /><br />if (data &amp; (1&lt;&lt;1)) PORT(LCD_D5_PORT) |= (1&lt;&lt;LCD_D5);<br />else PORT(LCD_D5_PORT) &amp;= ~(1&lt;&lt;LCD_D5);<br /><br />if (data &amp; (1&lt;&lt;2)) PORT(LCD_D6_PORT) |= (1&lt;&lt;LCD_D5);<br />else PORT(LCD_D6_PORT) &amp;= ~(1&lt;&lt;LCD_D6);<br /><br />if (data &amp; (1&lt;&lt;3)) PORT(LCD_D7_PORT) |= (1&lt;&lt;LCD_D7);<br />else PORT(LCD_D7_PORT) &amp;= ~(1&lt;&lt;LCD_D7);<br />}[/syntax]<br />hd44780.h:<br />[syntax=c]#ifndef HD44780_H_<br />#define HD44780_H_<br /><br /><br />//definicje pinów D4-D7<br />#define LCD_D4_PORT D<br />#define LCD_D4 4<br />#define LCD_D5_PORT D<br />#define LCD_D5 5<br />#define LCD_D6_PORT D<br />#define LCD_D6 6<br />#define LCD_D7_PORT D<br />#define LCD_D7 7<br /><br /><br />//definicje pinów RS, RW, E<br />#define LCD_RS_PORT C<br />#define LCD_RS 4<br />#define LCD_RW_PORT C<br />#define LCD_RW 5<br />#define LCD_E_PORT C<br />#define LCD_E 3<br /><br /><br />//makra upraszczające dostęp do rejestrów<br />#define PORT(x) mPORT(x)<br />#define mPORT(x) (PORT##x)<br /><br />#define PIN(x) mPIN(x)<br />#define mPIN(x) (PIN##x)<br /><br />#define DDR(x) mDDR(x)<br />#define mDDR(x) (DDR##x)<br /><br /><br />//makra ustawiajace/zerujace sygnaly RS, RW i E<br />#define SET_RS PORT(LCD_RS_PORT) |= (1&lt;&lt;LCD_RS)<br />#define CLR_RS PORT(LCD_RS_PORT) &amp;= ~(1&lt;&lt;LCD_RS)<br /><br />#define SET_RW PORT(LCD_RW_PORT) |= (1&lt;&lt;LCD_RW)<br />#define CLR_RW PORT(LCD_RW_PORT) &amp;= ~(1&lt;&lt;LCD_RW)<br /><br />#define SET_E PORT(LCD_E_PORT) |= (1&lt;&lt;LCD_E)<br />#define CLR_E PORT(LCD_E_PORT) &amp;= ~(1&lt;&lt;LCD_E)<br /><br /><br />//deklaracje funkcji<br /><br />void lcd_init (void);<br />void dir_out (void);<br />void dir_in (void);<br />inline void write_half (uint8_t data);<br /><br />#endif /* HD44780_H_ */[/syntax]<br />error w linii 52 pliku .h:<br /><strong>In file included from ../main.c:8:0:<br />../hd44780.h:64:25: error: unknown type name 'uint8_t'<br /> inline void write_half (uint8_t data);<br />                         ^<br />make: *** [main.o] Błąd 1</strong><br /><br />Kolega <strong>andrews</strong> chyba rokminił, o co tu chodzi, to logiczne  <img src="https://forum.atnel.pl/images/smilies/icon_idea.gif" alt=":idea:" title="Pomysł" /> <div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Jeśli Twój kod w main.c wygląda np. tak:<br />dayer41 napisał(a):<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />#include &quot;hd44780.h&quot;<br /> <br />int main (void)<br />{<br /> <br />}<br />GeSHi<br /><br />a plik hd44780.h wygląda tak:<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />#ifndef HD44780_H_<br />#define HD44780_H_<br /> <br />uint8_t write_half (uint8_t data);<br /> <br />#endif<br />GeSHi<br /><br />To po preprocesorze kod main.c do kompilacji będzie wyglądał mniej więcej tak:<br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />uint8_t write_half (uint8_t data);<br /> <br />int main (void)<br />{<br /> <br />}<br />GeSHi<br /><br />i wtedy już brakuje definicji typu uint8_t<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 5 sty 2019, o 15:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-01-05T15:25:43+01:00</updated>
<published>2019-01-05T15:25:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215455#p215455</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215455#p215455"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215455#p215455"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">andrews napisał(a):</div><div class="quotecontent">Gdyby w pliku main.c nie było dyrektywy preprocesora #include &lt;avr/io.h&gt;<br /></div><br />tylko hmmm jaki to ma sens żeby nie było tego inkluda ? ... tzn jeśli ktoś chce sobie robić problemy to owszem - no można nie robić tego inkludowania avr/io.h  tylko ... no to troszkę taki masochizm</div><br />Przedstawiłem to jako sytuację hipotetyczną. Chodziło mi raczej o to, że brak <strong><em>#include &lt;avr/io.h&gt;</em></strong> (lub przynajmniej <strong><em>&lt;stdint.h&gt;</em></strong>) w dowolnym pliku <strong><em>*.c</em></strong>, w którym będzie dołączony plik nagłówkowy <strong><em>hd44780.h</em></strong> wygeneruje problem.<br />Niemniej dołączenie pliku <strong><em>io.h</em></strong> w pliku <strong><em>main.c</em></strong> wcale nie jest obligatoryjne, a czy to stwarza problemy lub jest masochizmem, to zależy od konkretnej implementacji i stylu programowania.<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Krótko mówiąc gdybyś pisał jakąś bibliotekę, w której przepięknie i wzorcowo rozgraniczyłbyś warstwę abstrakcyjną od sprzętowej - to można śmiało powiedzieć, że &quot;po choinkę&quot; wstawiać do takich plików *.c inkluda z &lt;avr/io.h&gt; .... ? Ten mógłby się znaleźć tylko w plikach *.c odpowiedzialnych za warstwę sprzętową. Zaś w plikach nagłówkowych *.h związanych z plikami źródłowymi warstwy abstrakcyjnej inkludować by trzeba było wszystko co potrzebne ...<br /></div><br />No właśnie, plik <strong><em>main.c</em></strong> też wcale nie musi odwoływać się do sprzętu.<br /><br />... co nie oznacza, że należy na siłę unikać <strong><em>#include &lt;avr/io.h&gt;</em></strong> w pliku <strong><em>main.c</em></strong>, kiedy jest <strong>potrzebny</strong>.<br /><br /><div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />a skoro int jest typem wbudowanym, to raczej nie potrzebuje biblioteki io.h.<br /><br />A jednak jest bez niej error<br /></div><br />Czy na pewno masz tam tylko funkcję <strong><em>int main()</em></strong>?<br />Jeśli Twój kod w <strong><em>main.c</em></strong> wygląda np. tak:<br /><div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />[syntax=c]#include &quot;hd44780.h&quot;<br /> <br />int main (void)<br />{<br /> <br />}[/syntax]<br /></div><br />a plik <strong><em>hd44780.h</em></strong> wygląda tak:<br />[syntax=c]#ifndef HD44780_H_<br />#define HD44780_H_<br /> <br />uint8_t write_half (uint8_t data);<br /> <br />#endif[/syntax]<br />To po preprocesorze kod <strong><em>main.c</em></strong> do kompilacji będzie wyglądał mniej więcej tak:<br />[syntax=c]uint8_t write_half (uint8_t data);<br /><br />int main (void)<br />{<br /> <br />}[/syntax]<br />i wtedy już brakuje definicji typu <strong><em>uint8_t</em></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 5 sty 2019, o 15:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T14:38:06+01:00</updated>
<published>2019-01-05T14:38:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215452#p215452</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215452#p215452"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215452#p215452"><![CDATA[
No to właśnie pokaż co to za error ? bo nie powinno go być ale, że nie widzę błędu to ciężko coś podpowiedzieć<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />i pokaż kod tego krótkiego pliku main.c<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 14:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T14:31:15+01:00</updated>
<published>2019-01-05T14:31:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215451#p215451</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215451#p215451"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215451#p215451"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />no ale tobie chodzi o int czy uint8_t bo to jednak różnica<br /></div><br />Chodzi mi o to, że nie załączałem w pliku main.c biblioteki io.h, ponieważ w pliku main.c miałem tylko funkcję<br />[syntax=c]int main (void)[/syntax]<br />a skoro int jest typem wbudowanym, to raczej nie potrzebuje biblioteki io.h.<br /><br />A jednak jest bez niej error, więc zapytałem, dlaczego błąd wywołuje mi brak io.h w pliku main.c<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 5 sty 2019, o 14:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T14:10:09+01:00</updated>
<published>2019-01-05T14:10:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215448#p215448</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215448#p215448"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215448#p215448"><![CDATA[
no ale tobie chodzi o int czy uint8_t bo to jednak różnica<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 14:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T13:58:30+01:00</updated>
<published>2019-01-05T13:58:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215444#p215444</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215444#p215444"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215444#p215444"><![CDATA[
No to muszę skombinować jakiś Wikol czy inny klej i przykleić io.h do main.c na stałe... Zresztą później i tak by się pojawił, bo na pewno odwołam się do jakiejś funkcji lub zmiennej uint8_t.<br /><br />Ale nie będę sobą, jak nie zrozumiem, dlaczego błąd wywołuje mi brak io.h w pliku main.c, skoro wygląda on tak:<br />[syntax=c]#include &quot;hd44780.h&quot;<br /><br />int main (void)<br />{<br /><br />}[/syntax]<br />Przecież int jest typem wbudowanym.<br /><br />Jakby to okreśłił towarzysz Edward G, <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Pomożecie?<br /></div><br /> <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=3977">dayer41</a> — 5 sty 2019, o 13:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T13:43:00+01:00</updated>
<published>2019-01-05T13:43:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215440#p215440</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215440#p215440"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215440#p215440"><![CDATA[
<div class="quotetitle">dziobak7 napisał(a):</div><div class="quotecontent"><br />Myślę że zanim wyniknie jakaś głębsza dyskusja, warto ustalić czy dyskutujecie o (przepraszam że nieformalnym językiem):<br /></div><br />No i się zaczyna <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ja obstawiam 5 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Sorki to też tak, żeby utrzymać dobre poczucie humoru <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 7 minutach ]</span></strong><br /><br /><div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />Rozumiem jednak, że nic się nie stanie, gdy przyrośnie mi do palców includowanie io.h w pliku main.c tak po prostu?<br /></div><br />A cóż miałoby się stać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> prawie nie wyobrażam sobie kodu jakiegokolwiek projektu, który w main.c nie miałby tego inkluda.<br /><br />Oczywistą sprawą jest, że nie musi się to tyczyć wszystkich plików *.c projektu bo oczywiście koledzy kalani i dziobak7 mają świętą rację ... z jednej strony patrząc ... ale w ten sposób to można się przekomarzać ze dwieście lat <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a mnie się już nie chce.<br /><br />Krótko mówiąc gdybyś pisał jakąś bibliotekę, w której przepięknie i wzorcowo rozgraniczyłbyś warstwę abstrakcyjną od sprzętowej - to można śmiało powiedzieć, że &quot;po choinkę&quot; wstawiać do takich plików *.c inkluda z &lt;avr/io.h&gt; .... ? Ten mógłby się znaleźć tylko w plikach *.c odpowiedzialnych za warstwę sprzętową. Zaś w plikach nagłówkowych *.h związanych z plikami źródłowymi warstwy abstrakcyjnej inkludować by trzeba było wszystko co potrzebne ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 13:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T13:40:39+01:00</updated>
<published>2019-01-05T13:40:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215439#p215439</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215439#p215439"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215439#p215439"><![CDATA[
Wow, temat się rozwinął, jest głębszy niż myślałem  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<br /><br />Mirku - bardzo dużo pracy wkładasz w to, żeby nawet screeny przygotować z wyjaśnieniem, dziękuję!<br />andrews - merytoryczna prosta wypowiedź, piękna sprawa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Rozwiązaniem było zaincludowanie biblioteki &lt;avr/io.h&gt; w pliku main.c. <br />Nie zaincludowałem go wcześniej, ponieważ myślałem jak kolega:<br /><div class="quotetitle">kalani napisał(a):</div><div class="quotecontent"><br />A jaki sens ma jego includowanie jeśli w danym pliku nie ma odwołania do obiektów deklarowanych przez includa?<br /></div><br /><br />a mój plik main.c na tym etapie wyglądał tak:<br />[syntax=c]#include &quot;hd44780.h&quot;<br /><br />int main (void)<br />{<br /><br />}[/syntax]<br />nie widziałem sensu includowania tutaj io.h, bo nigdzie nie odwołuję się do żadnej zmiennej ani funkcji typu uint8_t.<br /><br />Rozumiem jednak, że nic się nie stanie, gdy przyrośnie mi do palców includowanie io.h w pliku main.c tak po prostu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 5 sty 2019, o 13:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T12:10:41+01:00</updated>
<published>2019-01-05T12:10:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215429#p215429</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215429#p215429"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215429#p215429"><![CDATA[
<div class="quotetitle">kalani napisał(a):</div><div class="quotecontent"><br />A jaki sens ma jego includowanie jeśli w danym pliku nie ma odwołania do obiektów deklarowanych przez includa?<br /></div><br />Ma duży sens, ponieważ dzięki temu poza inkludowaniem odwołań do modułów procka, jest też automatycznie inkludowany &lt;inttypes.h&gt; a także &lt;stdint.h&gt;<br /><br />Więc nawet jeśli akurat w danym pliku źródłowym nie korzysta się z odwołań do pinów/portów/timerów i innych modułów to jest ta zaleta, że &quot;za darmo&quot; mam podciągnięte stdint.h a gdy tylko jednak będę potrzebował odwołać się do byle pinu w kodzie, chociażby z powodu włączenia własnych funkcji debugujących to mam od razu &lt;avr/io.h&gt;<br /><br />A przy okazji też nie muszę sobie zawracać głowy z kolejnością inkludowania stosując zawsze jednolite podejście<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T11:23:13+01:00</updated>
<published>2019-01-05T11:23:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215424#p215424</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215424#p215424"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215424#p215424"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Gdyby w pliku main.c nie było dyrektywy preprocesora #include &lt;avr/io.h&gt;<br /></div><br />tylko hmmm jaki to ma sens żeby nie było tego inkluda ? ... tzn jeśli ktoś chce sobie robić problemy to owszem - no można nie robić tego inkludowania avr/io.h <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tylko ... no to troszkę taki masochizm<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 11:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-01-05T11:13:01+01:00</updated>
<published>2019-01-05T11:13:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215423#p215423</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215423#p215423"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215423#p215423"><![CDATA[
Myślę, że tu bardziej chodzi o sytuację, kiedy plik nagłówkowy <em><strong>lcd.h</strong></em> (odnosząc się do przykładowych zrzutów ekranu z postu kolegi Mirka) dołączamy do innego pliku np. <em><strong>menu.c</strong></em>, w którym <strong>nie</strong> jest dołączany (bezpośrednio lub pośrednio np. poprzez <em><strong>avr/io.h</strong></em>) plik nagłówkowy <em><strong>stdint.h</strong></em> (bo to w nim jest definicja typu <strong><em>uint8_t</em></strong> używanego przez parametr funkcji). W takiej sytuacji, niezależnie od kolejności &quot;inkludowania&quot; nagłówków w pliku <em><strong>lcd.c</strong></em> problem wyniknie podczas kompilacji pliku <em><strong>menu.c</strong></em>. Gdyby w pliku <strong><em>main.c</em></strong> nie było dyrektywy preprocesora <strong><em>#include &lt;avr/io.h&gt;</em></strong>, problem też by wystąpił, ponieważ w deklaracji funkcji <strong><em>write_half()</em></strong> występuje parametr typu <strong><em>uint8_t</em></strong>. Myślę, że o taką sytuację chodziło autorowi tego wątku.<br /><br /><div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />Dlaczego w pliku .h wyrzuca mi error : unknown type name uint8_t, skoro w pliku hd44780.c załączyłem plik io.h PRZED plikiem nagłówkowym hd44780.h?<br />Oczywiscie załączenie w pliku .h biblioteki stdlib.h rozwiązuje problem, ale nie rozumiem czemu w jednym projekcie nie muszę tego robić, a w innym muszę.<br /></div><br />Pliki nagłówkowe nie są analizowane podczas kompilacji oddzielnie, tylko w połączeniu z plikiem <strong><em>*.c</em></strong>, do którego zostały dołączone, oraz w połączeniu z innymi plikami nagłówkowymi dołączonymi do tego pliku <strong><em>*.c</em></strong>. Każdy taki zestaw - plik <strong><em>*.c</em></strong> z dołączonymi do niego plikami nagłówkowymi - to tzw. jednostka translacji.<br />Z kolei każda taka jednostka translacji jest oddzielnym tworem. Jeśli jedna jednostka translacji ma dołączony plik nagłówkowy definiujący typ <strong><em>uint8_t</em></strong>, to inna jednostka translacji nic o tym nie wie, więc - jeśli ten typ jest użyty np. do zadeklarowania parametru funkcji - musi też mieć dołączony odpowiedni plik nagłówkowy.<br />To wymusza konieczność zachowania pewnych zależności pomiędzy plikami nagłówkowymi oraz zależności w odpowiedniej kolejności ich dołączania.<br />W opisanej przez Ciebie sytuacji, jeżeli do pliku <strong><em>hd44780.c</em></strong> dołączyłeś plik nagłówkowy <strong><em>&lt;avr/io.h&gt;</em></strong> przed plikiem nagłówkowym <strong><em>hd44780.h</em></strong>, to będzie OK. Jeśli teraz dołączasz plik nagłówkowy <strong><em>hd44780.h</em></strong> do innego pliku źródłowego <strong><em>*.c</em></strong>, to jest to osobna jednostka translacji, która zna typ <strong><em>uint8_t</em></strong>, lub go nie zna (czytaj: ma dołączony pośrednio lub bezpośrednio plik nagłówkowy <strong><em>stdint.h</em></strong>, lub nie ma). Jeśli więc w tym pliku <strong><em>*.c</em></strong> nie masz jeszcze dołączonego odpowiedniego pliku nagłówkowego <strong><em>stdint.h</em></strong> i typ <strong><em>uint8_t</em></strong> w tej jednostce translacji nie jest znany, to dołączenie pliku nagłówkowego <strong><em>hd44780.h</em></strong> wymusi dołączenie pliku nagłówkowego <strong><em>stdint.h</em></strong> (bezpośrednio lub poprzez dołączenie np. <strong><em>&lt;avr/io.h&gt;</em></strong>).<br /><br />W takiej sytuacji należy umieścić w pliku nagłówkowym <strong><em>hd44780.h</em></strong> komentarzu w stylu: <em>&quot;przed dołączeniem tego pliku nagłówkowego dyrektywą #include do pliku *.c  należy dodać także plik nagłówkowy stdint.h&quot;</em>.<br />Można też na początku pliku <strong><em>hd44780.h</em></strong> dodać po prostu linijkę:[syntax=c]#ifndef HD44780_H_<br />#define HD44780_H_<br /><br />#include &lt;stdint.h&gt;<br /><br />uint8_t write_half (uint8_t data);<br /><br />#endif[/syntax]<br />i też będzie OK. Jeśli dołączysz ten plik do pliku <strong><em>*.c</em></strong>, w którym <strong><em>stdint.h</em></strong> jest już dołączone, to nic się nie stanie, ponieważ pliki nagłówkowe mają (a przynajmniej powinny mieć) zabezpieczenie przed wielokrotnym inkludowaniem. Jeśli w tym pliku <strong><em>*.c</em></strong> nie będzie dołączonego <strong><em>stdint.h</em></strong>, to zostanie dołączony poprzez plik <strong><em>hd44780.h</em></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 5 sty 2019, o 11:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-05T08:09:41+01:00</updated>
<published>2019-01-05T08:09:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215418#p215418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215418#p215418"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215418#p215418"><![CDATA[
<div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />Ok, tylko dlaczego muszę w wypadku tego projektu dołączać<br /></div><br />Ale co ty opowiadasz, nic nie trzeba dołączać. Pomijam już że masz Bluebooka i możesz zajrzeć, że tam w żadnym przykładzie nie ma dodawanego stdlib.h w plikach nagłówkowych i wszystko śmiga - mógłbyś podejrzeć.<br /><br />A u ciebie jak znam życie to problem bierze się stąd, że w main.c zapewne nakaszaniłeś troszkę z inkludami, czyli zrobiłeś zapewne tak:<br /><br /><br />[syntax=c]#include &quot;LCD/lcd.h&quot;<br /><br />#include &lt;avr/io.h&gt;[/syntax]<br /><br />zamiast tak:<br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#include &quot;LCD/lcd.h&quot;[/syntax]<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> sprawdź sam ... i zobaczysz, że będzie to działać tak jak pisałem wyżej. Wg mnie najpierw inkludujemy pliki systemowe a później dopiero pliki własne<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />krótko mówiąc powinno być tak:<br /><br /><img src="https://obrazkiforum.atnel.pl/54/f966aad9c68345e4ecb96832fa781374.png" alt="Obrazek" /><br /><br />a nie tak:<br /><br /><img src="https://obrazkiforum.atnel.pl/54/8f38739a665c14ea8de7d2f16597b0bc.png" alt="Obrazek" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 sty 2019, o 08:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-05T06:39:08+01:00</updated>
<published>2019-01-05T06:39:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215417#p215417</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215417#p215417"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215417#p215417"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Sprawa jest dość prosta<br /><br />powinieneś mieć najpierw w pliku *.C inkluda<br /><br />stdlib.h<br /><br />a później swojego inkluda *.h<br /><br />jeśli nie zachowujesz tej kolejności to musisz dołączać inkluda stdlib.h w swoim pliku *.h<br /><br />--------------<br /><br />tylko po co - skoro warto pamiętać o tym co napisałem na początku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br />Ok, tylko dlaczego muszę w wypadku tego projektu dołączać[syntax=c]#include stdlib.h[/syntax] a w wypadku innego (np multipleksowanie led 7segm.) wystarczyło na początku pliku 7segm.c dodać[syntax=c]#include &lt;avr/io.h&gt;[/syntax]?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 5 sty 2019, o 06:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-04T23:51:52+01:00</updated>
<published>2019-01-04T23:51:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215410#p215410</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215410#p215410"/>
<title type="html"><![CDATA[Re: Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215410#p215410"><![CDATA[
Sprawa jest dość prosta<br /><br />powinieneś mieć najpierw w pliku *.C inkluda<br /><br />stdlib.h<br /><br />a później swojego inkluda *.h<br /><br />jeśli nie zachowujesz tej kolejności to musisz dołączać inkluda stdlib.h w swoim pliku *.h<br /><br />--------------<br /><br />tylko po co - skoro warto pamiętać o tym co napisałem na początku <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=54">mirekk36</a> — 4 sty 2019, o 23:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2019-01-04T23:42:29+01:00</updated>
<published>2019-01-04T23:42:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215409#p215409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215409#p215409"/>
<title type="html"><![CDATA[Kiedy dołączać stdlib.h ?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21828&amp;p=215409#p215409"><![CDATA[
Hej,<br />Zastanawiam się mocno nad jedną sprawą. Mianowicie na jakieś zasadzie kompilator określa, ze trzeba dołączyć stdlib.h, a kiedy nie trzeba.<br /><br />W ramach ćwiczenia piszę sobie swoją bibliotekę obsługi wyświetlacza hd44780.<br />Mam 3 pliki:<br />-main.c (na razie pusty kompilujący się szablon),<br />-hd44780.c,<br />-hd44780h.<br /><br />W pliku hd44780.h zawarłem deklaracje funkcji<br />[syntax=c]uint8_t write_half (uint8_t data);[/syntax]<br /><br />Natomiast w pliku hd44780.c w przybliżonym skrócie i przede wszystkim w takiej kolejności<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#include „hd44780.h”<br /><br />uint8_t write_half (uint8_t data)<br />{<br />      //tu coś tam<br />}[/syntax]<br />Dlaczego w pliku .h wyrzuca mi error : unknown type name uint8_t, skoro w pliku hd44780.c załączyłem plik io.h PRZED plikiem nagłówkowym hd44780.h?<br />Oczywiscie załączenie w pliku .h biblioteki stdlib.h rozwiązuje problem, ale nie rozumiem czemu w jednym projekcie nie muszę tego robić, a w innym muszę..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 4 sty 2019, o 23:42</p><hr />
]]></content>
</entry>
</feed>