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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-02-01T01:21:40+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=19116&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-02-01T01:21:40+01:00</updated>
<published>2018-02-01T01:21:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=203062#p203062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=203062#p203062"/>
<title type="html"><![CDATA[Re: sens zezwolenia  sei()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=203062#p203062"><![CDATA[
<div class="quotetitle">nowy_stary napisał(a):</div><div class="quotecontent"><br />Czy może jedno z drugim nie ma nic wspólnego?<br /></div><br />Nie ma nic wspólnego - piszesz o jakichś dziwnych rzeczach .... <br /><br />jakby były jakieś tajne mechanizmy w ASM i w C które coś tam sobie robią ... <br /><br />Panie - ani C ani ASM nic same nie robią ... to TY jako programista robisz<br /><br />Jeśli programujesz w asemblerze to od ciebie zależy kiedy włączysz globalne przerwania - tak samo w C ... rozumiesz ?<br /><br />Można tak napisać jakiś tam program, że np nigdy nie będzie trzeba włączyć globalnych przerwań <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i co? myślisz że jakiś tajny agent w ASM albo w C ... sam sobie coś tam włączy ?<br /><br />Trzeba najpierw zrozumieć co to są przerwania i jak działają - zanim się zacznie domyślać takich dziwnych rzeczy, że coś tam sobie robi C a coś innego ASM <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> — 1 lut 2018, o 01:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nowy_stary]]></name></author>
<updated>2018-01-31T17:05:53+01:00</updated>
<published>2018-01-31T17:05:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=203047#p203047</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=203047#p203047"/>
<title type="html"><![CDATA[Re: sens zezwolenia  sei()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=203047#p203047"><![CDATA[
Obserwując w nocie info (rozpisane instrukcje asemblera) dotyczące przerwania jest tak:<br /><br />$000 rjmp RESET ; Reset Handler<br />$001 rjmp EXT_INT0 ; IRQ0 Handler<br />...<br />... // rjmp dla pozostałych przerwań<br />...<br />$011 rjmp TWSI ; Two-wire Serial Interface Handler<br />$012 rjmp SPM_RDY ; Store Program Memory Ready Handler<br />;<br />$013 RESET: ldi r16,high(RAMEND); Main program start<br />$014 out SPH,r16 ; Set Stack Pointer to top of RAM<br />$015 ldi r16,low(RAMEND)<br />$016 out SPL,r16<br />$017 sei ; Enable interrupts<br />$018 &lt;instr&gt; xxx<br />... ... ...<br /> <br />I teraz tak. Pisząc program w C, aby można było korzystać z przerwań trzeba umieścić przed np. pętlą główną instrukcję:<br /><br />sei(); // uruchomienie systemu przerwań<br /><br />a ja widzę, że w asemblerze w linii $017 jest:<br /><br />$017 sei ; Enable interrupts - czyli asembler domyślnie uruchamia przerwania<br /><br />Czy to znaczy, że asembler automatycznie uaktywnia przerwania po restarcie, a C nie. Czy może jedno z drugim nie ma nic wspólnego? Czy ja o czymś nie wiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18726">nowy_stary</a> — 31 sty 2018, o 17:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-09-03T12:01:31+01:00</updated>
<published>2017-09-03T12:01:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194411#p194411</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194411#p194411"/>
<title type="html"><![CDATA[Re: sens zezwolenia  sei()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194411#p194411"><![CDATA[
<div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent"><br />1. co to jest sei () // odpowiedz zezwolenie na przerwanie globalne mnie nie satysfakcjonuje<br /></div><br /><br />wiesz dlaczego cię nie przekonuje ? ja wiem - bo nie rozumiesz JAK DZIAŁA system przerwań w procku jeszcze - a od tego warto byłoby zacząć, aby zrozumieć<br /><br />zamiast więc pisać że ciebie coś nie satysfakcjonuje - to weź że lepiej obejrzyj poradnik:<br /><br /><br />poświęć troszkę czasu - tu w pierwszej połowie masz to SUPER wyjaśnione - dla początkującego - poradnik jako uzupełnienie do Blueboka - a widzę od jakiegoś czasu, że raczej nie przeglądasz za często bloga<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 11 minutach ]</span></strong><br /><br /><div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent"><br />2. dlaczego jest to zezwolenie na przerwanie globalne a nie np. lokalne<br /></div><br /><br />Bo nie ma czegoś takiego jak zezwolenia &quot;lokalne&quot; - skąd taki pomysł ? mieszasz pojęcia programistyczne np: zmienne lokalne i globalne. A to nie ma nic wspólnego.<br /><br />zezwolenie globalne sei() .... bo to jest tak, że wcześniej dokonujesz odblokowania poszczególnych innych przerwań np od UART'a od jakiegoś Timera, od ADC itp itd<br /><br />ale system przerwań w procku wciąż nie działa - DOPIERO gdy przed &quot;startem&quot; programu czyli przed pętlą główną (a masz o tym napisane w Bluebooku - co to jest start program czyli pętla główna i sekcja inicjalizacji przed nią - i globalne zezwolenie na przerwania)<br /><br />a więc przed pętlą główną - gdy wiesz, że już odblokowałeś za pomocą bitów w różnych rejestrach konfiguracyjnych przerwania od różnych modułów - to dopiero teraz gdy konie stoją w bramkach <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> (jak na torze) i czekają tylko na START - właśnie ten start to SEI() bramki się otwierają i konie zapierniczają <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> czyli od tego momentu każde przerwanie zaczyna działać w systemie....<br /><br />A ty co? a ty chcesz takie globalne zezwolenie SEI() odpalać miliony razy w pętli głównej ? a po jaki gwint ?<br /><br />tak samo na torze wyścigowym, jak gościu strzeli z pistoletu, konie wybiegną z bramek to po jaki gwint miałby on dalej sobie strzelać tym pistoletem? coś to da? skoro konie i tak już biegną?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 wrz 2017, o 12:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-09-03T11:13:14+01:00</updated>
<published>2017-09-03T11:13:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194410#p194410</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194410#p194410"/>
<title type="html"><![CDATA[Re: sens zezwolenia  sei()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194410#p194410"><![CDATA[
xentis dziękuje może wrócę do tego wątku gdy będe robił więcej ćwiczeń praktycznych wtedy też w tym wątku o coś się spytam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 3 wrz 2017, o 11:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-09-03T10:13:57+01:00</updated>
<published>2017-09-03T10:13:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194409#p194409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194409#p194409"/>
<title type="html"><![CDATA[Re: sens zezwolenia  sei()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194409#p194409"><![CDATA[
<div class="quotetitle">procek87 napisał(a):</div><div class="quotecontent"><br />2. dlaczego jest to zezwolenie na przerwanie globalne a nie np. lokalne<br /></div>bo lakalne zezwolenia są w konfiguracji poszczególnych peryferiów (przerwanie od licznika, od ADC, od UART itd itp) a sei() włączą zezwolenie na wykonanie dowolnego przerwania. Jeśli włączysz przerwanie np od przepełnienia licznika, to bez sei() to przerwanie się nie będzie wykonywać bo brak zezwolenia globalnego. Globalne zezwolenie jest pomocne bo gdy mamy fragment programu gdzie bardzo istotny jest czas wykonywania (który przecież może zostać zaburzony przez wykonywanie procedur obsługi przerwań) to na czas wykonywania tego fragmentu kodu możemy wyłączyć zezwolenie globalne cli(), a po wykonaniu newralgicznego kodu ponownie włączyć sei(). W ten sposób we wszystkich peryferiach które używają przerwań nie trzeba ich wyłączać, a wystarczy wyłączyć globalnie zezwolenie na przerwania, a później włączyć.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />2. czemu akurat przed while się go stosuje ?<br /></div> ponieważ w ciele funkcji main zazwyczaj są instrukcje inicjujące poszczególne peryferia i włączenie globalnego zezwolenia na przerwanie za wcześnie spowodowałoby że różne przerwania mogły by zostać już wywołane przed zainicjowaniem wszystkiego co potrzeba. Nie jest to wymóg ale raczej dobry nawyk.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 3 wrz 2017, o 10:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[procek87]]></name></author>
<updated>2017-09-03T10:52:03+01:00</updated>
<published>2017-09-03T09:46:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194408#p194408</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194408#p194408"/>
<title type="html"><![CDATA[sens zezwolenia  sei()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19116&amp;p=194408#p194408"><![CDATA[
Wyjaśnijcie proszę początkującemu po co pisać sei() przed while za każdym razem gdy chcemy by nasz procek korzystał z przerwania , wszędzie jest napisane że masz pisać , nie pisze czemu przed while ,a nie np . w pętli , masz pisać i już  mi jednak nie daje to spokoju i dociekam głębiej dlatego:<br /><br />1. co to jest sei ()  // odpowiedz zezwolenie na przerwanie globalne mnie nie satysfakcjonuje <br />2. dlaczego jest to zezwolenie na przerwanie globalne a nie np. lokalne<br />3. czemu akurat przed while się go stosuje ?<br /><br />fajnie gdyby ktoś dysponował rysunkami objaśniającymi bo ciężko mi to zrozumieć .<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17263">procek87</a> — 3 wrz 2017, o 09:46</p><hr />
]]></content>
</entry>
</feed>