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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-20T17:25:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=15626&amp;mode</id>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-06-20T17:25:50+01:00</updated>
<published>2016-06-20T17:25:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162651#p162651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162651#p162651"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162651#p162651"><![CDATA[
Napisałem przecież, że się nie obrażam, i to jest prawdą.<br /><br />Jeśli chodzi o resztę mojej wypowiedzi, to nie wszystko tak do końca pisałem całkiem poważnie <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=14165">andrews</a> — 20 cze 2016, o 17:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-20T17:11:17+01:00</updated>
<published>2016-06-20T17:11:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162650#p162650</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162650#p162650"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162650#p162650"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />PS. ...i tak na wszelki wypadek: ja się nie obrażam, za stary na to jestem i już mi się nie chce<br /></div><br />Ja też już chyba jestem za stary na takie obrażanie się - i myślę, że znowu nieco omylnie zrozumiałeś moje słowa <br /><br /><div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Stwierdzenie &quot;nie o to chodzi&quot; to zarzut, że moje wytłumaczenie było nieprawidłowe.<br /></div><br /><br />Może trochę zbyt skrótowo napisałem &quot;nie o to chodzi&quot; ale kompletnie nie miałem na myśli, że nie masz racji i dlatego wyżej to wyjaśniałem precyzyjnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> co miałem na myśli ... a jeśli źle mnie zrozumiałeś to bardzo cię przepraszam, bo kompletnie nie chodziło mi o sugerowanie, że nie masz racji tylko ja inaczej podszedłem do wyjaśnień. Szkoda już nawet dalej mielić ten temat bo teraz to autor dostał i uproszczone wyjaśnienie a na dodatek jeszcze mega precyzyjne bo w asemblerze prawie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />No ale skoro nie tłumaczę wystarczająco obrazowo (bo na pewno nie błędnie), to postaram się w przyszłości powstrzymać od odpowiedzi<br /></div><br />Proszę cię ... proszę - no mam nadzieję, że teraz cię przekonałem co miałem na myśli ok ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 cze 2016, o 17:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-06-20T16:49:20+01:00</updated>
<published>2016-06-20T16:49:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162649#p162649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162649#p162649"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162649#p162649"><![CDATA[
Różnica 4 czy też 6 bajtów wynika z tego, że kompilator wygenerował kod, który musi zrealizować przypisanie wartości do zmiennej wpisane w funkcji main(). Tak też wytłumaczyłem autorowi pytania zgodnie z prawdą.<br /><br />Stwierdzenie &quot;nie o to chodzi&quot; to zarzut, że moje wytłumaczenie było nieprawidłowe.<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A czepiasz się słówek..<br /></div><br />Być może, ale niektóre słówka są bardzo istotne <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />bo ty opowiadasz komuś kto zaczyna, i pewnie jeszcze nie zna asemblera, czyli np instrukcji STS, LDI<br /></div><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />chcesz ze mną o asemblerze porozmawiać czy pomóc autorowi w tak podstawowym pytaniu ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br />Nie. Chciałem wytłumaczyć autorowi, skąd dokładnie wzięła się różnica w zajętości flash, o której pisał i miałem wrażenie, że zrobiłem to dobrze <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Zakładam, że jeśli będzie dociekliwy (a odnoszę wrażenie, że jest) i czegoś nie zrozumie, to może zawsze zadać dodatkowe pytanie lub poszukać informacji gdzie indziej. Może się przy okazji czegoś dowie, nauczy... Poza tym miałem nadzieję, że czytają to forum też mniej początkujący i lepiej znający temat, których zainteresuje to, co napisałem.<br /><br />No ale skoro nie tłumaczę wystarczająco obrazowo (bo na pewno nie błędnie), to postaram się w przyszłości powstrzymać od odpowiedzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam<br /><br />PS. ...i tak na wszelki wypadek: ja się nie obrażam, za stary na to jestem i już mi się nie chce <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=14165">andrews</a> — 20 cze 2016, o 16:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-20T16:07:31+01:00</updated>
<published>2016-06-20T16:07:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162647#p162647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162647#p162647"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162647#p162647"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />A ja wiem na pewno, że o to chodzi.<br /></div><br />A czepiasz się słówek, bo ty opowiadasz komuś kto zaczyna, i pewnie jeszcze nie zna asemblera, czyli np instrukcji STS, LDI i innych tam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a ja wyjaśniam to obrazowo i jedno z drugim się nie kłóci ani ja nie zaprzeczam tobie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... I nawet nie zamierzam na takim etapie wyjaśnień wgłębiać się w plik *.lss bo jest to zupełnie niepotrzebne - warto jedynie zrozumieć o co chodzi w ogólnych regułach działania kompilatora - a nie w tym czy tam jest STS czy LDI czy co innego <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: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">andrews  napisał(a):</div><div class="quotecontent"><br />Ale umieszczenie stałej 1-bajtowej w pamięci flash na pewno nie zajmie 4 czy 6 bajtów.<br /></div><br /><br />jak wyżej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... co to ma za znaczenie ? chcesz ze mną o asemblerze porozmawiać czy pomóc autorowi w tak podstawowym pytaniu ? <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> — 20 cze 2016, o 16:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-06-20T15:29:31+01:00</updated>
<published>2016-06-20T15:29:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162645#p162645</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162645#p162645"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162645#p162645"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Nie o to chodzi  sprawa jest banalnie prosta<br /></div><br />A ja wiem na pewno, że o to chodzi.<br /><br />Różnica 4 bajtów w zajętości flash po dopisaniu w funkcji mian():<br />flaga=0;<br />i 6 bajtów po dopisaniu w funkcji main():<br />flaga=1;<br />o której pisał autor w pierwszym poście, wynikają dokładnie z tego, co napisałem. Można zrobić próbę (zmienna jako volatile, żeby kompilator nie zoptymalizował): skompilować kod z przypisaniami i bez, i sprawdzić w pliku *.lss<br /><br />To, że stałe, które wpisujemy do zmiennych muszą być zapisane we flash to też oczywista sprawa. W tym przypadku akurat stała o wartości 1 przypisywana do zmiennej 'flaga' będzie zawarta w instrukcji LDI, więc nie zajmie jakiegoś dodatkowego miejsca. Niemniej po każdym przypisaniu jest generowany kod, który to przypisanie musi zrealizować, a który też jest zapisywany we flash. <br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Jeśli definiujesz zmienną albo stałą dosłowną w RAM, no to nie ma co się dziwić, że zostanie na to zmarnowany FLASH<br /></div><br />Ale umieszczenie stałej 1-bajtowej w pamięci flash na pewno nie zajmie 4 czy 6 bajtów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 20 cze 2016, o 15:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pawkrol]]></name></author>
<updated>2016-06-20T14:11:47+01:00</updated>
<published>2016-06-20T14:11:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162642#p162642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162642#p162642"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162642#p162642"><![CDATA[
Tak. Bardzo dziękuję za obszerne wytłumaczenie.<br /><br />Wysłano z Mi4c<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4067">pawkrol</a> — 20 cze 2016, o 14:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-20T14:00:37+01:00</updated>
<published>2016-06-20T14:00:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162641#p162641</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162641#p162641"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162641#p162641"><![CDATA[
<div class="quotetitle">pawkrol napisał(a):</div><div class="quotecontent"><br />Wiem, że zmienne globalne inicjowane są zerem. W moim programie zeruję flagę w przerwaniu<br /></div><br />Ta wypowiedź pokazuje że nie wiesz do końca co to znaczy, że zmienne globalne inicjalizowane są zerem ... więc doprecyzuję <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />KAŻDA zmienna globalna - zanim odpali się główna funkcja programu main() ... jest ZEROWANA przez program inicjalizacyjny i nie ma to NIC WSPÓLNEGO z tym, że ty zerujesz czy tam jakkolwiek ustawiasz tę zmienną w przerwaniu, czy poza przerwaniem.... to nie istotne.... Z punktu widzenia programu, który piszesz to DWIE CAŁKIEM inne operacje, bo nad zerowaniem zmiennych globalnych nie masz kontroli - ona ZAWSZE się odbędzie. A to co ty robisz ze zmienną gdzieś w swoim kodzie - nie ważne gdzie to jak mówiłem CAŁKIEM inna rzecz i nie ważne czy ją zerujesz czy co tam do niej zapisujesz <br /><br />mam nadzieję, że teraz jaśniej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 cze 2016, o 14:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pawkrol]]></name></author>
<updated>2016-06-20T13:50:35+01:00</updated>
<published>2016-06-20T13:50:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162639#p162639</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162639#p162639"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162639#p162639"><![CDATA[
Co do zerowania.<br />Wiem, że zmienne globalne inicjowane są zerem. W moim programie zeruję flagę w przerwaniu, po uprzednim przypisaniu jej wartości 1 w pętli głównej.<br /><br />Dziękuje jednak za wyjaśnienie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4067">pawkrol</a> — 20 cze 2016, o 13:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-20T12:57:32+01:00</updated>
<published>2016-06-20T12:57:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162637#p162637</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162637#p162637"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162637#p162637"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Użycie zmiennej musi powodować zajęcie pamięci flash, bo tam właśnie są zapisane operacje, które ma wykonać mikrokontroler. W tym przypadku będzie to prawdopodobnie instrukcja STS kopiująca zawartość rejestru do odpowiedniej komórki pamięci. Zajmuje ona dwa słowa 16-bitowe, czyli 4 bajty.<br /></div><br /><br />Nie o to chodzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> sprawa jest banalnie prosta<br /><br />Jeśli definiujesz zmienną albo stałą dosłowną w RAM, no to nie ma co się dziwić, że zostanie na to zmarnowany FLASH <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Bo jak myślicie - skąd się później ma wziąć ta wartość w zmiennej ? NO MUSI być gdzieś przechowana w pamięci FLASH prawda ? i to z tej pamięci w prologu przed funkcją main (w jednej z funkcji inicjalizacyjnych) są przypisywane dane<br /><br />dlatego też początkujący często się dziwią - w takim obrazowym bardziej przykładzie , gdy napiszą sobie<br /><br />[syntax=c]// wyświetlamy z RAM napis na LCD<br />lcd_str( &quot;jakis tekst&quot; );[/syntax]<br /><br />czyli stworzyliśmy właśnie stałą dosłowną a dokładniej mówiąc literał w pamięci RAM &quot;jakis tekst&quot; .... A przecież on się sam nie zalęgnie w pamięci RAM <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .... dlatego kompilator najpierw pakuje taki sam tekst do FLASH aby w prologu przed main - zapisać go do RAM - żeby mógł zadziałać w tej linii programu czyli ?<br /><br /><br />.... czyli MARNUJEMY nie tylko pamięć RAM ale i FLASH<br /><br />wtedy gdy zrobimy to tak<br /><br />[syntax=c]lcd_str_P( PSTR( &quot;jakis tekst&quot; ) );[/syntax]<br /><br />to wyświetlamy ten sam tekst ale już z pamięci FLASH i w ogóle nie tracimy pamięci RAM....<br /><br />Dlatego trzeba zrozumieć - że podobnie jest ze zmiennymi liczbowymi i stałymi dosłownymi bo przykład z góry<br /><br /><br />[syntax=c]int main(void)<br />{<br />flaga = 0;<br />}[/syntax]<br /><br />i pytanie autora pokazuje fakt, że autor na razie KOMPLETNIE nie zdaje sobie sprawy z tego:<br /><br />1. co to są zmienne globalne<br />2. że zmienne globalne inicjowane są ZEREM i nie trzeba ich zerować w programie .... dlaczego ? Ano dlatego, że to zerowanie robione jest tu programowo i pójdzie na to kilka bajtów jak widać<br /><br />3. że przypisanie wartości innej niż ZERO będzie wymagało - umieszczenie tej wartości przecież w pamięci FLASH i jej przypisanie w tej linii stąd jeszcze więcej bajtów tracisz<br /><br />[syntax=c]int main(void)<br />{<br />flaga = 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 cze 2016, o 12:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-06-20T12:20:36+01:00</updated>
<published>2016-06-20T12:20:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162635#p162635</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162635#p162635"/>
<title type="html"><![CDATA[Re: Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162635#p162635"><![CDATA[
Użycie zmiennej musi powodować zajęcie pamięci flash, bo tam właśnie są zapisane operacje, które ma wykonać mikrokontroler. W tym przypadku będzie to prawdopodobnie instrukcja STS kopiująca zawartość rejestru do odpowiedniej komórki pamięci. Zajmuje ona dwa słowa 16-bitowe, czyli 4 bajty.<br /><br />Dlaczego przypisanie niezerowej wartości zajmuje więcej pamięci flash? Otóż kompilator avr-gcc przechowuje (prawie) cały czas wartość zerową w rejestrze R1, więc jeśli przypisujemy zmiennej wartość zerową, ma ją gotową w rejestrze R1. Wystarczy ją przepisać do odpowiedniej komórki pamięci RAM. Kiedy przypisujemy zmiennej wartość różną od zera, musi ona być najpierw wpisana do któregoś z rejestrów, a dopiero później skopiowana do RAM. Stąd jedna instrukcja (słowo 16-bitowe, czyli 2 bajty) więcej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 20 cze 2016, o 12:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pawkrol]]></name></author>
<updated>2016-06-20T11:31:13+01:00</updated>
<published>2016-06-20T11:31:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162633#p162633</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162633#p162633"/>
<title type="html"><![CDATA[Zmienne i zajetość w flash]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15626&amp;p=162633#p162633"><![CDATA[
Czy może mi ktoś wytłumaczyć taką rzecz.<br /><br />Definiuje zmienną np:<br />[syntax=c]uint8_t flaga;[/syntax]<br />Powoduje to zarezerwowanie w pamięci ram 1 bajta. To dla mnie jest jasne i logiczne.<br /><br />Natomiast użycie tej zmiennej w funkcji main powoduje zajęcie 4 bajtów flash. Przynajmniej o tyle zwiększa się program po kompilacji.<br />[syntax=c]int main(void)<br />{<br />flaga = 0;<br />}[/syntax]<br /><br />A w takim przypadku 6 bajtów flash.<br />[syntax=c]int main(void)<br />{<br />flaga = 1;<br />}[/syntax]<br /> <br />Tu właśnie troszkę zgłupiałem.<br />Z góry dziękuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4067">pawkrol</a> — 20 cze 2016, o 11:31</p><hr />
]]></content>
</entry>
</feed>