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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-21T23:13:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7501&amp;mode</id>
<entry>
<author><name><![CDATA[Kuźnia]]></name></author>
<updated>2014-06-21T23:13:38+01:00</updated>
<published>2014-06-21T23:13:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85326#p85326</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85326#p85326"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85326#p85326"><![CDATA[
jakby to nie miał być elegancki sposób to bym tobie zaproponował jeszcze rozwiązanie(nie sprawdzone przeze mnie) :<br /> w przerwaniu inkrementowanie zmiennej wyboru funkcji (sterującej np. switch case) i zapamiętanie jej wartości do odtworzenia po resecie, następnie zmiana stanu pinu podłączonego do resetu na stan niski... po resecie odczyt zapamiętanej zmiennej jako argument switch... <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> to chyba najprościej ale na pewno  brzydziej to się już nie da ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2537">Kuźnia</a> — 21 cze 2014, o 23:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kuźnia]]></name></author>
<updated>2014-06-19T18:51:08+01:00</updated>
<published>2014-06-19T18:51:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85071#p85071</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85071#p85071"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85071#p85071"><![CDATA[
Robiliśmy coś podobnego z Bartkiem (efekty na diodach zmieniane pilotem, obsługa pilota i cała reszta na jednym timerze sprzętowym ) ale wszystko napisaliśmy nieblokująco .To był nasz chyba jeden z pierwszych nieblokujących kodów - polecam przerobienie kodu w ramach nauki timerów programowych <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie jest to trudne, jak dla mnie to o wiele łatwiejsze niż asemblerowe zawiłości, aczkolwiek pomysł MXST'a4 wydaje się bardzo ciekawy dlatego zaraz siadam do lektury i trochę mnie nie będzie <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=2537">Kuźnia</a> — 19 cze 2014, o 18:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2014-06-19T18:09:11+01:00</updated>
<published>2014-06-19T18:09:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85064#p85064</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85064#p85064"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85064#p85064"><![CDATA[
MXST4 - ciekawy pomysł, pytanie tylko, jak się dorwać do tego adresu <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> ale może coś mi się uda znaleźć.<br />Kuźnia - ten poradnik widziałem już jakiś czas temu - problem w tym, że wymagałoby to modyfikacji wszystkich funkcji F, one zawierają w sobie zagnieżdzone pętle, delay'e i inne nieciekawe rzeczy. <br />Może ktoś wpadnie na jakieś prostsze rozwiązanie? Albo coś mi się jeszcze uda wymyślić po drodze <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />Dziękuję za odpowiedzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2202">Elektro_maniak</a> — 19 cze 2014, o 18:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kuźnia]]></name></author>
<updated>2014-06-19T17:53:52+01:00</updated>
<published>2014-06-19T17:53:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85062#p85062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85062#p85062"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85062#p85062"><![CDATA[
a może spróbuj &quot;zabronionego&quot;sposobu z ostatniego poradnika Mirka....<img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2014/06/wprawki-w-c-z-diodami-led-i-klawiszem.html" >http://mirekk36.blogspot.com/2014/06/wp ... iszem.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2537">Kuźnia</a> — 19 cze 2014, o 17:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MXST4]]></name></author>
<updated>2014-06-19T17:45:52+01:00</updated>
<published>2014-06-19T17:45:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85061#p85061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85061#p85061"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85061#p85061"><![CDATA[
Pokombinuj z adresem powrotu odłożonym na stosie po wejściu w przerwanie, możesz go zmodyfikować &quot;oszukując&quot; mikrokontroler, który po przerwaniu pójdzie tam gdzie mu powiesz. To rozwiązanie będzie wymagało poznania adresów poszczególnych funkcji. W asm łatwo takie coś było zrobić, tutaj poczytaj, ale myślę, że również nie będzie problemu.<br /><br /><br />MXST4<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4849">MXST4</a> — 19 cze 2014, o 17:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2014-06-19T17:35:03+01:00</updated>
<published>2014-06-19T17:35:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85060#p85060</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85060#p85060"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85060#p85060"><![CDATA[
Dziękuję za odpowiedzi.<br /><br />MXST4 - funkcje te będą opisywać przeróżne efekty na diodach LED, w związku z tym nie są ze sobą szczególnie jakoś powiązane. Bez interakcji użytkownika, pętla główna wywołuje każdy z efektów po kolei. Użytkownik ma mieć tylko płynną możliwość (bez czekania aż dana funkcja zakończy działanie) przeskoku do poprzedniego/kolejnego efektu.<br /><br />Ma to wyglądać np. tak:<br /><br />Pierwszy obieg pętli: (brak interakcji użytkownika)<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">F1();<br />F2();<br />..<br />FN();</div><br /><br />Drugi obieg pętli<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">F1();<br />F2();<br />F3(); //podczas trwania F3() użytkownik chce się cofnąć do F2; F3 przerywa swoje działanie<br />F2();<br />F3();<br />F4();<br />..<br />FN();</div><br /><br />i podobnie, gdy użytkownik chce ominąć dany efekt (następuje natychmiastowy skok do kolejnej funkcji)<br /><br />Kuźnia - dokładnie też o tym samym pomyślałem, ale nie pozwoli to użytkownikowi przerwać aktualnie prezentowanego efektu i przejść do następnego. (Użytkownik będzie musiał cierpliwie zaczekać, aż dany efekt się zakończy)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2202">Elektro_maniak</a> — 19 cze 2014, o 17:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kuźnia]]></name></author>
<updated>2014-06-19T17:20:43+01:00</updated>
<published>2014-06-19T17:20:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85057#p85057</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85057#p85057"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85057#p85057"><![CDATA[
wydaje mi się że ładnie wyglądało by to w :<br />albo w switch case<br />albo umieszczając  adresy do funkcji w tablicy wskaźników do funkcji, a następnie wybierać za pomocą funkcji zwracającej wskaźnik na tą tablicę, funkcję za pomocą inkrementowanego bądź dekrementowanego (np. w przerwaniu) indeksu ( [ind]).<br />ostatniego sposobu nigdy nie próbowałem i sam ciekaw jestem jak to wyjdzie <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=2537">Kuźnia</a> — 19 cze 2014, o 17:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MXST4]]></name></author>
<updated>2014-06-19T17:14:06+01:00</updated>
<published>2014-06-19T17:14:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85055#p85055</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85055#p85055"/>
<title type="html"><![CDATA[Re: nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85055#p85055"><![CDATA[
Krótkie pytanie: funkcje są od siebie zależne? Koniecznie muszą się wykonać jedna po drugiej?<br /><br /><br />MXST4<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4849">MXST4</a> — 19 cze 2014, o 17:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektro_maniak]]></name></author>
<updated>2014-06-19T16:31:43+01:00</updated>
<published>2014-06-19T16:31:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85045#p85045</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85045#p85045"/>
<title type="html"><![CDATA[nastąpiło przerwanie? - skok do kolejnej funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7501&amp;p=85045#p85045"><![CDATA[
Witajcie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Próbuję rozwiązać następujący problem:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile uint8_t next_flag;<br />volatile uint8_t previous_flag;<br />volatile uint8_t stop_flag;<br /><br />int main(void) {<br /><br />// przyciski:<br />// lewy - PC5 PCINT13<br />// srodkowy PC4 PCINT12<br />// prawy PC3 PCINT11<br /><br />PORTC |= (1 &lt;&lt; PC5) | (1 &lt;&lt; PC4) | (1 &lt;&lt; PC3); // podciągnięcie do VCC<br />PCICR |= (1 &lt;&lt; PCIE1); // zezwolenie na przerwanie PCIE1<br />PCMSK1 |= (1 &lt;&lt; PCINT11) | (1 &lt;&lt; PCINT12) | (1 &lt;&lt; PCINT13); // przerwanie PCINT na pinie PC5, PC4 oraz PC3<br />        sei();<br /><br />while (1) {<br />                    Funkcja1(...);<br />                    Funkcja2(...);<br />                    Funkcja3(...);<br />                    ....<br />                    FunkcjaN(...);<br />}<br />}<br /><br />ISR( PCINT1_vect ) {<br />if (!(PINC &amp; (1 &lt;&lt; PC5)))<br />previous_flag = 1;<br />if (!(PINC &amp; (1 &lt;&lt; PC4)))<br />stop_flag = 1;<br />if (!(PINC &amp; (1 &lt;&lt; PC3)))<br />next_flag = 1;<br />}[/syntax]<br /><br />W kodzie mamy prostą obsługę zewnętrznych przerwań PCINT, klawisze są zwierające do masy.<br /><br />W głównej pętli mamy N funkcji, które zawierają w sobie pętle, delay'e i dużo innych czasochłonnych rzeczy.<br />Pytanie: Jak w elegancki sposób za pomocą zewnętrznego przerwania przerwać natychmiast aktualnie wykonywaną funkcję i przejść do następnej? Piszę w elegancki sposób, bo można by było pójść na łatwiznę i po prostu w każdej funkcji co chwilę sprawdzać stan flagi, ale nie jest to zbyt estetyczne rozwiązanie.<br /><br />W skrócie: za pomocą dwóch przycisków przechodzimy płynnie pomiędzy funkcjami (np. jesteśmy w funkcji 3, klikając pierwszy przycisk przechodzimy do funkcji 2, a drugi przycisk - do funkcji 4)<br /><br />Widoczna obsługa przerwania dla trzeciego przycisku (stop_flag) powinna umożliwić wykonywanie aktualnej funkcji nieskończoną ilość razy (zapętlić ją, ignorując pozostałe funkcje), ale to nie jest problem i nie o to pytam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Z góry dziękuję za każdy pomysł.<br />Pozdrawiam <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=2202">Elektro_maniak</a> — 19 cze 2014, o 16:31</p><hr />
]]></content>
</entry>
</feed>