| Author |
Message
|
wicy Poziom 18

Joined: 13 Mar 2003 Posts: 562 Location: Łódź
|
#1
13 Mar 2011 13:17 [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Właściwie to jak wrócić z procedury obsługi przerwania w jedno konkretne miejsce programu?
Config Int0 = Falling On Int0 Przerwanie Enable Int0 Enable Interrupts Start_programu: [...] Punkt_powrotu_z_przerwania: [...] Petla_glowna: [...masa różnych instrukcji i skoków do podprogramów....] Goto Petla_glowna End Przerwanie: [...] Goto Punkt_powrotu_z_przerwania Return
Przerwanie wywoływane jest w dowolnym punkcie programu i zapamiętywany jest na stosie adres powrotu. Zatem przerwanie może być odebrane i obsłużone w którymkolwiek z podprogramów. I teraz.... nie chcę, żeby podprogramy wykonywały się dalej, ale żeby program główny zaczął się wykonywać niemal od początku.
Jak zatem niepoprawną linię Goto Punkt_powrotu_z_przerwania zamienić na prawidłowe wyjście z przerwania?
|
|
| Back to top |
|
 |
Google

|
#
13 Mar 2011 13:17 |
|
|
|
|
|
| Back to top |
|
 |
piotrva Poziom 22

Joined: 22 Apr 2008 Posts: 2476 Location: Kraków
|
#2
13 Mar 2011 14:29 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Albo ustawić flagę i w pętli głównej ją sprawdzać i wykonywać skok, albo ręcznie potem kasować flagę przerwania i ponownie je aktywować
|
|
| Back to top |
|
 |
wicy Poziom 18

Joined: 13 Mar 2003 Posts: 562 Location: Łódź
|
#3
13 Mar 2011 14:34 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Zakładając, że przerwanie wykona się w jakimś podprogramie, nie chcę by wykonywał się on dalej. Powinien się wykonać już z nowymi danymi ustalonymi w przerwaniu. Więc testowanie flagi w pętli głównej odpada. Chciałbym skok bezwarunkowy bezpośrednio z przerwania, ale użycie Goto zawali mi stos i zawiesi procesor :(
|
|
| Back to top |
|
 |
tadzik85 Poziom 22

Joined: 28 Feb 2007 Posts: 1637 Location: Bydgoszcz
|
#4
13 Mar 2011 14:41 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
wiec napisz odpowiednio podprogram jesli po zakonczeniu jego wykonania bedzie ustawiona flage ze przerwanie nastąpilo wykonaj je ponownie
|
|
| Back to top |
|
 |
wicy Poziom 18

Joined: 13 Mar 2003 Posts: 562 Location: Łódź
|
#5
13 Mar 2011 15:02 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Sęk w tym że procedur jest kilka i - jak mówię - nie chcę ich kończyć po przerwaniu a ew. uruchomić ponownie z nowymi danymi lub uruchamiać inne w zależności od danych z przerwania.
Zastanawia mnie podmiana adresu powrotu z przerwania przy wejściu w przerwanie na jeden stały adres etykiety Punkt_powrotu_z_przerwania. Wtedy Return czy Reti będzie tożsame z Goto Punkt_powrotu_z_przerwania a adres powrotu zdjęty przez procesor ze stosu. Nie wiem czy dobrze kombinuję....
|
|
| Back to top |
|
 |
Google

|
#
13 Mar 2011 15:02 |
|
|
|
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#6
13 Mar 2011 17:57 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
To przerzuć się na C. Tam z każdej funkcji możesz wyskoczyć instrukcją return, a że ISRy to też funkcje, to zero problemu...
|
|
| Back to top |
|
 |
mirekk36 Poziom 25

Joined: 17 Jun 2006 Posts: 8711 Location: Szczecin
|
#7
13 Mar 2011 20:29 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
| wicy wrote: |
Sęk w tym że procedur jest kilka i - jak mówię - nie chcę ich kończyć po przerwaniu a ew. uruchomić ponownie z nowymi danymi lub uruchamiać inne w zależności od danych z przerwania.
................ Nie wiem czy dobrze kombinuję.... |
No niestety kolega totalnie źle kombinuje i wynika raczej z tego, że nie do końca rozumie jeszcze zasady działania przerwań, ich obsługi i w ogóle posługiwania się przerwaniami :(
To jest po prostu zagadnienie POSTAWIONE NA GŁOWIE. Bo tak się programów nie pisze chociaż spokojnie można zrealizować cel jaki chcesz osiągnąć. Ale celu nie znamy. Napisałeś tylko sposób jego realizacji jaki wymyśliłeś - błędnie wymyśliłeś niestety.
Gdybyś opisał co jest celem nadrzędnym, co ma się dziać to łatwiej byłoby podpowiedzieć jak to realizować i jaką drogą iść.
A język C wcale nie jest po to, żeby sobie w taki sposób wyskakiwać z przerwań jak to sobie napisał niefrasobliwie kolega nvsinc.
|
|
| Back to top |
|
 |
nsvinc Poziom 22

Joined: 25 Mar 2006 Posts: 2066 Location: otfock
|
#8
13 Mar 2011 20:43 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
| mirekk36 wrote: |
| A język C wcale nie jest po to, żeby sobie w taki sposób wyskakiwać z przerwań jak to sobie napisał niefrasobliwie kolega nvsinc. |
Literówka :]
No nie twierdze, że "po to jest", tylko, że można. A czasami jest paląca potrzeba...
|
|
| Back to top |
|
 |
Google

|
#
13 Mar 2011 20:43 |
|
|
|
|
|
| Back to top |
|
 |
tadzik85 Poziom 22

Joined: 28 Feb 2007 Posts: 1637 Location: Bydgoszcz
|
#9
13 Mar 2011 20:56 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Return w przerwaniu nic w takim przypadku nie da to zwykły skok na początek epilogu obsługi przerwania, co można zastąpić zwykłym ifem.
|
|
| Back to top |
|
 |
wicy Poziom 18

Joined: 13 Mar 2003 Posts: 562 Location: Łódź
|
#10
13 Mar 2011 21:53 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Myślę o jakimś programowym, natychmiastowym quasi resecie. Quasi bo zachowuję ustawienia pewnych zmiennych, ale odpalam program od początku. Myślałem o Watchdogu, ale jeszcze nie wiem :) czy mogę pozwolić sobie na utratę zmiennych i reset sprzętowy.
|
|
| Back to top |
|
 |
xury Poziom 22

Joined: 08 Mar 2004 Posts: 1714 Location: Radom
|
#11
14 Mar 2011 00:56 Re: [Bascom] Jak wyskoczyć z procedury przerwania |
|
|
|
Spróbuj z watchdogiem i $noramclear
|
|
| Back to top |
|
 |