Jaka jest właściwie różnica?keruseykaryu pisze:- SIGNAL() zastąp przez ISR(), bo SIGNAL() może znienacka zniknąć (jak sławne cbi, sbi);
Przerwanie od Timera w Atmega168
-
keruseykaryu
Na początku był chaos. Potem były dwa makra SIGNAL() i INTERRUPT(). Oba tworzyły odpowiednie procedury, zakończone przez reti. Różnica była jedna: INTERRUPT() automatycznie włączał przerwania, co by następne przerwania mogły go przerwać. SIGNAL() tego nie robił. Potem ktoś stwierdził, że INTERRUPT() jest przestarzałe i trzeba ujednolicić, dlatego zapomniano o INTERRUPT(), utworzono nowe, lepsze makro ISR() powiązane z nowym nagłówkiem interrupt.h , a SIGNAL() jak i jego nagłówek pozostało jako nieszkodliwa wsteczna kompatybilność.
ISR() zastąpiło w sumie oba makra, bo nie każdy pamięta, że definicja wygląda tak:
#define ISR ( vector, attributes ). O wektorach to pewnie wiesz, ale atrybuty są ciekawe: ISR_BLOCK, ISR_NOBLOCK, ISR_NAKED i ISR_ALIASOF(vect). Po kolei.
a) Blokowanie dalszych przerwań, jakby SIGNAL(), można pominąć bo to wartość domyślna.
b) Nieblokowanie dalszych przerwań, jakby INTERRUPT().
c) Przerwanie nie ma dodatków kompilatora, można pisać przerwanie od początku do końca jak się chce, trzeba pamiętać o reti().
d) Przerwanie nie ma swojego rozwinięcia i odwołuje się do innego przerwania, by nie pisać czasem tego samego.
Reszta przydatnych informacji ale po anielsku http://www.nongnu.org/avr-libc/user-man ... rupts.html
ISR() zastąpiło w sumie oba makra, bo nie każdy pamięta, że definicja wygląda tak:
#define ISR ( vector, attributes ). O wektorach to pewnie wiesz, ale atrybuty są ciekawe: ISR_BLOCK, ISR_NOBLOCK, ISR_NAKED i ISR_ALIASOF(vect). Po kolei.
a) Blokowanie dalszych przerwań, jakby SIGNAL(), można pominąć bo to wartość domyślna.
b) Nieblokowanie dalszych przerwań, jakby INTERRUPT().
c) Przerwanie nie ma dodatków kompilatora, można pisać przerwanie od początku do końca jak się chce, trzeba pamiętać o reti().
d) Przerwanie nie ma swojego rozwinięcia i odwołuje się do innego przerwania, by nie pisać czasem tego samego.
Reszta przydatnych informacji ale po anielsku http://www.nongnu.org/avr-libc/user-man ... rupts.html