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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-02T07:59:46+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1492&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-09-02T07:59:46+01:00</updated>
<published>2012-09-02T07:59:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1492&amp;p=14248#p14248</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1492&amp;p=14248#p14248"/>
<title type="html"><![CDATA[Re: M32 brak priorytetów/obsługa przerwań/ewentualne zakłóce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1492&amp;p=14248#p14248"><![CDATA[
Zatem jeśli stosuje się dobry styl programowania to nie ma potrzeby korzystać z ISR_NO_BLOCK. Podam przykład.<br />Dobrze:<br />[syntax=c]ISR(INT0_vect) //przerwanie od RTC, co sekundę<br />{<br />   rtcFlag = 1;<br />} //czy trwa to tak długo, że trzeba tę operację przerywać innym przerwaniem<br />//w pętli głównej odczyt rejestrów RTC[/syntax]<br />Źle:<br />[syntax=c]ISR(INT0_vect) //przerwanie od RTC, co sekundę<br />{<br />   TWI_read_buf( PCF8583_ADDR, 0x01, 6, bufor ); // zależy od szybkości I2C i trwa stosunkowo długo<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 2 wrz 2012, o 07:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-02T07:37:34+01:00</updated>
<published>2012-09-02T07:37:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1492&amp;p=14246#p14246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1492&amp;p=14246#p14246"/>
<title type="html"><![CDATA[Re: M32 brak priorytetów/obsługa przerwań/ewentualne zakłóce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1492&amp;p=14246#p14246"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Ok, rozumiem. Tę opcję noblock zmieniamy w kodzie programu, czy w opcjach kompilatora?<br /></div><br /><br /><strong>Oj, oj , oj ....... oj</strong><br /><br />Tylko tyle podpowiem na temat sugestii zmiany opcji noblock, jak opisał kolega wyżej. Rzeczywiście taka istnieje i robi się ją np tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ISR( INT0_vect, ISR_NO_BLOCK ) {<br /><br />}</div><br /><br />ale jeśli kolega chce w miarę szybko poradzić sobie z problemem opisanym wyżej, to niech na długi czas zapomni w ogóle o istnieniu tej opcji. Dlaczego ? Dlatego, że nawet zaawansowane osoby bardzo ale to bardzo rzadko z niej korzystają. A dlaczego ? A dlatego, że odblokowanie przerwań wewnątrz innych przerwań to pogoń za kłopotami jak po równi pochyłej i w postępie geometrycznym - jeśli do końca nie rozumiemy o co tu chodzi i jak to działa. Dlatego jak ktoś już wie - to także z ogromną dozą ostrożności z tego korzysta ....<br /><br />w czym rzecz ....<br /><br />używanie tej opcji podczas przerwań nie może a BĘDZIE się wiązało z o wiele większym zużyciem stosu w trakcie działania programu. Pomyśl sobie, KAŻDE wejście w przerwanie - to poza odłożeniem na stos wykonanie całego PROLOGU, którego programista początkujący w C w ogóle nie widzi i nie zdaje sobie z niego sprawy.... <br /><br />ok co to jest PROLOG ale też EPILOG jeśli chodzi o makra ISR() ????<br /><br />[syntax=asm]ISR( vector ) {<br /><br />// prolog asm<br />push R16<br />in R16,SREG<br />push R16<br />push R0<br />push R17<br />push R18<br />push R19<br />...<br />//-------------------------<br /><br /><br />// tu dopiero jest kod makra pisany w C przez programistę a tego powyżej<br />// i poniżej nawet nie widzi albo nie wie często o tym<br /><br />//------------------------------<br />// epilog<br />...<br />pop R19<br />pop R18<br />pop R17<br />pop R16<br />out SREG, R16<br />pop R16<br /><br />}[/syntax]<br /><br />tymczasem to jest dodatkowy i czasem spory kod w asemblerze, który ma za zadanie na początku odłożyć na stos wszystkie używane rejestry a przy wyjściu je odłożyć .... oczywiście to tylko przykładowy prolog i eplilog, ale mogą one być znacznie dłuższe ....<br /><br />to już chyba zaczyna coś ci mówić ??? hmmm???<br /><br />jeśli teraz po wejściu w takie przerwanie i zwiększenie stosu o wszystko co jest w prologu, odblokujesz przerwania i wykona się kolejne - to znowu kolejny prolog - a niech się wykona jeszcze kolejne i jeszcze kolejne .... eeeh szkoda mówić ... jeśli i tego aspektu nie przewidzisz - ale nie będę tu o nim teraz pisał ..... to na końcu będzie to mniej więcej tak jakby dać dziecku do zabawy żyletki. Nie chcę broń boże mówić że jesteś dzieckiem i mam nadzieję że tak nie odbierasz moich słów, ponieważ ja czuję się podobnie gdy przychodzi mi czasem pomysł aby skorzystać z ISR_NO_BLOCK <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... najczęściej, w takich przypadkach zaczynam od nowa myśleć nad algorytmem programu i na końcu okazuje się że to jeszcze nie ten czas aby trzeba było z tego skorzystać<br /><br />SŁOWO NA NIEDZIELĘ:<br /><br />zastosowanie ISR_NO_BLOCK - w takim kodzie o jakim ty napisałeś nawet tylko teoretycznie w pierwszym poście - to po prostu (jak dla mnie byłoby CRAZY) .... zapewniam cię, że nie ma NAJMNIEJSZEJ potrzeby i nigdy nie dojdzie do sytuacji żeby coś ci się nie udało w nim bez użycia tej opcji.... a zresztą - spójrz sobie na to:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2011/09/fakty-i-mity-nt-rzekomych-problemow-z.html" >http://mirekk36.blogspot.com/2011/09/fa ... mow-z.html</a><!-- m --><br /><br />albo kurczę na<br /><br />rozdział &quot;wstęp do systemów czasu rzeczywistego&quot; który masz przecież w książce. ZOBACZ ile tam rzeczy jest naraz robionych - i pokaż mi chociaż jedno przerwanie z ISR_NO_BLOCK .... mam nadzieję, że dobrze to wyjaśniłem ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 wrz 2012, o 07:37</p><hr />
]]></content>
</entry>
</feed>