RTV forum PL | NewsGroups PL

Zniknięcie deklaracji INTERRUPT w WinAVR i przejście na ISR w ATmega32 - jak to działa?

WinAVR + INTERRUPT

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Zniknięcie deklaracji INTERRUPT w WinAVR i przejście na ISR w ATmega32 - jak to działa?

Grzegorz Kurczyk
Guest

Fri Jul 20, 2007 2:28 pm   



Witam
Kompilowałem ostatnio swoje starsze źródła na ATmega32.
Program, który wcześniej działał nagle przestał. Tzn. przestał po
skompilopwaniu go za pomocą WinAVR-20060421. Patrzę w kod wynikowy, a
tam z deklaracji procedur obsługi przerwania zdefiniowanych jako
INTERRUPT(vectoR) porobiły się zwykłe procedurki zakończone ret-em.
Przerwania zadeklarowane jako SIGNAL(vector) kompilują się poprawnie.
Czy wie ktoś z Grupowiczów gdzie się podziała deklaracja INTERRUPT ? W
avr-libc wyczytałem (choć nie jest to napisane wprost), że INTERRUPT
zniknęło, a pojawiła się deklaracja ISR(vector), ale z tego co
zauważyłem w kodzie wynikowym to daje ona na wyjściu dokładnie to samo
co SIGNAL.

Pozdrawiam
Grzegorz

T.M.F.
Guest

Fri Jul 20, 2007 2:49 pm   



Grzegorz Kurczyk pisze:
Quote:
Witam
Kompilowałem ostatnio swoje starsze źródła na ATmega32.
Program, który wcześniej działał nagle przestał. Tzn. przestał po
skompilopwaniu go za pomocą WinAVR-20060421. Patrzę w kod wynikowy, a
tam z deklaracji procedur obsługi przerwania zdefiniowanych jako
INTERRUPT(vectoR) porobiły się zwykłe procedurki zakończone ret-em.
Przerwania zadeklarowane jako SIGNAL(vector) kompilują się poprawnie.
Czy wie ktoś z Grupowiczów gdzie się podziała deklaracja INTERRUPT ? W
avr-libc wyczytałem (choć nie jest to napisane wprost), że INTERRUPT
zniknęło, a pojawiła się deklaracja ISR(vector), ale z tego co
zauważyłem w kodzie wynikowym to daje ona na wyjściu dokładnie to samo
co SIGNAL.

Zdecydowanie ISR(vector) dziala. Roznica pomiedzy ISR a SIGNAL polega
chyba na wlaczeniu/wylaczeniu przerwan w trakcie.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

Grzegorz Kurczyk
Guest

Fri Jul 20, 2007 4:00 pm   



Użytkownik T.M.F. napisał:
Quote:

Zdecydowanie ISR(vector) dziala. Roznica pomiedzy ISR a SIGNAL polega
chyba na wlaczeniu/wylaczeniu przerwan w trakcie.


No właśnie o ten rozkaz sei chodzi. Niestety ISR kompiluje bez niego Sad


K.L Piecuch
Guest

Fri Jul 20, 2007 7:41 pm   



Dnia 20.07.2007 Grzegorz Kurczyk <grzegorz.usun.to@control.slupsk.pl> napisał/a:
Quote:
No właśnie o ten rozkaz sei chodzi. Niestety ISR kompiluje bez niego :-(


INTERRUPT zlikwidowano właśnie po to, aby uniknąć zamieszania. Nie wszyscy
rozróżniali, czym się różni SIGNAL od INTERRUPT. W ISR musisz w sposób jawny
włączyć sam sobie sei(). Chodzi o to, aby programista od początku do końca
wiedział co się dzieje.





--
****** Krzysztof Piecuch ******
sp9rqa@radioam.net
GG 7084611
****** Linux User #132375 ******

T.M.F.
Guest

Sat Jul 21, 2007 9:34 am   



K.L Piecuch pisze:
Quote:
Dnia 20.07.2007 Grzegorz Kurczyk <grzegorz.usun.to@control.slupsk.pl> napisał/a:
No właśnie o ten rozkaz sei chodzi. Niestety ISR kompiluje bez niego :-(


INTERRUPT zlikwidowano właśnie po to, aby uniknąć zamieszania. Nie wszyscy
rozróżniali, czym się różni SIGNAL od INTERRUPT. W ISR musisz w sposób jawny
włączyć sam sobie sei(). Chodzi o to, aby programista od początku do końca
wiedział co się dzieje.

Tylko jest jeden problem. Jesli jawnie umieszcze sei() w ciele funkcji
to wykona sie ono dopiero po calym prologu, czyli na kilkadziesiat
taktow zegara przerwania sa zablokowane. Niby nic, ale w pewnych
sytuacjach to moze miec znaczenie. Zostaje co prawda naked i dodanie
wlasnego prologu/epilogu ale to dublowanie wczesniejszego signal i
interrupt.

--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

Zbych
Guest

Sat Jul 21, 2007 10:13 am   



T.M.F. przemówił ludzkim głosem:

Quote:
Zostaje co prawda naked i dodanie
wlasnego prologu/epilogu ale to dublowanie wczesniejszego signal i
interrupt.

RTFM! http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html
a szczególnie paragraf "Nested interrupts"

K.L Piecuch
Guest

Sat Jul 21, 2007 11:41 am   



Dnia 21.07.2007 T.M.F. <tfrancuz@nospam.mp.pl> napisał/a:
Quote:
K.L Piecuch pisze:

Tylko jest jeden problem. Jesli jawnie umieszcze sei() w ciele funkcji
to wykona sie ono dopiero po calym prologu, czyli na kilkadziesiat
taktow zegara przerwania sa zablokowane. Niby nic, ale w pewnych
sytuacjach to moze miec znaczenie. Zostaje co prawda naked i dodanie
wlasnego prologu/epilogu ale to dublowanie wczesniejszego signal i
interrupt.

Myśle, że to wiele wyjąsni.



http://forum.ep.com.pl/search.php?search_author=Jurek+Szczesiul&sid=ab64b33328adbc0652d827262b3cc681



void TIMER1_COMPB_vect(void) __attribute__((interrupt));



--
****** Krzysztof Piecuch ******
sp9rqa@radioam.net
GG 7084611
****** Linux User #132375 ******

Grzegorz Kurczyk
Guest

Sat Jul 21, 2007 5:41 pm   



Użytkownik K.L Piecuch napisał:
Quote:
void TIMER1_COMPB_vect(void) __attribute__((interrupt));


BINGO !!! :-)

O to chodziło. Dzięki serdeczne.

Pozdrawiam
Grzegorz

K.L Piecuch
Guest

Sat Jul 21, 2007 6:41 pm   



Dnia 21.07.2007 Grzegorz Kurczyk <grzegorz.usun.to@control.slupsk.pl> napisał/a:
Quote:
Użytkownik K.L Piecuch napisał:
void TIMER1_COMPB_vect(void) __attribute__((interrupt));


BINGO !!! :-)

O to chodziło. Dzięki serdeczne.
Nie ma sprawy. Ja też się wcześniej na to nadziałem Wink



--
****** Krzysztof Piecuch ******
sp9rqa@radioam.net
GG 7084611
****** Linux User #132375 ******

elektroda NewsGroups Forum Index - Elektronika Polska - Zniknięcie deklaracji INTERRUPT w WinAVR i przejście na ISR w ATmega32 - jak to działa?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map