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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-17T19:35:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3551&amp;mode</id>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-07-17T19:35:30+01:00</updated>
<published>2013-07-17T19:35:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42203#p42203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42203#p42203"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42203#p42203"><![CDATA[
Pomysł wydaje się zakręcony, ale może być fajny i pouczający. Ale w sumie skoro zaczyna działać to leć z tą  fantazją. Kiedyś pisałem program w którym wywoływałem callbacka w który jako argument przekazywałem  callback zwracającą int , który w zależności od tego co zwracał,  rejestrował i wywoływał inny callback. Mogę napisać, teraz, to było zbędne i nie potrzebne, ale zrozumiałem system. Grunt, żeby w swojej fantazji umieć sam sobie ją zrealizowac, bo nikt normalny nie będzie ci pisał co masz żle w proggramie jeśli robisz cos po prostu bezsensu z punktu widzenia osoby, która sie na tym zna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 17 lip 2013, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T13:48:02+01:00</updated>
<published>2013-07-16T13:48:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42064#p42064</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42064#p42064"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42064#p42064"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />No w zielonej masz opisane jak sprawdzać czy nie przepełnia ci się stos, j.w sam testy musisz przeprowadzić.<br />Zresztą też się dziwę, co sie tak boisz tych ifów w przerywaniu.....<br /></div><br />Nie boję się tylko szukam drogi na skróty... A kto drogę skraca... znaczy że szuka. I ja właśnie szukam, bo to jest projekt szkoleniowy a nie produkcyjny. Zresztą te klocki to dla mnie hobby a nie praca.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 13:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-16T11:33:20+01:00</updated>
<published>2013-07-16T11:33:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42049#p42049</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42049#p42049"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42049#p42049"><![CDATA[
Tzn ale nie traktuj mojej wypowiedzi, że chcę cię zbyć - że nic nie można ....<br /><br />ot po prostu podpowiadam ci dobrą praktykę i zagrożenia jaki się wiążą niestety z takim podejściem ....<br /><br />Bo nie ma czary mary jak piszesz że są jakieś sztuczki aby uniknąć odkładania na stosie ... pomyśl każde wywołanie funkcji nawet bez argumentów to już dodatkowe zwiększenie stosu , a z argumentami ??? to chyba nie muszę mówić <br /><br />a do tego pytałeś o __attribute__ ((naked)); ????<br /><br />o nie nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> żeby się tym bawić to już trzeba ZNAĆ ASEMBLERA <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> ... nie ma że boli ... wiesz kiedy możesz sobie dać NAKED jeśli nie znasz ASM ??<br /><br />gdy potrzebujesz sobie np ustawić lub zgasić diodę LED czy tam zmienić stan pinu - bo to skompiluje się do JEDNEJ tylko instrukcji ASM, która w ogóle nie ma wpływu na rejestry znaczników i nie użyte zostaną żadne rejestry - odkładane i pobierane w epilogu i prologu<br /><br />no ale jakbyś do takiego czegoś co tu wymyślasz i to jeszcze z callbackami dał atrybut NAKED, to uwierz mi - nie potestujesz tego za bardzo <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> w ogóle nie potestujesz - bo to nie będzie miało prawa działać <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />inną sytuacją gdzie chciałbyś dać NAKED to wtedy gdy sam CAŁĄ procedurę obsługi przerwania napiszesz sobie w asemblerze i sam zrobisz chcąc nie chcąc prolog i epilog ale po swojemu.<br /><br />Więc teraz mam nadzieję, że lepiej doprecyzowałem to o co mi chodziło w podpowiedziach moich?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lip 2013, o 11:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-07-16T11:30:15+01:00</updated>
<published>2013-07-16T11:30:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42048#p42048</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42048#p42048"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42048#p42048"><![CDATA[
No w zielonej masz opisane jak sprawdzać czy nie przepełnia ci się stos, j.w sam testy musisz przeprowadzić.<br />Zresztą też się dziwę, co sie tak boisz tych ifów w przerywaniu.....<p>Statystyki: Napisane przez Gość — 16 lip 2013, o 11:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T11:24:33+01:00</updated>
<published>2013-07-16T11:24:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42047#p42047</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42047#p42047"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42047#p42047"><![CDATA[
Ja też tylko pytam o zagadnienie możliwości. Na początku zaznaczyłem że projekt jest szkoleniowy. Może trochę przekombinowany ale wiedza, że nie można też jest pewnym rodzajem wiedzy, a jakby można to czemu nie? Co do stosu to właśnie liczyłem na podpowiedź czy jakieś czary z mleka pozwolą uniknąć odkładania niepotrzebnie na stosie prologiem i zdejmowanie epilogiem danych skoro żadne inne przerwanie nie może się w tym czasie uruchomić bo mamy niejawnie cli() przy wejściu do ISR. <br />Dobra. Widzę, że ogólna rekomendacja jest &quot;nie idź tą drogą&quot;, choć brak mi &quot;bo volatile...&quot;, &quot;bo naruszenie stosu...&quot;, &quot;bo coś tam coś tam...&quot;.  Bardziej liczyłem na &quot;możesz tak zrobić ale musisz to.. to.. i jeszcze to..&quot;. <br />Niemniej dzięki za głos w dyskusji. Jak to stwierdził kol. Antystatyczny. Napisz i sprawdź. <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=382">perlon</a> — 16 lip 2013, o 11:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-16T11:03:31+01:00</updated>
<published>2013-07-16T11:03:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42045#p42045</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42045#p42045"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42045#p42045"><![CDATA[
Moim zdaniem, wywoływanie jakichkolwiek funkcji z wewnątrz przerwań - hmm no to może nie nieporozumienie ale ... coś tym jest<br /><br />chociaż wiadomo wszystko zależy od projektu - jednak ja jeśli TYLKO mogę to UNIKAM jak ognia niepotrzebnych wywołań funkcji i kolejnego koszmarnego wtedy obciążenia stosu - można się przejechać.<br /><br />Poza tym skoro mówisz że AŻ TAK ci się skomplikuje procedura obsługi przerwania przez tych kilka IF'ów to już mi coś pachnie że ta procedura jest PRZEŁADOWANA i przesadzona na maxa <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />ale tak na prawdę - przecież nie wiemy co chcesz w niej robić więc ciężko mówić o szczegółach<br /><br />ja tylko zwracam uwagę na zagrożenia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lip 2013, o 11:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T10:37:59+01:00</updated>
<published>2013-07-16T10:37:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42037#p42037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42037#p42037"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42037#p42037"><![CDATA[
Tak właśnie. Coś powyżej już skrobnąłem ale potestować mogę po południu. Nie wiem jak zachowa się taki callback jak go potraktuję naked. Nie mam takiej wiedzy ale w AVR przy braku wywłaszczenia z przerwania nic stosu nie popsuje. Chyba ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 10:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T09:59:49+01:00</updated>
<published>2013-07-16T09:59:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42034#p42034</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42034#p42034"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42034#p42034"><![CDATA[
No tak ale struktura ISR'a mi się jednak komplikuje i jest powieleniem analizy prowadzonej w pętli głównej gdzie warunek1, warunek2... muszą być ustawione. To może lepiej zamiast ustawiać warunki podmieniać CallBacka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 09:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-16T09:56:16+01:00</updated>
<published>2013-07-16T09:56:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42032#p42032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42032#p42032"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42032#p42032"><![CDATA[
można to zrobić - wystarczy podmieniać w locie adres procedury przerwania (wektora) ... no ale to zabawa w asm troszkę ... a na prawdę i tak myślę, że to będzie skórka za wyprawkę takie kombinacje i stracisz na tym więcej niż zyskasz ...<br /><br />samo przełączanie się w przerwaniu można zorganizować bardzo prosto i nie switchem tylko pojedynczymi IF'ami z ELSE'ami .... - SUPER krótka obsługa<br /><br />if( warunek1 ) {<br /><br />} else if( warunek2 ) {<br /><br />} else if( warunek3 ) {<br /><br />} ..... i tak dalej<br /><br />nie ma tu żadnej zbędnej zwłoki która mogłaby ci przeszkodzić a o wiele bardziej logicznie można program napisać bo bez niepotrzebnych tu moim zdaniem kombinacji z podmianą wektorów w locie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 lip 2013, o 09:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T09:56:21+01:00</updated>
<published>2013-07-16T09:49:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42029#p42029</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42029#p42029"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42029#p42029"><![CDATA[
Wprawdzie w pętli głównej pałęta mi się delay ale tylko dla tego, że nie chciałem jeszcze pisać timera programowego do wyświetlania obliczonych średnich. Normalnie delaye u mnie nie występują. Ale czy taka struktura programu nie jest czytelniejsza niż długi makaron w obsłudze przerwania? Program docelowy ma dość rozbudowaną maszynę stanów opartą o analizę wartości w zmiennych typu strukturalnego i dość spore menu. Żeby to zrobić w jednej procedurz ISR musiałbym powielić kontrolę stanów w przerwaniu i dbać o spójność tych kontroli, a tak to przy okazji przebiegu pętli głównej mógłbym sterować jakie usługi świadczy przerwanie. No nic. Jak usiądą przy sprzęcie to to sprawdzę.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Zwróć uwagę, że wystawienie flagi w przerwaniu nie gwarantuje wykonania o jaki mi chodzi czyli o prawidłowe odczytanie rejestru TCNT1. osobną sprawą jest to że takie odczytanie też jest obarczone błędem wykonania wszystkiego przed sekcja1 += TCNT1; kilka us na pewno ucieknie ale to już nie problem. Pewnie przydałoby się takie ICP ale wywołane przez INT0. Tego nie wiem jak zrobić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 09:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T09:37:42+01:00</updated>
<published>2013-07-16T09:32:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42026#p42026</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42026#p42026"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42026#p42026"><![CDATA[
Takie coś mi się naskrobało. Nie mam jak tego sprawdzić na zestawie ale się kompiluje.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />void INT0_pomiar( void );<br />void INT0_sterowanie( void );<br /><br />volatile uint16_t strefa1, strefa2,flagaLCD;<br />volatile void (* CallBackINT0)(void);<br /><br />int main(void){<br /><br />TIMSK |= (1&lt;&lt;OCIE1A);// compare match A timer1<br /><br />// timer1 jako licznik momentu włączenia optotrika<br />TCCR1B |= (1&lt;&lt;CS11);// preskaler 8 licznik bije co 1us<br /><br />// zezwolenie na przerwanie INT0<br />GICR |= (1 &lt;&lt; INT0);<br />// zbocze narastające<br />MCUCR |= (1 &lt;&lt; ISC01) | (1 &lt;&lt; ISC00);<br /><br />strefa1 = 0;<br />strefa2 = 0;<br />flagaLCD = 0;<br /><br />sei();<br />lcd_init();<br /><br />CallBackINT0 = INT0_pomiar;<br />uint8_t licznik = 10;<br />while(licznik){<br />if(flagaLCD){<br />flagaLCD = 0;<br />lcd_cls();<br />lcd_int(strefa1/5);<br />lcd_locate(1,0);<br />lcd_int(strefa2/5);<br />strefa1 = 0;<br />strefa2 = 0;<br />licznik--;<br />_delay_ms(500);// poczekaj az cos przeczytam<br />GICR |= (1 &lt;&lt; INT0);// wlacz przerwanie INT0<br />}<br />}<br />CallBackINT0 = INT0_sterowanie;<br />while(1){<br />// to jedziemy dalej z programem<br />}<br />}<br /><br />void INT0_sterowanie( void ){<br /><br />// to zabawa już ze sterowaniem<br />}<br /><br />void INT0_pomiar( void ){<br />static uint8_t narastajace = 1;<br />static uint8_t n = 6;<br /><br />// w pierwszym przebiegu tylko zeruemy TCCR1A i czekamy na nastepne narastajace<br />if(n==6) {<br />n--;<br />TCCR1A = 0;// ustaw na zero<br />} else {<br />if(narastajace){<br />strefa1 += TCNT1;<br />TCCR1A = 0;// ustaw na zero<br />MCUCR &amp;= ~(1 &lt;&lt; ISC00);// ustaw na opadajace<br />if(n) n--; else {<br />// jak mamy juz 5 pomiarow zatrzymujemy przerwanie<br />GICR &amp;= ~(1 &lt;&lt; INT0);<br />// licznik pomiarow na 6<br />n = 6;<br />// i stawiamy flage do wyswietlacza<br />flagaLCD = 1;<br />}<br />} else {<br />strefa2 += TCNT1;<br />MCUCR |= (1 &lt;&lt; ISC00);// ustaw na narastajace<br />}<br />}<br />}<br /><br />ISR(INT0_vect){<br /><br />if(CallBackINT0) CallBackINT0();<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody umieszczamy przy pomocy syntax=c - Zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 09:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-07-16T09:28:37+01:00</updated>
<published>2013-07-16T09:28:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42025#p42025</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42025#p42025"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42025#p42025"><![CDATA[
Nie wiem, czy callback nie był by sztuką dla sztuki, sam callback jest w zasadzie czymś na kształt przerywania, czyli to callback zgłasza potrzebę obsługi jakiegoś zdarzenia a nie na odwrót <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<p>Statystyki: Napisane przez Gość — 16 lip 2013, o 09:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T09:18:32+01:00</updated>
<published>2013-07-16T09:18:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42024#p42024</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42024#p42024"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42024#p42024"><![CDATA[
No dobra. A co z pomysłem wywoływania Callback'a z procedury przerwania? Przerwanie miałoby tylko jedno zadanie : wywołać callback'a. A tego to bym sobie mógł już podmieniać jak chcę. Taki skok do skoku. Pytanie o atrybut naked dalej otwarte.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 09:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-07-16T09:13:06+01:00</updated>
<published>2013-07-16T09:13:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42022#p42022</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42022#p42022"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42022#p42022"><![CDATA[
No może, ale to byś musiał zmieniać już w assemblerze, bo chyba w C nie ma takiej możliwości, ale głowy sobie nie dam uciąć.<p>Statystyki: Napisane przez Gość — 16 lip 2013, o 09:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T09:05:26+01:00</updated>
<published>2013-07-16T09:05:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42020#p42020</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42020#p42020"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42020#p42020"><![CDATA[
Aktualnie robię projekt szkoleniowy ze sterowania fazowego. Chciałem zaimplementować autoadaptację układu do warunków rzeczywistych panujących w sieci tj. najpierw wykorzystać INT0 jako detektora zera i timera1 do sprawdzenia parametrów sieci czyli de fakto zliczenia ile trwa stan niski i wysoki w detektorze. Na pracę detektora wpływa wiele czynników : dobór elementów, kalibracja układu RC w kontrolerze, pewnie jeszcze innych kilka rzeczy. Na podstawie kilku- kilkunastu serii uśrednionych pomiarów chcę ustalić ile ticków to 0% a ile to 100% i w dalszej części programu zapamiętane dane wykorzystywać w trybie CTC timer1 do sterowania fazowego. Ot taka zabawa licznikami. Ale po wykonaniu serii pomiarów funkcjonalność związana z pomiarem zaszyta w procedurze przerwania już nie będzie mi potrzebna więc chciałem sobie zrobić dwie procedury jedną na okoliczność  pomiarów drugą na okoliczność normalnej pracy. Jeszcze przyszła mi do głowy trzecia funkcjonalność czyli tryb zliczanie ilości przejść przez zero do sterowania grupowego.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Skoro jest wektor w tablicy który tak na prawdę po definicji funkcji zawiera jedynie rozkaz skoku to czy nie może skakać w różne miejsca?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 09:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-07-16T08:59:16+01:00</updated>
<published>2013-07-16T08:59:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42017#p42017</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42017#p42017"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42017#p42017"><![CDATA[
No robisz coś na zasadzie semafora, zależnie od parametru w przerywaniu wykonujesz dany podprogram.<p>Statystyki: Napisane przez Gość — 16 lip 2013, o 08:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-07-16T08:46:53+01:00</updated>
<published>2013-07-16T08:46:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42013#p42013</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42013#p42013"/>
<title type="html"><![CDATA[Re: Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42013#p42013"><![CDATA[
Z tego co ja wiem, to nie możesz wywołać dwu różnych przerywań, ponieważ, przy wywoływaniu przerywania, wykorzystujesz tablicę vectorów przerywań i tam jest umieszczany skok do przerywania...hmmmm może jakaś wstawka asemblerowa. Albo jednak proste sprawdzenie za pomocą if w przerywaniu flagi, potem rozdzielenie na dwie &quot;funkcje&quot; w przerywaniu.<br />Samo przecież sprawdzenie flagi 0/1 nie trwa znowu tak długo, a po tym już przecież normalnie obsługujesz przerywanie jak ci tam pasuje.<p>Statystyki: Napisane przez Gość — 16 lip 2013, o 08:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2013-07-16T08:43:04+01:00</updated>
<published>2013-07-16T08:43:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42012#p42012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42012#p42012"/>
<title type="html"><![CDATA[Różne procedury obsługi tego samego przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3551&amp;p=42012#p42012"><![CDATA[
Witam.<br />Czy jest możliwa podmiana &quot;w locie&quot; procedury obsługi przerwania? Konkretnie chodzi mi o to czy da się napisać dwie lub więcej wersji funkcji np. ISR(INT0_vect){} i w trakcie działania programu np. na podstawie maszyny stanów w pętli głównej lub w pewnej sekwencji aktywować odpowiednią obsługę przerwania. Mogę oczywiście taką maszynę stanów zaimplementować wewnątrz funkcji obsługi przerwania ale wolałbym uniknąć niepotrzebnego sprawdzania warunków w przerwaniu. To coś na wzór Callback'a ale na przerwanie. Tu druga część pytania. Jeżeli powyższe nie jest możliwe to czy z funkcji przerwania można wywołać takiego wcześniej zarejestrowanego Callback'a i czy są jakieś szczególne warunki jakie musi ten Callback spełniać. Czy można go &quot;obiedzić&quot; z prologu i epilogu atrybutem __attribute__ ((naked)); ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 16 lip 2013, o 08:43</p><hr />
]]></content>
</entry>
</feed>