FAQ | Points | Add... | Recent posts | Search | Register | Log in


[Bascom] Jak wyskoczyć z procedury przerwania


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> [Bascom] Jak wyskoczyć z procedury przerwania
Author
Message
wicy
Poziom 18
Poziom 18


Joined: 13 Mar 2003
Posts: 562
Location: Łódź

Post#1 Post from the author of the topic 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?
Code Visual Basic - [expand]
 
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

Google Adsense


Post# Post from the author of the topic 13 Mar 2011 13:17   





Back to top
   
piotrva
Poziom 22
Poziom 22


Joined: 22 Apr 2008
Posts: 2476
Location: Kraków

Post#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
Poziom 18


Joined: 13 Mar 2003
Posts: 562
Location: Łódź

Post#3 Post from the author of the topic 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
Poziom 22


Joined: 28 Feb 2007
Posts: 1637
Location: Bydgoszcz

Post#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
Poziom 18


Joined: 13 Mar 2003
Posts: 562
Location: Łódź

Post#5 Post from the author of the topic 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

Google Adsense


Post# Post from the author of the topic 13 Mar 2011 15:02   





Back to top
   
nsvinc
Poziom 22
Poziom 22


Joined: 25 Mar 2006
Posts: 2066
Location: otfock

Post#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
Poziom 25


Joined: 17 Jun 2006
Posts: 8711
Location: Szczecin

Post#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
Poziom 22


Joined: 25 Mar 2006
Posts: 2066
Location: otfock

Post#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

Google Adsense


Post# 13 Mar 2011 20:43   





Back to top
   
tadzik85
Poziom 22
Poziom 22


Joined: 28 Feb 2007
Posts: 1637
Location: Bydgoszcz

Post#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
Poziom 18


Joined: 13 Mar 2003
Posts: 562
Location: Łódź

Post#10 Post from the author of the topic 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
Poziom 22


Joined: 08 Mar 2004
Posts: 1714
Location: Radom

Post#11 14 Mar 2011 00:56   

Re: [Bascom] Jak wyskoczyć z procedury przerwania


Spróbuj z watchdogiem i $noramclear
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> [Bascom] Jak wyskoczyć z procedury przerwania
Page 1 of 1
Similar topics
[BASCOM] Jak przyśpieszyć program - przerwania (29)
ATMega8 nie widzi procedury obsługi przerwania - ROZWIĄZANE (2)
[AVR][WinAVR/C] Optymalizacja procedury przerwania (20)
Problem z powrotem z procedury przerwania (3)
AVR i rcall z procedury przerwania. (2)
[ATMega32][Bascom] Jak przyspieszyć procedury graficzne ? (3)
BASCOM - wyskok w procedury przerwania (16)
[Atmega2560] [BASCOM] . Jak uzyskać wykrycie przerwania. (8)
[ATMega8][Bascom] Przekazywanie parametrów do procedury (2)
[AT89S53][BASCOM] wywolanie procedury Call (4)

Page generation time: 0.268 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed