Przerwanie w przerwaniu 8051 i AVR



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Wojtek" <tuptuptup_at_nospam_box43.pl>
Subject: Przerwanie w przerwaniu 8051 i AVR
Date: Tue, 8 Jul 2003 19:17:46 +0200


Witam!
Być może ktoś z Was wie czy z wnętrza procedury obsługi przerwania można wymusić software'owo wystąpienie innego przerwania?
Chodzi o przypadek, w którym mamy przerwanie o wysokim priorytecie, które wykonuje jakieś szybkie operacje, np. próbkuje jakąś linię
i zapisuje jej stan w pamięci. Raz na jakiś czas, gdy uzbiera się dużo danych trzeba te zebrane dane hurtowo przetworzyć (np. gdzieś
przekopiować, coś na ich podstawie wyliczyć). Przerwanie próbkujęce może wystąpić częściej niż czas tego przetwarzania. Czy można
więc zrobić coś takiego, że w tym próbkującym przerwaniu raz na jakiś czas wyzwolimy inne przerwanie (porzetwarzające zebrane dane)
o niskim priorytecie, którego obsługa w razie potrzeby zostanie przerwana by wykonać próbkowanie?
Nie jest mi to potrzebne do jakiejś konkretnej aplikacji. Przyszła mi po prostu do głowy taka możliwość uporania się z niektórymi
problemami, które nękały mnie w przeszłości.
Jeżeli wiecie coś na ten temat lub próbowaliście czegoś takiego to oświećcie mnie.
Pozdrawiam
Wojtek



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Roland" <rolandz_at_nospam_poczta.fm>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Tue, 8 Jul 2003 20:09:20 +0200


Jeżeli wiecie coś na ten temat lub próbowaliście czegoś takiego to oświećcie
mnie.

W AVR mozna na pewno odblokowac przerwania, ale ni ewiem czy to jest dobry
pomysl. Mysle, ze to zalezy od sytuacji. Ja uzywam technik, ktore mozna by
nazwac programnowaniem semi-rownoleglym, tzn inne partie programu sa sterowane
roznymi flagami. Uzywam czasem prostych semaforow...

Roland





========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Tue, 8 Jul 2003 14:00:23 -0500


"Wojtek" <tuptuptup_at_nospam_box43.pl> wrote in message news:beeu43$gam$1_at_nospam_nemesis.news.tpi.pl...
Witam!
Być może ktoś z Was wie czy z wnętrza procedury obsługi
przerwania można wymusić software'owo wystąpienie innego przerwania?

Znaczy się wywołać po prostu jakąś funkcję w kodzie? :-)

Chodzi o przypadek, w którym mamy przerwanie o wysokim priorytecie,
które wykonuje jakieś szybkie operacje, np. próbkuje jakąś linię
i zapisuje jej stan w pamięci.

Czyli wykonuje się niezwykle szybko i szybko zakańcza...

Raz na jakiś czas, gdy uzbiera się dużo danych trzeba te zebrane dane
hurtowo przetworzyć (np. gdzieś przekopiować, coś na ich podstawie wyliczyć).
Przerwanie próbkujęce może wystąpić częściej niż czas tego przetwarzania.

Typowy przykład obsługi urządzenia do komunikacji szeregowej...
Np. UART bez fifo - zbierasz dane do paczki bajt po bajcie
na przerwaniu od RX i w pewnym momencie, gdy uzbierasz całą
paczkę musisz coś z nią zrobić, przetworzyć przez "parser"...

Czy można więc zrobić coś takiego, że w tym próbkującym przerwaniu
raz na jakiś czas wyzwolimy inne przerwanie (porzetwarzające zebrane
dane) o niskim priorytecie, którego obsługa w razie potrzeby zostanie
przerwana by wykonać próbkowanie?

Nie, w tym przerwaniu o wysokim priorytecie możesz najwyżej
poinformować resztę programu, że dane są gotowe do obróbki,
np. zmieniając jakąś flagę dostepną dla głównego programu,
który czeka na tą flagę nic nie robiąc lub robiąc inne rzeczy
ale cyklicznie sprawdzającego tą flagę...
Oczywiście obsługa przerwania wysokiego priorytetu musi być
napisana tak, aby nie "zamazać" danych zgłoszonych przed chwilą
do przetworzenia, a więc musisz zaprojektować odpowiednie bufory
na dane aby zebrać potok danych tak szybko jak potrzeba...

Weź pod uwagę, że procedura obsługi tego szybkiego przerwania
nie może być zawieszona odbługą długich obliczeń na paczce
danych, gdyż za chwilę może przyjść drugie przerwanie i co wtedy?
Wywoła się funkcja obsługi przerwania wewnątrz obsługi przerwania?
Raczej tego unikałbym bo wymaga to pisania funkcji "reentrantnych".

Być może Twoje pytanie bardziej nadaje się na news:pl.comp.programming?


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!newsfeed.freenet.de!194.168.222.22.MISMATCH!newspeer1-gui.server.ntli.net!ntli.net!sn-xit-02!sn-xit-06!sn-post-01!supernews.com!corp.supernews.com!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Greg Sz <greg_sz_at_nospam_dsuper.net>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Wed, 09 Jul 2003 01:15:58 -0400


Wojtek wrote:

Witam!
Być może ktoś z Was wie czy z wnętrza procedury obsługi przerwania można wymusić software'owo wystąpienie innego przerwania?
Chodzi o przypadek, w którym mamy przerwanie o wysokim priorytecie, które wykonuje jakieś szybkie operacje, np. próbkuje jakąś linię

Nie wiem czy masz takie selektywne maskowanie przerwan bo malo znam 8051
Ogolnie zagniezdzanie przerwan to wyzsza szkola jazdy. W malych prockach ogolnie nalezy tego unikac. Mozesz bardzo szybko przepelnic
stos i wogole latwo jakis blad zrobic ktory bedzie straszny w skutkach.
Szczgolnie gdy maska jest jedna moga ci sie tak slicznie spietrzyc przerwania ze sie nie pozbierasz.

Dobra metoda jest dla testowania prawidlowosci czasowych obslugi przerwan zrobic male wstawki (kod warunkwy) do programu ktore beda ci
przelaczac stan na jakims wyjsciu na ten czas nie uzywanym do innych celow.
W ten sposob zobaczysz jak dlugo program ci sterczy w obsludze przerwania jak sie okaze ze dluzej siedzi w przerwaniu niz poza nim to
juz jest kiepskawo.

Pozdro
Grzechu




========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.webcorp.com.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: sapero_at_nospam_poczta.NOSPAM.fm (Akane)
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Wed, 9 Jul 2003 21:47:58 +0000 (UTC)


A nie byłoby prościej zamiast programowo wywoływać przerwanie
zmieniając bity - poprostu wykonać CALL przerwanie_X ??
--
Wyslano z forum elektronicznego: https://www.elektroda.pl/rtvforum/

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Wed, 9 Jul 2003 20:08:12 -0500


"Akane" <sapero_at_nospam_poczta.NOSPAM.fm> wrote in message news:bei2ie$mhq$2_at_nospam_taurus.webcorp.pl...
A nie byłoby prościej zamiast programowo wywoływać przerwanie
zmieniając bity - poprostu wykonać CALL przerwanie_X ??

Ale po co? Całą ideą "przerwania" jest własnie fakt, że
PRZERYWA ono działanie programu głównego w nieoczekiwanym
i nieprzewidywalnym momencie...
Jeśli Ty wiesz, że w tym "momencie", w tej linii kodu,
potrzebujesz wywołać jakąś PROCEDURĘ to używasz CALL.
Ale nie ma sensu tego nazywać przerwaniem, zapisywać na
stosie kontekst procesora i powracać z przerwania RETI.
Wystarczy zwyczajny CALL procedury z kodu własnie.


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Janusz Ch" <janchar_at_nospam_wp.TO_WYTNIJ.pl>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Wed, 9 Jul 2003 14:48:15 +0200


Troszke to zawile napisane i nie do konca rozumie, ale wywolywan przerwan
mozna dokonywac na rozne sposoby. Mowa tu o 51. Nawet gdy masz przerwanie na
wyzszym poziomie, mozna wywolac przerwanie z nizszego poziomu stosujac
odpowiednie triki. Polegac moze na tym, ze przerwanie z wyzszego poziomu na
samym poczatku zmienia swoj priorytet na nizszy, a temu drugiemu nadac
wyzszy priorytet. W trakcie zmiany tych priorytetow moze dojsc do sytuacji,
ze bedzie potrzebne 2 przerwanie. Aby to nie zostalo zapomniane, trzeba
pomyslec o jakims ukladzie czasowym. To tyle jesli chodzi o przerwania
hardwarowe. W softwer. trzeba to zrobic za pomoca wykorzystania odpowiednik
komorek flag.
Tez napisalem zawile, ale moze uda ci sie zrozumiec moj tok rozumowania.



========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Wojtek" <tuptuptup_at_nospam_box43.pl>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Thu, 10 Jul 2003 16:25:22 +0200



Użytkownik "Janusz Ch" <janchar_at_nospam_wp.TO_WYTNIJ.pl> napisał w wiadomości news:beh34a$bt8$1_at_nospam_atlantis.news.tpi.pl...
Troszke to zawile napisane i nie do konca rozumie, ale wywolywan przerwan
mozna dokonywac na rozne sposoby. Mowa tu o 51. Nawet gdy masz przerwanie na
wyzszym poziomie, mozna wywolac przerwanie z nizszego poziomu stosujac
odpowiednie triki. Polegac moze na tym, ze przerwanie z wyzszego poziomu na
samym poczatku zmienia swoj priorytet na nizszy, a temu drugiemu nadac
wyzszy priorytet. W trakcie zmiany tych priorytetow moze dojsc do sytuacji,
ze bedzie potrzebne 2 przerwanie. Aby to nie zostalo zapomniane, trzeba
pomyslec o jakims ukladzie czasowym. To tyle jesli chodzi o przerwania
hardwarowe. W softwer. trzeba to zrobic za pomoca wykorzystania odpowiednik
komorek flag.
Tez napisalem zawile, ale moze uda ci sie zrozumiec moj tok rozumowania.

A czy nie da się tego zrobić w ten sposób, że na końcu "szybkiego" przerwania
o wysokim priorytecie ustawiam ODPOWIEDNI bit sterujący, wychodzę
z obsługi przerwania i natychmiast wywoływana jest procedura obsługi
przerwania o niższym priorytecie (spowodowane ustawieniem tego
ODPOWIEDNIEGO bitu)?
Mam nadzieję, że piszę wystarczająco jasno. Nie jestem tego pewien...
Wojtek



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Thu, 10 Jul 2003 11:24:19 -0500


"Wojtek" <tuptuptup_at_nospam_box43.pl> wrote in message news:bejsop$g89$1_at_nospam_nemesis.news.tpi.pl...
A czy nie da się tego zrobić w ten sposób, że na końcu "szybkiego" przerwania
o wysokim priorytecie ustawiam ODPOWIEDNI bit sterujący, wychodzę
z obsługi przerwania i natychmiast wywoływana jest procedura obsługi
przerwania o niższym priorytecie (spowodowane ustawieniem tego
ODPOWIEDNIEGO bitu)?
Mam nadzieję, że piszę wystarczająco jasno. Nie jestem tego pewien...

Dokładnie tak się stanie, gdy program główny będzie biegał
w pętli czekając na tą flagę, którą ustawisz w procedurze
obsługi przerwania. To Ci właśnie tu proponujemy zrobić.


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Maciej Czapla <mc_at_nospam_sensor.com.pl>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Thu, 10 Jul 2003 23:09:35 +0200


Dokładnie tak się stanie, gdy program główny będzie biegał
w pętli czekając na tą flagę, którą ustawisz w procedurze
obsługi przerwania. To Ci właśnie tu proponujemy zrobić.

Tylko czas reakcji będzie zupełnie inny - tu masz natychmiast (us).

Do autora: możesz tak zrobić, sprawdzone.

MC
--
Czy to sens ma, kląć, że ten Świat z kiepskiego zrobiony surowca,
Bo dobry Bóg już zrobił co mógł, teraz trzeba zawołać fachowca.

========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Sat, 12 Jul 2003 13:12:52 -0500


"Maciej Czapla" <mc_at_nospam_sensor.com.pl> wrote in message news:3F0DD60F.C139F0EA_at_nospam_sensor.com.pl...
Dokładnie tak się stanie, gdy program główny będzie biegał
w pętli czekając na tą flagę, którą ustawisz w procedurze
obsługi przerwania. To Ci właśnie tu proponujemy zrobić.

Tylko czas reakcji będzie zupełnie inny - tu masz natychmiast (us).

Nie bardzo rozumiem gdzie tkwi różnica, czy mógłbyś rozwinąć?
I które konkretnie rozwiązanie będzie Twoim zdaniem szybsze?
Nie widzę źródła opóźnienia... Chodzi Ci o reti?


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Maciej Czapla <mc_at_nospam_sensor.com.pl>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Sun, 13 Jul 2003 23:53:16 +0200


Dokładnie tak się stanie, gdy program główny będzie biegał
w pętli czekając na tą flagę, którą ustawisz w procedurze
obsługi przerwania. To Ci właśnie tu proponujemy zrobić.

Tylko czas reakcji będzie zupełnie inny - tu masz natychmiast (us).

Nie bardzo rozumiem gdzie tkwi różnica, czy mógłbyś rozwinąć?
I które konkretnie rozwiązanie będzie Twoim zdaniem szybsze?
Nie widzę źródła opóźnienia... Chodzi Ci o reti?

Chodzi o to, że pętla główna może potrzebować czasu na zbadanie znacznika który
ustawiło przerwanie chyba, że będzie zajęta czekaniem tylko na jego stan.

MC
--
Czy to sens ma, kląć, że ten Świat z kiepskiego zrobiony surowca,
Bo dobry Bóg już zrobił co mógł, teraz trzeba zawołać fachowca.

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Wojtek" <tuptuptup_at_nospam_box43.pl>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Mon, 14 Jul 2003 14:08:16 +0200



Użytkownik "Maciej Czapla" <mc_at_nospam_sensor.com.pl> napisał w wiadomości news:3F11D4CC.A98CA7B7_at_nospam_sensor.com.pl...
Dokładnie tak się stanie, gdy program główny będzie biegał
w pętli czekając na tą flagę, którą ustawisz w procedurze
obsługi przerwania. To Ci właśnie tu proponujemy zrobić.

Tylko czas reakcji będzie zupełnie inny - tu masz natychmiast (us).

Nie bardzo rozumiem gdzie tkwi różnica, czy mógłbyś rozwinąć?
I które konkretnie rozwiązanie będzie Twoim zdaniem szybsze?
Nie widzę źródła opóźnienia... Chodzi Ci o reti?

Chodzi o to, że pętla główna może potrzebować czasu na zbadanie znacznika który
ustawiło przerwanie chyba, że będzie zajęta czekaniem tylko na jego stan.

To właśnie chciałem wiedzieć. Chodziło mi o przypadek gdy pętla główna
coś robi i niezbyt często może sprawdzać flagę.
Bardzo dziękuję Wam wszystkim. Jesteście rewelacyjni.
Wojtek



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!topaz.icpnet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr C." <piotr4_at_nospam_mabanana.com>
Subject: Re: Przerwanie w przerwaniu 8051 i AVR
Date: Wed, 9 Jul 2003 17:17:46 +0200


Wojtek wrote:
Witam!
Być może ktoś z Was wie czy z wnętrza procedury obsługi przerwania
można wymusić software'owo wystąpienie innego przerwania

W opisanym przypadku najłatwiej chyba będzie ustawić określoną flagę, która
jest sprawdzana w programie głównym. Wywołana zostanie procedura, która może
zostać przerwana dowolnym przerwaniem.

pozdr.



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai