elektryk napisał: tomasz256 napisał: to Petla2 bedzie wykonywana cały czas więc można tam wrzucić cały wykonywalny program?
Można, tylko "po co"?
A no czasem się przydaje, ale faktem jest, że dość rzadko.
Może to być przydatne, jeżeli procesor ma tryb pracy, w którym aktywne są przerwania, a nieaktywny jest rdzeń i pobiera wtedy mniej prądu. '51 od Atmela tak mają.
Np. cały program sterujący aparatem telefonicznym TSP-91 (budka telefoniczna, niebieski) jest zrobiony tak, że najpierw w głownej pętli jest inicjalizacja, potem uruchamiane są przerwania, a na koniec instrukcja STOP (a może HLT, nie pamiętam ,co tam w motorolce było). W przerwaniach była cała obsługa "otoczenia" procka.
Jeżeli nie trzeba oszczędzać prądu, to takie rozwiązanie tylko komplikuje program i dodatkowo spowalnia jego wykonywanie.
Zazwyczaj robi się tak, że w przerwaniach wykonuje się bardziej "krytyczne" fragmenty programu, gdzie bardzo ważne jest, w którym momenci się on wykona. Na przykład termometr, powiedzmy że mmamy jakiś wyimaginowany cyfrowy detektor temperatury z magistralą I2C, czyli synchroniczną. W głównej pętli mamy odczyt temperatury i przeliczanie wyniku. Nawet, jeżeli te dwie operacje zostaną przerwane przez przerwanie (

), to nic się nie stanie. A w przerwaniu mamy sterowanie wyświetlaczami LED (multipleksowane) i gdyby ta operacja została przerwana, to wyświetlacz na chwilę się zatrzyma (będzie świeciła tylko jedna cyfra)
Można to jeszcze wykorzystać do prostego multitaskingu. W przerwaniu co jakiś czas będzie się wykonywał scheduler, czyli program zarządzający zadaniami. W zasadzie zrobienie takiego multitaskingu bez alokacji zasobów to banał na 5 minut, wystarczy tylko przydzieić miejsce na kilka osobnych stosów (każde zadanie musi mieć własny) i po wywołaniu przerwania zrzucić tam rejestry. Potem wybiera się zadanie, które ma być wykonane (np. po kolei w systemie "każdemu po równo" 1, 2, 3, 4...). Przestawić wskażnik stosu na stos danego zadania, pobrać ze stosu wszystkie rejestry i wykonać instrukcję RETI.
A co do przewidywania, w którym momencie wykona się przerwanie - jest to jak najbardziej możliwe, ale jest równoznaczne z symulacją danego programu, inaczej się nie da, bo przerwanie zawsze jest wywoływane dopiero, gdy zakończy się instrukcja wykonywana w momencie zgłoszenia przerwania, a różne instrukcje wykonują się w różnej ilości cykli.
Użycie na raz kilku przerwań nie będzie powodowało błędów, pod warunkiem, że program będzie napisany prawidłowo.