Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 18:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 6 mar 2018, o 22:19 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Witam
Będę zobowiązany za wyjaśnienie pewnej drobnej wątpliwości odnośnie działania przerwań . Jak one działają, jaka jest ich kolejnośc gdy pojawią się jednocześnie wiem. Wiem też ( a właściwie wydaje mi się ,że tak jest ) że gdy w trakcie przerwania o wyższym priorytecie pojawi się przerwanie o niższym priorytecie, to czeka ono w "kolejce" i zostanie obsłużone dopiero po zakończeniu tego pierwszego, "ważniejszego".
Nie jestem jednak pewien czy jeśli w trakcie gdy obsługiwane jest przerwanie podrzędne pojawi się przerwanie o wyższym priorytecie ,to przerwie ono dotychczasowy proces i wymusi obsłużenie samego siebie w pierwszej kolejności . No i czy takie działąnie nie wprowadzi dodatkowych opóźnień.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 mar 2018, o 22:53 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

w prockach avr nie ma priorytetów przerwań

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 06:53 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 68
Pomógł: 4

Podaj jaki typ układu, bo procki avr serii megaAVR0-series np. Attiny1617 czy Atmega 4809 priorytety już mają(chociaż szału z nimi nie ma). Xmegii zresztą też. Jeśli mowa o tych starszych seriach to jest tak jak napisał mirekk36.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 08:06 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

kijas1 napisał(a):
Podaj jaki typ układu, bo procki avr serii megaAVR0-series np. Attiny1617 czy Atmega 4809 priorytety już mają(chociaż szału z nimi nie ma). Xmegii zresztą też. Jeśli mowa o tych starszych seriach to jest tak jak napisał mirekk36.
Atmega 8
To znaczy mam rozumieć, że wszystkie przerwania są równouprawnione? W nocie katalogowej podają listę przerwań mówiąc iż czym niższy adres tym przerwanie mniej uprawnione. Coś źle przeczytałem?

Wysłane z mojego XT1580 przy użyciu Tapatalka

------------------------ [ Dodano po: 44 minutach ]

W tej sytuacji nie bardzo wiem jak rozumieć notę katalogową ATMega 8 , cytuję:
"The complete list of Vectors is shown in "interrupts" on page 46. The list also determines the priority levels of the different interrupts. The lower the adress the higher ist the priority level"
Byłbym zobowiązany za wyjaśnienie sytuacji, bo nie ukrywam, że trochę się gubię.
Pozdrawiam
WTG



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 09:07 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 68
Pomógł: 4

To o czym piszesz dotyczy priorytetów przy JEDNOCZESNYM zgłoszeniu przerwań(wtedy o kolejności decyduje priorytet jaki jest podany). Jeśli już jesteś w przerwaniu to w Atmega 8 są one równouprawnione, czyli jedno nie wywłaszczy drugiego .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 09:20 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Dzięki, to mi wszystko wyjaśnia

------------------------ [ Dodano po: 10 minutach ]

Rozumiem więc ,że gdy w trakcie jednego przerwania nadejdzie drugie , to grzecznie czeka w kolejce aż to pierwsze się zakończy i wtedy automatycznie już przystępuje do realizacji?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 09:44 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 68
Pomógł: 4

MisterWhite napisał(a):
Rozumiem więc ,że gdy w trakcie jednego przerwania nadejdzie drugie , to grzecznie czeka w kolejce aż to pierwsze się zakończy i wtedy automatycznie już przystępuje do realizacji?

Dobrze rozumiesz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 11:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 233
Lokalizacja: Rzeszów
Pomógł: 11

Wynika to z prostego mechanizmu - po wywołaniu przerwania blokowane jest "globalne zezwolenie przerwań " - bit I w rejestrze SREG jest zerowany. Po wyjściu z obsługi przerwania jest on ustawiany. Czyli - wykonywanie procedury przerwania blokuje inne przerwania... Trochę Ci tu namieszam - wystarczy w obsłudze przerwania dać sei() i już możesz przerwać przerwanie - ale się tego nie robi, bo można łatwo stracić kontrolę i potem prosty z pozoru program może działać nie tak jak byś chciał.

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 mar 2018, o 11:33 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

APAP75 napisał(a):
wystarczy w obsłudze przerwania dać sei() i już możesz przerwać przerwanie - ale się tego nie robi, bo można łatwo stracić kontrolę i potem prosty z pozoru program może działać nie tak jak byś chciał.


Wielkie dzięki za "kruczek" Bedę unikał, ale w sytuacjach krytycznych czasowo może się bardzo przydać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO