Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięnazwy przerwań dla Atmeg128
Moderatorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
cześć.
Proszę pomóżcie bo już sie zamotałem.
Potrzebuje w AVR-GCC w programie dla Atmega 128 wykorzystać dwa przerwania ISR.
Pierwsze dla CTC Timer 1(16 bitowego), A drugie po przepełnieniu Timera 0 (8bitowego)
Popatrzyłem sobie w pliku iom128.h i są tam nr wektorów przerwan inne niz w Datasheet dla Atmeg128.
Powiedzcie mi co mam wpisać w ISR( ) dla tych dwóch przerwań i jak w przyszłości dojśc które przerwanie jest które bo po nazach to troche ciężko.
Proszę pomóżcie bo już sie zamotałem.
Potrzebuje w AVR-GCC w programie dla Atmega 128 wykorzystać dwa przerwania ISR.
Pierwsze dla CTC Timer 1(16 bitowego), A drugie po przepełnieniu Timera 0 (8bitowego)
Popatrzyłem sobie w pliku iom128.h i są tam nr wektorów przerwan inne niz w Datasheet dla Atmeg128.
Powiedzcie mi co mam wpisać w ISR( ) dla tych dwóch przerwań i jak w przyszłości dojśc które przerwanie jest które bo po nazach to troche ciężko.
Re: nazwy przerwań dla Atmeg128
Dlaczego inne , raczej przesunięte. W dokumentacji numeracj zaczyna się od 1 , a w AVR-GCC od 0 i to cała różnica....Popatrzyłem sobie w pliku iom128.h i są tam nr wektorów przerwan inne niz w Datasheet dla Atmeg128.
Jeśli chcesz wykorzystać przerwanie , którego wektor w dokumentacji to np. 13 i opisane w tabeli jako TIMER1 COMPA , to możesz ustalić wektor przez nazwę ISR(TIMER1_COMPA_vect) , lub jeśli nie lubisz symboli , to przez numer ISR(_VECTOR(12)) , bo Vector No.13-1 to właśnie 12Powiedzcie mi co mam wpisać w ISR( ) dla tych dwóch przerwań i jak w przyszłości dojśc które przerwanie jest które bo po nazach to troche ciężko.
Piotrek
PS
O który tryb CTC Ci chodzi Mode 4 czy 12
A czym się różni np TIMER1_COMPA_vect od SIG_OUTPUT_COMPARE1A
wektor jest ten sam.
Miałem na myśli tryb CTC mode 4
[ Dodano: 08-11-2006, 06:57 ]
Sprawdziłem jeszcze co generuje kompilator i jak to wygląda w AvrStudio.
Dlaczego tu jest Vector_12 i vector_16. To nie odpowiada numerom przerwań w karcie katalogowej?
wektor jest ten sam.
Miałem na myśli tryb CTC mode 4
[ Dodano: 08-11-2006, 06:57 ]
Sprawdziłem jeszcze co generuje kompilator i jak to wygląda w AvrStudio.
Kod: Zaznacz cały
@000000F5: __vector_16
77: ISR(SIG_OVERFLOW0) { //.... itd
//oraz
@00000105: __vector_12
84: ISR(SIG_OUTPUT_COMPARE1A) { //...itd
Dlaczego tu jest Vector_12 i vector_16. To nie odpowiada numerom przerwań w karcie katalogowej?
To są nazwy symboliczne.Pierwszy z tych symboli jest zgodny z nazwami przyjętymi przez Atmela , a drugi przez twórców AVR-GCC i odnosi do "starego" SIGNAL.A czym się różni np TIMER1_COMPA_vect od SIG_OUTPUT_COMPARE1A
wektor jest ten sam.
Nie bardzo rozumiem co Ci się nie zgadza.Chodzi o numerki _12,_16 , czy o adresy w pamięci programuDlaczego tu jest Vector_12 i vector_16. To nie odpowiada numerom przerwań w karcie katalogowej?
Wklejam poniżej spreparowany kod assemblera wygenerowany przez AVRStudio:
Listing
Kod: Zaznacz cały
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include<avr/interrupt.h>
ISR(TIMER1_COMPA_vect) {asm ("nop");}
ISR(TIMER0_OVF_vect) {asm ("nop");asm ("nop");}
int main(void)
{
return 0;
}
Kod: Zaznacz cały
Vector Reset and Interrupts Vectors
No.
+00000000: JMP 0x00000046 1 $0000 External Pin, Power-on Reset, ...
+00000002: JMP 0x00000063 2 $0002 INT0 External Interrupt Request 0
+00000004: JMP 0x00000063 3 $0004 INT1 External Interrupt Request 1
+00000006: JMP 0x00000063 4 $0006 INT2 External Interrupt Request 2
+00000008: JMP 0x00000063 5 $0008 INT3 External Interrupt Request 3
+0000000A: JMP 0x00000063 6 $000A INT4 External Interrupt Request 4
+0000000C: JMP 0x00000063 7 $000C INT5 External Interrupt Request 5
+0000000E: JMP 0x00000063 8 $000E INT6 External Interrupt Request 6
+00000010: JMP 0x00000063 9 $0010 INT7 External Interrupt Request 7
+00000012: JMP 0x00000063 10 $0012 TIMER2 COMP Timer/Counter2 Compare Match
+00000014: JMP 0x00000063 11 $0014 TIMER2 OVF Timer/Counter2 Overflow
+00000016: JMP 0x00000063 12 $0016 TIMER1 CAPT Timer/Counter1 Capture Event
+00000018: JMP 0x00000065 13 $0018 TIMER1 COMPA Timer/Counter1 Compare Match A
+0000001A: JMP 0x00000063 14 $001A TIMER1 COMPB Timer/Counter1 Compare Match B
+0000001C: JMP 0x00000063 15 $001C TIMER1 OVF Timer/Counter1 Overflow
+0000001E: JMP 0x00000063 16 $001E TIMER0 COMP Timer/Counter0 Compare Match
+00000020: JMP 0x00000070 17 $0020 TIMER0 OVF Timer/Counter0 Overflow
+00000022: JMP 0x00000063 18 $0022 SPI, STC SPI Serial Transfer Complete
+00000024: JMP 0x00000063 19 $0024 USART0, RX USART0, Rx Complete
+00000026: JMP 0x00000063 20 $0026 USART0, UDRE USART0 Data Register Empty
+00000028: JMP 0x00000063 21 $0028 USART0, TX USART0, Tx Complete
+0000002A: JMP 0x00000063 22 $002A ADC ADC Conversion Complete
+0000002C: JMP 0x00000063 23 $002C EE READY EEPROM Ready
+0000002E: JMP 0x00000063 24 $002E ANALOG COMP Analog Comparator
+00000030: JMP 0x00000063 25 $0030 TIMER1 COMPC Timer/Countre1 Compare Match C
+00000032: JMP 0x00000063 26 $0032 TIMER3 CAPT Timer/Counter3 Capture Event
+00000034: JMP 0x00000063 27 $0034 TIMER3 COMPA Timer/Counter3 Compare Match A
+00000036: JMP 0x00000063 28 $0036 TIMER3 COMPB Timer/Counter3 Compare Match
+00000038: JMP 0x00000063 29 $0038 TIMER3 COMPC Timer/Counter3 Compare Match C
+0000003A: JMP 0x00000063 30 $003A TIMER3 OVF Timer/Counter3 Overflow
+0000003C: JMP 0x00000063 31 $003C USART1, RX USART1, Rx Complet
+0000003E: JMP 0x00000063 32 $003E USART1, UDRE USART1 Data Register Empty
+00000040: JMP 0x00000063 33 $0040 USART1, TX USART1, Tx Complete
+00000042: JMP 0x00000063 34 $0042 TWI Two-wire Serial Interface
+00000044: JMP 0x00000063 35 $0044 SPM READY Store Program Memory Ready
+00000046: CLR R1
+00000047: OUT 0x3F,R1
+00000048: SER R28
+00000049: LDI R29,0x10
+0000004A: OUT 0x3E,R29
+0000004B: OUT 0x3D,R28
+0000004C: LDI R17,0x01
+0000004D: LDI R26,0x00
+0000004E: LDI R27,0x01
+0000004F: LDI R30,0x0A
+00000050: LDI R31,0x01
+00000051: LDI R16,0x00
+00000052: OUT 0x3B,R16
+00000053: RJMP PC+0x0003
+00000054: ELPM R0,Z+
+00000055: ST X+,R0
+00000056: CPI R26,0x00
+00000057: CPC R27,R17
+00000058: BRNE PC-0x04
+00000059: LDI R17,0x01
+0000005A: LDI R26,0x00
+0000005B: LDI R27,0x01
+0000005C: RJMP PC+0x0002
+0000005D: ST X+,R1
+0000005E: CPI R26,0x00
+0000005F: CPC R27,R17
+00000060: BRNE PC-0x03
+00000061: JMP 0x0000007C ;Main
+00000063: JMP 0x00000000 ;Bad interrupt
@00000065: __vector_12
---- PetleXY.c ------------------------------------------------------------------------------------
7: ISR(TIMER1_COMPA_vect) {asm ("nop");}
+00000065: PUSH R1
+00000066: PUSH R0
+00000067: IN R0,0x3F
+00000068: PUSH R0
+00000069: CLR R1
+0000006A: NOP
+0000006B: POP R0
+0000006C: OUT 0x3F,R0
+0000006D: POP R0
+0000006E: POP R1
+0000006F: RETI
@00000070: __vector_16
8: ISR(TIMER0_OVF_vect) {asm ("nop");asm ("nop");}
+00000070: PUSH R1
+00000071: PUSH R0
+00000072: IN R0,0x3F
+00000073: PUSH R0
+00000074: CLR R1
+00000075: NOP
+00000076: NOP
+00000077: POP R0
+00000078: OUT 0x3F,R0
+00000079: POP R0
+0000007A: POP R1
+0000007B: RETI
@0000007C: main
12: {
+0000007C: SER R28
+0000007D: LDI R29,0x10
+0000007E: OUT 0x3E,R29
+0000007F: OUT 0x3D,R28
14: }
+00000080: LDI R24,0x00
+00000081: LDI R25,0x00
+00000082: JMP 0x00000084
+00000084: RJMP PC-0x0000
Piotrek
No dobrze.
Tak przy okazji chciałem się spytac tylko dlaczego W symulacji jest taki zapis
Po prostu skąd bierze się u nich ta liczba 16.
Tak przy okazji chciałem się spytac tylko dlaczego W symulacji jest taki zapis
Kod: Zaznacz cały
@00000070: __vector_16
8: ISR(TIMER0_OVF_vect) {asm ("nop");asm
Ta liczba , to kolejna pozycja w tablicy wektorów , a __vector_16 , to poprostu etykieta dla assemblera.Jeśli teraz zaczniesz liczyć od początku tablicy wektorów zaczynając od zera , to po doliczeniu do 16-go JMP-a , natrafisz na rozkaz skoku do tej właśnie etykiety (w pliku *.lss jest JMP __vector_16).No dobrze.
Tak przy okazji chciałem się spytac tylko dlaczego W symulacji jest taki zapisPo prostu skąd bierze się u nich ta liczba 16.Kod: Zaznacz cały
@00000070: __vector_16 8: ISR(TIMER0_OVF_vect) {asm ("nop");asm
Piotrek
-
- -
- Posty:175
- Rejestracja:10 paź 2003, o 20:44
- Lokalizacja:Białystok
- Kontaktowanie:
Porównaj :A czym się różni np TIMER1_COMPA_vect od SIG_OUTPUT_COMPARE1A
wektor jest ten sam.
Dlaczego tu jest Vector_12 i vector_16. To nie odpowiada numerom przerwań w karcie katalogowej?
Datasheet :
Kod: Zaznacz cały
Table 23. Reset and Interrupt Vectors
Vector
No.
Program
Address(2) Source Interrupt Definition
1 $0000(1) RESET
External Pin, Power-on Reset, Brown-out Reset,
Watchdog Reset, and JTAG AVR Reset
2 $0002 INT0 External Interrupt Request 0
3 $0004 INT1 External Interrupt Request 1
4 $0006 INT2 External Interrupt Request 2
5 $0008 INT3 External Interrupt Request 3
6 $000A INT4 External Interrupt Request 4
7 $000C INT5 External Interrupt Request 5
8 $000E INT6 External Interrupt Request 6
9 $0010 INT7 External Interrupt Request 7
10 $0012 TIMER2 COMP Timer/Counter2 Compare Match
11 $0014 TIMER2 OVF Timer/Counter2 Overflow
12 $0016 TIMER1 CAPT Timer/Counter1 Capture Event
13 $0018 TIMER1 COMPA Timer/Counter1 Compare Match A
14 $001A TIMER1 COMPB Timer/Counter1 Compare Match B
15 $001C TIMER1 OVF Timer/Counter1 Overflow
16 $001E TIMER0 COMP Timer/Counter0 Compare Match
17 $0020 TIMER0 OVF Timer/Counter0 Overflow
18 $0022 SPI, STC SPI Serial Transfer Complete
19 $0024 USART0, RX USART0, Rx Complete
20 $0026 USART0, UDRE USART0 Data Register Empty
21 $0028 USART0, TX USART0, Tx Complete
22 $002A ADC ADC Conversion Complete
23 $002C EE READY EEPROM Ready
24 $002E ANALOG COMP Analog Comparator
25 $0030(3) TIMER1 COMPC Timer/Countre1 Compare Match C
26 $0032(3) TIMER3 CAPT Timer/Counter3 Capture Event
27 $0034(3) TIMER3 COMPA Timer/Counter3 Compare Match A
28 $0036(3) TIMER3 COMPB Timer/Counter3 Compare Match B
29 $0038(3) TIMER3 COMPC Timer/Counter3 Compare Match C
30 $003A(3) TIMER3 OVF Timer/Counter3 Overflow
31 $003C(3) USART1, RX USART1, Rx Complete
32 $003E(3) USART1, UDRE USART1 Data Register Empty
33 $0040(3) USART1, TX USART1, Tx Complete
34 $0042(3) TWI Two-wire Serial Interface
35 $0044(3) SPM READY Store Program Memory Ready
Kod: Zaznacz cały
/* Interrupt vectors */
/* External Interrupt Request 0 */
#define INT0_vect _VECTOR(1)
#define SIG_INTERRUPT0 _VECTOR(1)
/* External Interrupt Request 1 */
#define INT1_vect _VECTOR(2)
#define SIG_INTERRUPT1 _VECTOR(2)
/* External Interrupt Request 2 */
#define INT2_vect _VECTOR(3)
#define SIG_INTERRUPT2 _VECTOR(3)
/* External Interrupt Request 3 */
#define INT3_vect _VECTOR(4)
#define SIG_INTERRUPT3 _VECTOR(4)
/* External Interrupt Request 4 */
#define INT4_vect _VECTOR(5)
#define SIG_INTERRUPT4 _VECTOR(5)
/* External Interrupt Request 5 */
#define INT5_vect _VECTOR(6)
#define SIG_INTERRUPT5 _VECTOR(6)
/* External Interrupt Request 6 */
#define INT6_vect _VECTOR(7)
#define SIG_INTERRUPT6 _VECTOR(7)
/* External Interrupt Request 7 */
#define INT7_vect _VECTOR(8)
#define SIG_INTERRUPT7 _VECTOR(8)
/* Timer/Counter2 Compare Match */
#define TIMER2_COMP_vect _VECTOR(9)
#define SIG_OUTPUT_COMPARE2 _VECTOR(9)
/* Timer/Counter2 Overflow */
#define TIMER2_OVF_vect _VECTOR(10)
#define SIG_OVERFLOW2 _VECTOR(10)
/* Timer/Counter1 Capture Event */
#define TIMER1_CAPT_vect _VECTOR(11)
#define SIG_INPUT_CAPTURE1 _VECTOR(11)
/* Timer/Counter1 Compare Match A */
#define TIMER1_COMPA_vect _VECTOR(12)
#define SIG_OUTPUT_COMPARE1A _VECTOR(12)
/* Timer/Counter Compare Match B */
#define TIMER1_COMPB_vect _VECTOR(13)
#define SIG_OUTPUT_COMPARE1B _VECTOR(13)
/* Timer/Counter1 Overflow */
#define TIMER1_OVF_vect _VECTOR(14)
#define SIG_OVERFLOW1 _VECTOR(14)
/* Timer/Counter0 Compare Match */
#define TIMER0_COMP_vect _VECTOR(15)
#define SIG_OUTPUT_COMPARE0 _VECTOR(15)
/* Timer/Counter0 Overflow */
#define TIMER0_OVF_vect _VECTOR(16)
#define SIG_OVERFLOW0 _VECTOR(16)
/* SPI Serial Transfer Complete */
#define SPI_STC_vect _VECTOR(17)
#define SIG_SPI _VECTOR(17)
/* USART0, Rx Complete */
#define USART0_RX_vect _VECTOR(18)
#define SIG_USART0_RECV _VECTOR(18)
#define SIG_UART0_RECV _VECTOR(18)
/* USART0 Data Register Empty */
#define USART0_UDRE_vect _VECTOR(19)
#define SIG_USART0_DATA _VECTOR(19)
#define SIG_UART0_DATA _VECTOR(19)
/* USART0, Tx Complete */
#define USART0_TX_vect _VECTOR(20)
#define SIG_USART0_TRANS _VECTOR(20)
#define SIG_UART0_TRANS _VECTOR(20)
/* ADC Conversion Complete */
#define ADC_vect _VECTOR(21)
#define SIG_ADC _VECTOR(21)
/* EEPROM Ready */
#define EE_READY_vect _VECTOR(22)
#define SIG_EEPROM_READY _VECTOR(22)
/* Analog Comparator */
#define ANALOG_COMP_vect _VECTOR(23)
#define SIG_COMPARATOR _VECTOR(23)
/* Timer/Counter1 Compare Match C */
#define TIMER1_COMPC_vect _VECTOR(24)
#define SIG_OUTPUT_COMPARE1C _VECTOR(24)
/* Timer/Counter3 Capture Event */
#define TIMER3_CAPT_vect _VECTOR(25)
#define SIG_INPUT_CAPTURE3 _VECTOR(25)
/* Timer/Counter3 Compare Match A */
#define TIMER3_COMPA_vect _VECTOR(26)
#define SIG_OUTPUT_COMPARE3A _VECTOR(26)
/* Timer/Counter3 Compare Match B */
#define TIMER3_COMPB_vect _VECTOR(27)
#define SIG_OUTPUT_COMPARE3B _VECTOR(27)
/* Timer/Counter3 Compare Match C */
#define TIMER3_COMPC_vect _VECTOR(28)
#define SIG_OUTPUT_COMPARE3C _VECTOR(28)
/* Timer/Counter3 Overflow */
#define TIMER3_OVF_vect _VECTOR(29)
#define SIG_OVERFLOW3 _VECTOR(29)
/* USART1, Rx Complete */
#define USART1_RX_vect _VECTOR(30)
#define SIG_USART1_RECV _VECTOR(30)
#define SIG_UART1_RECV _VECTOR(30)
/* USART1, Data Register Empty */
#define USART1_UDRE_vect _VECTOR(31)
#define SIG_USART1_DATA _VECTOR(31)
#define SIG_UART1_DATA _VECTOR(31)
/* USART1, Tx Complete */
#define USART1_TX_vect _VECTOR(32)
#define SIG_USART1_TRANS _VECTOR(32)
#define SIG_UART1_TRANS _VECTOR(32)
/* 2-wire Serial Interface */
#define TWI_vect _VECTOR(33)
#define SIG_2WIRE_SERIAL _VECTOR(33)
/* Store Program Memory Read */
#define SPM_READY_vect _VECTOR(34)
#define SIG_SPM_READY _VECTOR(34)
Tak jak już było objaśniane : Atmel numeruje przerwania od 1 a avr-libc
od 0 i stąd przesunięcie o 1 ( porównanie 1A to u Atmela przerwanie numer 13
a w avr-gcc _VECTOR(12) - to oczywiście tylko umowa co do nazw, adres
wektora jest cały czas ten sam, ustalony sprzętowo( możesz w podglądzie kodu asm
sprawdzić, że wynosi 0x30 ).
Nowsze wersje avr-libc przechodzą na nową technikę obsługi przerwań.
Dawniej istniały dwa makra obsługi : SIGNAL ( z następnymi przerwaniami
zablokowanymi na czas obsługi - tak jak jest to sprzętowo zorganizowane
w AVR ) oraz INTERRUPT ( z odblokowaniem na samym początku dalszych
przerwań co czasem bywa przydatne ). Argumentami makr były umowne
nazwy wektorów typu SIG_xxxx.
To jednak prowadziło do ciągłych nieporozumień - ludzie nagminnie
nie doczytali o tym rozróżnieniu i stosowali INTERRUPT nie wiedząc o
odblokowaniu - a to potrafiło wywrócić program ( przy fladze przerwania
kasowanej programowo w obsłudze - jak np. odbiór znaku wszystko
natychmiast się zapętla ).
Konieczność zmiany była więc dyskutowana od dawna - i obecnie to
zrealizowano : makro obsługi jest jedno : ISR i funkcjonalnie odpowiada
poprzedniemu SIGNAL ( na czas obsługi przerwania wyłączone ).
Makro włączające przerwania wyrzucono całkowicie - jeśli chcemy je mieć
samodzielnie wyposażamy funkcję obsługi w atrybut interrupt,
to zapewnia, że programista wie co robi.
Przy okazji zmieniono nazwy wektorów wg schematu :
nazwa katalogowa ( _ zamiast spacji ) z przyrostkiem _vect
Dla zgodności wstecz pozostawiono na razie makro SIGNAL oraz
poprzednie nazwy SIG, tak więc
SIG_OUTPUT_COMPARE1A i TIMER1_COMPA_vect oznaczają
dokładnie to samo - jest to po prostu podwójna definicja.
Pozdrowienia Jurek S.[/i]
-
- -
- Posty:175
- Rejestracja:10 paź 2003, o 20:44
- Lokalizacja:Białystok
- Kontaktowanie:
AVR nie mają priorytetów przerwań. Po odblokowaniu mogą się wykonaćCzy mogę prosić o jakiś przykład z odblokowaniem przerwań tzn w czasie obsługi przerwania niższego wykonuje się przerwanie o wyższym piorytecie. Mam na myśli ten atrybut inerrupt
wszystkie inne jakie wystąpią. To często komplikuje sprawy zwłaszcza
przy wielu aktywnych źródłach przerwań. Dlatego na ogół zalecany
jest zwykły sposób z ISR - przerwania z odblokowaniem pozostawione są
dla szczególnych przypadków zaś programista musi dokładnie wiedzieć co
chce przez to uzyskać.
Składnia opisana jest w manualu :
deklarujesz prototyp funkcji bez argumentów i nie zwracającej wyniku
o nazwie takiej jak wektor przerwania i opisanej atrybutem interrupt, np.
Kod: Zaznacz cały
void TIMER1_COMPB_vect(void) __attribute__((interrupt));
Kod: Zaznacz cały
void TIMER1_COMPB_vect(void)
{
}
Kod: Zaznacz cały
ISR(TIMER1_COMPA_vect)
{
}
Kod: Zaznacz cały
000002e6 <__vector_12>:
}
ISR(TIMER1_COMPA_vect)
{
2e6: 1f 92 push r1
2e8: 0f 92 push r0
2ea: 0f b6 in r0, 0x3f ; 63
2ec: 0f 92 push r0
2ee: 11 24 eor r1, r1
2f0: 0f 90 pop r0
2f2: 0f be out 0x3f, r0 ; 63
2f4: 0f 90 pop r0
2f6: 1f 90 pop r1
2f8: 18 95 reti
000002fa <__vector_13>:
}
void TIMER1_COMPB_vect(void) __attribute__((interrupt));
void TIMER1_COMPB_vect(void)
{
2fa: 78 94 sei
2fc: 1f 92 push r1
2fe: 0f 92 push r0
300: 0f b6 in r0, 0x3f ; 63
302: 0f 92 push r0
304: 11 24 eor r1, r1
306: 0f 90 pop r0
308: 0f be out 0x3f, r0 ; 63
30a: 0f 90 pop r0
30c: 1f 90 pop r1
30e: 18 95 reti
różnica w interrupt to ponowne - najwcześniej jak to możliwe - włączenie ( sei )
przerwań blokowanych sprzętowo przez mikrokontroler podczas skoku do
obsługi przerwania.
Pozdrowienia Jurek S.
To prawda , ale nie cała.Prawdą jest , że żadne przerwanie nie może być przerwane przez inne , jeśli programista nie zezwoli na to świadomie , ale ... .Wyobraźmy sobie taką sytuację , że w systemie są aktywne np. 2 przerwania , ale z jakiś względów , w programie musimy zablokować system przerwań na czas wykonania "ważnej" czynności , która nie może być przerwana.W tym czasie zostają ustawione flagi naszych 2 przerwań , a program po skończeniu "ważnej roboty" włącza ponownie globalny system przerwań i ... co na to AVR-ek Przecież jedno z tych dwóch aktywnych przerwań , musi wykonać się jako pierwsze.Więc to jest chyba jedyny przypadek , kiedy możemy mówić o swego rodzaju priorytecie...AVR nie mają priorytetów przerwań.
Piotrek
-
- -
- Posty:175
- Rejestracja:10 paź 2003, o 20:44
- Lokalizacja:Białystok
- Kontaktowanie:
Prawda ! Tylko samo pojęcie priorytetu tu się cokolwiek rozmywa.kiedy możemy mówić o swego rodzaju priorytecie
W innych kostkach priorytet oznacza twardo, że niższy może być
przerwany przez wyższy - w AVR mamy raczej tylko zwykłą
kolejność wykonywania obsług ( Ty to wiesz - ale może komuś
czytającemu przydadzą się takie szczegóły ).
Pozdrowienia Jurek S.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 12 gości