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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-12T19:09:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13201&amp;mode</id>
<entry>
<author><name><![CDATA[Artur_26]]></name></author>
<updated>2015-10-12T19:09:25+01:00</updated>
<published>2015-10-12T19:09:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142223#p142223</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142223#p142223"/>
<title type="html"><![CDATA[Re: zmienna statyczna powoduje zwiększenie ilości kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142223#p142223"><![CDATA[
Dzięki za odpowiedź:) Dużo wyjaśnia to co napisałeś, moje rozumowanie było właśnie w tym kierunku.<br />Co do pamięci RAM to rozumiem, ale szczerze mówiąc to co czasem robi kompilator z kodem to dla mnie jeszcze jest mocną zagadka:)<br />C dopiero się uczę, wcześniej pisałem w ASM i dlatego pewne mechanizmy działające w C są dla mnie jeszcze nie do końca zrozumiałe.<br /><br />Dzięki jeszcze raz i pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4513">Artur_26</a> — 12 paź 2015, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[misiulu]]></name></author>
<updated>2015-10-12T17:23:06+01:00</updated>
<published>2015-10-12T17:23:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142215#p142215</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142215#p142215"/>
<title type="html"><![CDATA[Re: zmienna statyczna powoduje zwiększenie ilości kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142215#p142215"><![CDATA[
Jeżeli tworzysz zmienną nie static w funkcji Klawiatura_8p to tworzy się zmienna lokalna, która widoczna jest tylko w obrębie tej funkcji i dodatkowo istnieje tylko podczas jej wykonywania przez program. Dlatego jej wartości są przetrzymywane nie w &quot;standardowym&quot; RAMie, a na stosie czyli pamięci RAM zapisywanej od końca, a nie od początku. Dlatego jest ona niewliczana w to co pokazuje gadget i eclipse o pamięci RAM.<br /><br />Jeżeli natomiast dopiszesz static to ze zmiennej robi się (jak kolega yaiba83 wcześniej wspomniał) zmienna globalna jednak widoczna tylko w obrębie tej funkcji. Od tej pory zapisywana jest już w miejscu pamięci RAM przeznaczonym na zmienne globalne i dlatego zwiększa Ci się o 2 bajty RAM bo int jest właśnie tej wielkości. Dodatkowo masz więcej pamięci FLASH zużyte bo kompilator musi wykonać więcej czynności, aby (tak jak kolega wyżej wcześniej napisał) zmienna pamiętała swoją wartość za każdym razem gdy wchodzisz do funkcji.<br /><br />To ile tego FLASHa jest zajęte zależy od tego jak używa się tej zmiennej i jak akurat zoptymalizuje to kompilator więc metodą prób i błędów można sobie w gadgecie zobaczyć i czasem coś zoptymalizować <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Jeżeli źle mówię to proszę o uściślenie bądź poprawkę <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=4068">misiulu</a> — 12 paź 2015, o 17:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yaiba83]]></name></author>
<updated>2015-10-12T17:01:08+01:00</updated>
<published>2015-10-12T17:01:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142211#p142211</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142211#p142211"/>
<title type="html"><![CDATA[Re: zmienna statyczna powoduje zwiększenie ilości kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142211#p142211"><![CDATA[
A nie jest tak, że zmienna statyczna globalna tym bardziej będzie zajmowała miejsce w pamięci im częściej jest ona użyta w programie/funkcjach.<br />Procek przy każdym wystąpieniu zmiennej w różnych częściach programu musi pamiętać jej nową wartość a nie pierwotną wartość.<br /><br />100% nie dam głowy, ale wydaje mi się że to będzie coś w tym kierunku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2332">yaiba83</a> — 12 paź 2015, o 17:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Artur_26]]></name></author>
<updated>2015-10-12T15:59:58+01:00</updated>
<published>2015-10-12T15:59:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142209#p142209</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142209#p142209"/>
<title type="html"><![CDATA[zmienna statyczna powoduje zwiększenie ilości kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13201&amp;p=142209#p142209"><![CDATA[
Witam,<br />pisząc pewną funkcję do obsługi klawiaturki składającej się z 8 przycisków korzystałem ze zmiennych statycznych.<br />W związku z ich użyciem zauważyłem ciekawą rzecz: <br />  - gdy zadeklarowałem zmienną &quot;static&quot;, po kompilacji kod programu zwiększył swoją objętość o 30 bajtów oraz dodaje 2 bajty w RAM.<br />Zauważyłem to dzięki Eclipse Gadget, rewelacyjna sprawa':)))<br /><br />oto ta funkcja:<br />[syntax=c]uint8_t Klawiatura_8p(void)<br />{<br />static uint8_t  Temp=0xFF;    //chodzi o tą zmienną, bez static jest o 30 bajtów mniej <br />static uint8_t  Licz_Klaw=0;   // a tu ciekawiej, bo gdy daję static, zmienia ilość kodu o 64 bajty<br /><br />KLAW_Dane_DIR = 0x00;                    //ustawienie kierunku portu jako wejście<br />KLAW_Dane = 0xFF;                          //podciągnięcie całego portu do Vcc<br />KLAW_Ster &amp;= ~(1&lt;&lt;KL);                  //ustawienie pinu KL na 0<br /><br />if (!Licz_Klaw)                                 //jeśli licznik = 0 to ma sprawdzić stan klawiszy                     <br />  {<br />     if (KLAW_PIN!=0xFF)                   //jeśli klawisze naciśnięte<br />     Licz_Klaw=OPOZNIENIE_DRGAN;    //to ustaw licznik do ominięcia stanu przejściowego w<br />  }<br />else                                              //jeśli licznik różny od 0 <br />  {<br />     --Licz_Klaw;                             //do dekrementuj licznik <br />     if (!Licz_Klaw)                           //i sprawdź czy licznik czy = 0<br />      {<br /> Temp = KLAW_PIN;                //jeśli licznik =0 to odczytaj stan klawiszy<br />      }<br />  }<br /><br />KLAW_Ster |= (1&lt;&lt;KL);                  //ustaw wyjście KL na 1 (                 <br />KLAW_Dane_DIR = 0xFF;                 //zmień kierunek portu na wyjściowy<br /><br />return Temp;                                 //zwróć <br />}[/syntax]<br /><br />pytanie moje brzmi : co kompilator dodaje do kodu, że deklaracja zmiennej statycznej powoduje jego zwiększenie?<br /><br />Z góry dziękuję za odpowiedź:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4513">Artur_26</a> — 12 paź 2015, o 15:59</p><hr />
]]></content>
</entry>
</feed>