(27-02-2020, 17:36)Agregacik napisał(a): Czyli w takim przypadku w funkcji obsługi przerwania trzeba "gasić" poszczególne wywołania po obsłużeniu.
Temat raczej na książkę niż forum i raczej duże systemy niż mikrokontrolery. Zapoznaj się z przerwaniami maskowalnymi np Z80 w trybie IM1, czy 6502, 68k tryb autowektor. Do tego peryferiami do w/w CPU.
W skrócie, gdy do jednej linii przerwania masz podłączone kilka układów zgłaszających je (suma logiczna na drucie) to przerwanie może zgłosić kilka układów na raz lub w jednym układzie wystąpić kilka zgłoszeń albo w czasie obsługi przerwania pojawić się kolejne. Przypuśćmy, dostajesz przerwanie z UART, odbierasz znak, to najczęściej automatycznie kasuje przerwanie ale w czasie wyjścia z przerwania przychodzi kolejny znak. UART znów ustawia L żądając obsługi. CPU wychodzi z przerwania po oczy ponownie w nie wchodzi.
Inna sytuacja, kilka układów na jednej linii przerwania. Obsługujesz jedno przerwanie a w tym czasie inny układ żąda obsługi.
Jak sobie to dobrze przeanalizujesz, wszystkie możliwe przypadki, to stwierdzisz, że obsługa zboczem może doprowadzić do tego, że linia przerwania jest aktywna a CPU "hula" w programie głównym i już nigdy nie obsłuży przerwania chyba, że w programie głównym tez będzie kasował zgłoszone przerwania ale jak program napisany jest po arduinowemu, to w ten sposób przerwania mogą być odblokowane po kilku czy kilkudziesięciu sekundach i miliony zdarzeń (np znaków z UART) przepadnie.
Jak wgryziesz się w temat, to zrozumiesz jak spie... konstrukcja PC AT/XT i podobnych z ISA i problemy z przerwaniami, zworkologia itp. Co dziwne, kontroler przerwań, mógł pracować w "normalnym" trybie, reagując na poziom niski, niestety, w przypływie nie wiem czego, wybrano bezsensowny w tym przypadku tryb reakcji na zbocze narastające przez co w praktyce do jednej linii przerwania można było przyłączyć jedno źródło (co w sytuacji gdy układ miał wewnętrznie kilka źródeł przerwania?). Jak pamiętam z 7 przerwań w PC AT jedno czy dwa były już zajęte. Zostawało 5. Więcej źródeł miał chociażby C-64! Ale tam mądrze wybrano zgłaszanie poziomem! XT miał "aż" 15 linii ale nadal były problemy. Dopiera PC z PCI miało zrobione przerwania w "normalny" sposób.
Jak przyjżysz się konstrukcji PC, jaka była beznadziejna, to zdziwisz się jakim cudem zdobył taką popularność?
Co był źle w PC? Wszystko:
- CPU: 8086, chyba gorszego na tamte czasy nie było CPU 16-bit.
- Przerwania juz wiesz.
- DOS: najgorszy istniejący.
- Cena: pierwsze PC 16kB RAM, "aż" 3 kolory: świeci, nie świeci, średnio świeci - słynny HERKULES, późniejsza CGA i podobne z "aż" 16 barwami w sytuacji gdy konkurencja miał od 32 do 256.
Później nie lepiej:
- "System" Windows 3.x: tak naprawdę nakładka na DOS, praktycznie bez multitaskingu, w tym czasie konkurencja oferuje prawdziwą wielozadaniowość.
- Win95/98: Ukrycie faktu, że to nakładka na DOS. Reklamowany jako pierwszy prawdziwy multitaskimg. Dwa kłamstwa, nie pierwszy (mac OS, Unix już dawno istniał jakieś 20 lat no chyba, że sensie pierwszy firmy Micro$oft) no i nie prawdziwy bo jeśli tak, to czemu system "zamiera" na nawet 30 sekund lub dłużej (nawet na 10 takie rzeczy się dzieją).
PC to po prostu szmelc! Produkty u$oft też.