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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-17T21:31:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10747&amp;mode</id>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2015-02-22T16:15:14+01:00</updated>
<published>2015-02-22T16:15:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120376#p120376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120376#p120376"/>
<title type="html"><![CDATA[Re: Zmienne globalne a &quot;widoczność&quot; w funkcjach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120376#p120376"><![CDATA[
<div class="quotetitle">mokrowski napisał(a):</div><div class="quotecontent"><br />xentis troszkę ,,zakałapućkałeś&quot; się z tymi spekulacjami o rejestrach, zmiennych globalnych i innych takich ,,niskopoziomowych bebechach&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /></div><br />Ano wiem że trochę się zakręciłem jak słoik... Ale po ponownym przestudiowaniu kart BB i przeczytaniu Twojego łopatologicznego opisu to mi się rozjaśniło  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  <br />Dzięki za pomoc <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=6265">xentis</a> — 22 lut 2015, o 16:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2015-02-21T12:08:19+01:00</updated>
<published>2015-02-21T12:08:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120185#p120185</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120185#p120185"/>
<title type="html"><![CDATA[Re: Zmienne globalne a &quot;widoczność&quot; w funkcjach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120185#p120185"><![CDATA[
Panie Mirku ja nie twierdzę że w podstawach języka C kłamią. Zawsze powtarzam że mądrzejsi nad tym myśleli i skoro wymyślili to tak jest. Niestety mi jest czasem to ciężko ogarnąć.<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />jak może kolejna funkcja działać na jakichś tam rejestrach no pomyśl chwilę ? .... Mówię ci poczytaj rozdział o tym co się dzieje podczas gdy funkcja rozpoczyna swoje życie i gdy je kończy i nie dopowiadaj sobie sam historii o rejestrach które po niej zostają bo przez to sam sobie w głowie mętlik wprowadzasz.<br /></div><br />No właśnie chodzi o to że nie zostają bo funkcja jest uruchamiana z funkcji - i właśnie chodzi o ten szczegół jak wygląda wtedy pobieranie zmiennych gdy funkcja uruchamia drugą funkcję, a skoro ta pierwsza ma wartości zmiennych globalnych w rejestrach i je już zmieniła to druga funkcja uruchomiona z tej pierwszej zobaczy zmiany poczynione z poziomu pierwszej funkcji (która przecież jeszcze żyje i nie zaktualizowała w ramie zmiennych - no chyba że jest inaczej) czy pobierze zmienne z RAMU niezmienione przez funkcję pierwszą?<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />po co w ogóle im dajesz volatile ?<br /></div><br />Skoro funkcja nie widzi zmian w zmiennych globalnych poczynionych przez inną funkcję to pomyślałem że może jest tak jak przerwaniach - zmiany niejawne....<br /><br />Co do funkcji to rozdział ten czytałem kilku krotnie i nie wiem czy dobrze to rozumiem.<br />Po starcie funkcji main zmienne globalne trafiają do rejestrów. Jeśli z poziomu funkcji main uruchomiona zostaje kolejna funkcja to jakie wartości widzi te z pamięci RAM czy te umieszczone w rejestrach dla main?<br />Bo fakt że po zakończeniu funkcji zmienne w RAM są aktualizowane wartościami z rejestrów to rozumiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 21 lut 2015, o 12:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-02-21T11:56:25+01:00</updated>
<published>2015-02-21T11:56:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120181#p120181</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120181#p120181"/>
<title type="html"><![CDATA[Re: Zmienne globalne a &quot;widoczność&quot; w funkcjach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120181#p120181"><![CDATA[
<div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />W BB jest napisane że po uruchomieniu funkcji main zmienne globalne umieszczane są w rejestrach, i teraz jeśli zostanie wywołana kolejna funkcja to operuje ona na tych samych rejestrach<br /></div><br />No to jeszcze doczytaj w książce jak działają funkcje, bo tu masz problem .... jak może kolejna funkcja działać na jakichś tam rejestrach no pomyśl chwilę ? .... Mówię ci poczytaj rozdział o tym co się dzieje podczas gdy funkcja rozpoczyna swoje życie i gdy je kończy i nie dopowiadaj sobie sam historii o rejestrach które po niej zostają bo przez to sam sobie w głowie mętlik wprowadzasz. Funkcja kończy życie a zmienna globalna pozostaje zmienną globalną w pamięci RAM i tego się trzymaj ... więc gdy przyjdzie kolejnej funkcji działać to także dobierze się do tej zmiennej globalnej w RAM ... a fakt że jej wartości muszą przejść przez jakieś tam rejestry jest mało istotny bo przy wyjściu z funkcji zmieniona wartość wróci znowu do zmiennej w RAM. Nie ma więc w tym jak widzisz nic tajemniczego ani dziwnego.....<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />no właśnie z działania powyższego programu nie do końca tak jest.<br /></div><br />Wiesz ... jeśli ty uważasz że jak napiszesz program i on źle działa to oznacza że nieprawdą jest to co piszą po podstawach języka C no to hmmm dziwne podejście. Ja na twoim miejscu zadałbym sobie pytanie - &quot;co ja robię źle w kodzie ... że mi źle działa? że zmienne nie są widoczne tak jak należy ? tak jak mowa o tym w podstawach C?&quot; ... rozumiesz ? .... to ułatwi ci naukę języka C<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />Z kolei użycie volatile dla tablic kodw[] i kodt[] wywala warningi<br /></div><br /><br />a co to ma oznaczać &quot;z kolej&quot; ???  z kolej ? czyli w związku z czym ?<br /><br />po co w ogóle im dajesz volatile ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lut 2015, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2015-03-17T21:31:50+01:00</updated>
<published>2015-02-21T11:44:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120180#p120180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120180#p120180"/>
<title type="html"><![CDATA[Re: Zmienne globalne a &quot;widoczność&quot; w funkcjach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120180#p120180"><![CDATA[
W BB jest wszystko opisane to fakt i do wczoraj myślałem że to rozumiem...<br />Napisałem programik coś na kształt zamka szyfrowego z możliwością zmiany kodu oraz resetu:<br /><br />Tak wiem zamiast obrzydliwych delayów powinienem użyć timera - ubiegnę i wyjaśniam: zamierzam takie posunięcie ale po ukończeniu powyższego programu - tak dla porównania gabarytów kodu  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /> <br />Procesor Atmega32 na zestawie ATB taktowany z wewnętrznego oscylatora RC 1 MHz - (docelowo będzie to na attiny zasilane bateryjnie stąd masakryczne 1MHz)<br /><br />No więc jak to ma działać:<br />sprzęt bardzo ubogi 1 dioda świecąca, jeden microswitch, serwo (w programie zamiast serwa na razie jest druga dioda led), na chwilę obecną podpięta biblioteka do obsługi multipleksowania LED (wzorowana na tej z BB) do celowo zniknie z projektu.<br />Po uruchomieniu led 1 zamiga po czym program będzie tkwił w pętli do czasu naciśnięcia przycisku (docelowo tu będzie usypianie procka a przycisk w przerwaniu)<br />Po naciśnięciu przycisku led 2 razy mrugnie po czym zaczyna powoli mrugać - każde mrugnięcie to inkrementacja wartości o 1 (zaczynając od zera - pierwsze mrugnięcie, 1  - drugie itd) po właściwej liczbie mrugnięć naciskamy ms , led 2 razy mrugnie i zaczyna od nowa - i tak dla 4 cyfr. Kod wskakuje do tablicy kodw[]. Kod porównywany jest z kodem w eeprom i jeśli identyczny wykonywana jest akcja czyli rusza serwo. No chyba że chcemy zmienić kod to po ostatniej cyfrze przytrzymujemy przycisk ok 5 sekund - wtedy rozpoczyna się procedura zmiany kodu czyli wprowadzamy cztery cyfry nowego po czym ponownie cztery cyfry dla sprawdzenia poprawności. Po operacji zmiany kodu akcja nie jest wykonywana.<br />Ostatnia opcja to reset kodu. trzymając przycisk robimy reset procesora (albo off -&gt; on urządzenia) trzymamy 10 sekund aż led 1 zamiga 2 razy, następnie trzeba jednorazowo wprowadzić kod fabryczny czyli cztery jedynki i przepisanie z pamięci programu do ramu, a następnie z ramu do eepromu.<br /><br />I teraz problemy: procedura pierwsza do wywołania akcji działa, druga do zmiany kodu też działa ale np z poziomu funkcji main wartość wprowadzona nie jest widziana - jak podpiąłem funkcje sprawdzającą aktualne wpisy w tablicy kodw[] to nadal są zera pomimo użycia funkcji pobierz_kod a przecież ta tablica nie jest później zerowana... chyba że o czymś nie wiem.<br />Procedura resetu nie działa - po wywołaniu przez funkcję resetu funkcji pobierz_kod to po jej działaniu tablica kodw[] nadal zawiera same zera.<br /><br />Stąd moje pytanie o widoczność zmiennych. W BB jest napisane że po uruchomieniu funkcji main zmienne globalne umieszczane są w rejestrach, i teraz jeśli zostanie wywołana kolejna funkcja to operuje ona na tych samych  rejestrach, czy bezpośrednio na ramie czy może znowu z ramu zmienne pakowane są do innych rejestrów...?<br /><div class="quotetitle">squeez napisał(a):</div><div class="quotecontent"><br />Zmienne globalne jak sama nazwa wskazuje są globalnie widoczne, wszędzie w całym programie.<br /></div><br />no właśnie z działania powyższego programu nie do końca tak jest.<br /><br />Z kolei użycie volatile dla tablic kodw[] i kodt[] wywala warningi przy operacjach kopiowania pamięci eeprom i progmem.<br /><br />Zastanawiam się czy tablic nie powinno się przekazywać do funkcji jako argument... Tylko czemu to nie działa w takiej formie skoro to zmienne globalne!?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 21 lut 2015, o 11:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2015-02-21T00:59:10+01:00</updated>
<published>2015-02-21T00:59:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120154#p120154</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120154#p120154"/>
<title type="html"><![CDATA[Re: Zmienne globalne a &quot;widoczność&quot; w funkcjach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120154#p120154"><![CDATA[
W BB jest to bardzo ładnie i zrozumiale napisane ale jakby Ci było mało to spróbuj jeszcze zaglądnać tu<br /><!-- m --><a class="postlink" href="http://www.algorytm.edu.pl/wstp-do-c/typy-zmiennych.html" >http://www.algorytm.edu.pl/wstp-do-c/ty ... nnych.html</a><!-- m --><br /><!-- m --><a class="postlink" href="http://pl.wikibooks.org/wiki/C/Zmienne" >http://pl.wikibooks.org/wiki/C/Zmienne</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 21 lut 2015, o 00:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2015-02-21T00:27:52+01:00</updated>
<published>2015-02-21T00:27:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120151#p120151</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120151#p120151"/>
<title type="html"><![CDATA[Zmienne globalne a &quot;widoczność&quot; w funkcjach]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10747&amp;p=120151#p120151"><![CDATA[
Witam<br /><br />Jestem w trakcie nauki (czytania BB). W ramach ćwiczeń napisałem program ale jego działanie odbiega od oczekiwań. I tu pytanie:<br />Jak to jest ze zmiennymi globalnymi w funkcjach? Jeśli dostęp do tych zmiennych będzie w różnych funkcjach:<br />(funkcje operują same na zmiennych globalnych, zmienne nie są im przekazywane)<br />1 - bezpośrednio w main<br />2 - funkcji wywołanej z głównej pętli programu<br />3 - funkcji wywołanej z funkcji j.w.<br />4 - i kolejnej funkcji wywołanej z funkcji z p.3<br />Wiem że trochę zamieszałem i niechybnie zmierzam do niekontrolowanego rozrostu stosu, ale to w celach dydaktycznych...<br />Czy aby właściwie była widziana wartość tych zmiennych to trzeba im nadać volatile tak jak przy przerwaniach?<br />Bo z tego co ustaliłem czasem np zmienna zmodyfikowane w funkcji jak w p.2 jest widoczna w funkcji jak w p.3; z kolei innym razem już nie  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /> <br /><br />Natomiast drugie pytanie odnośnie volatile: czy na zmiennych opatrzonych tą właściwością można operować w funkcjach typu eeprom_write_block() bo w takim wypadku otrzymuję warningi:<br />../main.c:190:7: warning: passing argument 1 of '__eewr_block_m32a' discards 'volatile' qualifier from pointer target type [enabled by default]<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 21 lut 2015, o 00:27</p><hr />
]]></content>
</entry>
</feed>