Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 11:49


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
 Tytuł: Przerwania
PostNapisane: 4 maja 2012, o 09:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Jak to jest możliwe, że w projekcje wielozadaniowym przerwania nie nakładają się np. kliknięcie na pilocie podczas przerwania LED 7 segmentowego lub na odwrót. Może taka sytuacja zaistnieć także podczas przesyłania tekstu z komputera po RS232. Wydaje mnie się, że może nastąpić kolizja przerwań. Oczywiście są jeszcze inne przerwania np. co 1s. Proszę o odpowiedź.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 10:56 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

O i teraz podałeś fajne konkretny przypadek w pytaniu - na który mogę już jaśniej (mam nadzieję odpowiedzieć)

chodzi nam o rozpatrzenie np działania jednocześnie 3 przerwań. Co 1s, przerwania od pilota i przerwania od UART

pomyśl sobie - każde z przerwań wykonuje się tak krótko - że po pierwsze akurat ich kolizja - czyli wystąpienie dokładnie w tym samym czasie jest niewielkie - ale oczywiście na pewno się przydarzy ;) .... wyobraź sobie zatem, że nadleciało przerwanie od odbiornika podczerwieni i wykonuje się jakiś krok dekodowania całej ramki.... w tym czasie zgłaszane jest przerwanie od UART bo właśnie nadleciał znak. Ale nie zostanie ono obsłużone bo wykonuje się inne - tzn nie to że nie zostanie w ogóle nie obsłużone, zapali się FLAGA sprzętowa tego przerwania że takie wystąpiło, i natychmiast po zakończeniu procedury przerwania dekodowania ramki, procesor wykona jedną instrukcję programu głównego - potem sprawdzi że pali się flaga przerwania od UART i natychmiast wykona chociaż nieco opóźnione kolejne przerwanie ;) w którym to odbierze się znak nadlatujący z UART

rozumiesz ? to że nawet w trakcie przerwania wystąpi inne to nie oznacza że ono zaginie - zostanie zaraz po tym obsłużone w normalny sposób a pomiędzy nimi wykona się jeden cykl rozkazowy jeszcze z programu głównego

takim sposobem mamy mnóstwo czasu - zakładając że piszemy bardzo krótkie procedury obsługi przerwań i chyba teraz widzisz z czym to się wiąże.....

bo gdyby np procedura dekodowania ramki trwała baaaardzo długo - ktoś by tam wstawił jeszcze jakiegoś _delay'a albo obsługę LCD - to mogłoby dojść wtedy rzeczywiście do niebezpiecznej sytuacji, że w trakcie jego obsługi przyszłoby kilka przerwań po sobie od UART bo odbieranych byłoby kilka znaków - ale flaga przerwania jest TYLKO JEDNA, więc tak na prawdę po zakończeniu tego długaśnego źle napisanego przerwania - wykonałoby się tylko jedno przerwanie od UART czyli odebrałby się tylko jeden znak (to oczywiście w sporym uproszczeniu bo akurat z UART'em jest o tyle dobrze że posiada on aż 3-poziomowy własny bufor na odbierane znaki - dzięki czemu - na prawdę trzeba się mocno postarać żeby spaprać aż tak procedury obsługi przerwań ;)

teraz troszkę jaśniej ? czy jeszcze nie do końca ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 14:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Tak jaśniej, a co w przypadku kolizji czy także przerwanie nie ginie?
Wiem, że jest priorytet i wektor o niższym numerze wykona się jako pierwszy, lecz co z drugim?
Czy potrzebnie martwię się tym, bo dochodzę do wniosku, że przy tak krótkich przerwaniach nie ma czym?

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 14:06 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

filipo96 napisał(a):
Tak jaśniej, a co w przypadku kolizji czy także przerwanie nie ginie?
Wiem, że jest priorytet i wektor o niższym numerze wykona się jako pierwszy, lecz co z drugim?
Czy potrzebnie martwię się tym, bo dochodzę do wniosku, że przy tak krótkich przerwaniach nie ma czym?

Ale przeczytaj Kolego jeszcze raz dokładnie co wyżej napisał Ci Mirek.
Przecież tam są odpowiedzi na Twoje pytania ;)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 14:23 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

MirkoT napisał(a):
Ale przeczytaj Kolego jeszcze raz dokładnie co wyżej napisał Ci Mirek.
Przecież tam są odpowiedzi na Twoje pytania ;)


No dokładnie ;) ..... chyba że ty coś specyficznego rozumiesz pod pojęciem "kolizja przerwań" .... ale ok najpierw przeczytaj jeszcze raz dokładnie to co napisałem wyżej albo opisz co wg ciebie może oznaczać kolizja - bo ja nie widzę żadnych możliwości kolizji, wszystko będzie załatwiane po kolei tak jak opisałem wyżej ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 16:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Ja tam widze tylko na to co w przypadku podczas wykonywania przerwania wystąpi inne.
Kolizja to jednoczesne wystąpienie kilku przerwań np. tylko dwa. Moje pytanie brzmi co się stanie stanie z przerwaniem, które będzie miało nizszy priorytet. Czy zginie? Czy zostanie odlozone na stos? Mówimy o jednoczesnym zaistnieniu kilku przerwań.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 17:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

No to aż ci zacytuję to co pisałem wyżej:

mirekk36 napisał(a):
... to że nawet w trakcie przerwania wystąpi inne to nie oznacza że ono zaginie - zostanie zaraz po tym obsłużone w normalny sposób a pomiędzy nimi wykona się jeden cykl rozkazowy jeszcze z programu głównego


więc o jakim zaginięciu mówisz - nic nie zaginie ale też żadne przerwanie które wystąpi niejako w tle nie zostanie odłożone na stos

nie ma takiego pojęcia w ogóle jak:

"odłożenie przerwania na stos" :(

jeszcze raz powtarzam - jak przyjdzie to drugie przerwanie w trakcie gdy wykonuje się obsługa wcześniejszego - to ustawiana jest tylko sprzętowo flaga o jego zaistnieniu w odpowiednim rejestrze flag danego modułu

i jak się zakończy ta obsługa - to wtedy jest wykonywane przez procesor to przerwanie którego flaga jest zapalona/ustawiona

więc nic ci nie zniknie ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 17:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Ale mnie chodzilo o przypadek gdy dwa przerwania wystąpia w tym samym momencie.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 18:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Wiesz wydaje mi się ze taka sytuacja nigdy wystąpi , a jeśli już to będzie to tak marginalne zdarzenie , ze można je spokojnie pominąć. Nawet jeśli tobie sie będzie wydawało że zrobiłeś coś jednocześnie , to i tak procek to będzie widział zupełnie inaczej :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 4 maja 2012, o 18:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Dziękuję wszystkim za pomoc:
Sunriver-owi
Mirkowi.
Musze się przyznać, że dreczylo mnie to odkad poznalem mikrokontrolery.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 07:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Ok. Wszystko już rozumiem oglądem bibliotekę do obsługi 1Wire i spojrzałem na funkcję ow_reset.
Zobaczyłem tam nie tylko globalne wyłączenie przerwań, ale jeszcze 3x _delay_us razem w sumie wychodzi około 1ms.
Co się stanie jeżeli przerwanie wystąpi podczas _delay_us lub za cli().
Jaki jest tego prawdopodobieństwo?

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 08:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

Duże prawdopodobieństwo a nawet pewność, jeśli będziesz używał wielu przerwań jednocześnie.

Ale nie do końca mogę zrozumieć, dlaczego znowu pytasz co się stanie z przerwaniem po cli(); ???? cli to jak wiesz wyłączenie globalnego zezwolenia na przerwania ale widzę, że do ciebie w ogóle nie dociera co to są sprzętowe flagi przerwań :(

ok - już trzeci raz - ale jeszcze raz to napiszę może innymi słowami - może teraz uda mi się dotrzeć.

nie ważne czy był rozkaz cli() czy inne przerwanie jest w trakcie wykonywania bo to podobna sytuacja jeśli chodzi o nadejście nowego przerwania.

zajrzyj sobie do noty PDF dowolnego procka AVR - weź np rejestr timera w m8 o nazwie TIFR - i poczytaj do czego on jest. Podobny rejestr ma praktycznie każdy moduł sprzętowy....

np flaga TOV1 - to flaga od przerwania przepełnienia. USTAWIANA SPRZĘTOWO czyli przez procesor.

co to znaczy?

że jak masz cli() albo wykonywane jest inne przerwanie - to procesor zapali tą flagę

gdy ponownie odblokujesz przerwania albo zakończy się jakaś procedura obsługi przerwania - to procesor sprawdza zgodnie ze swoimi priorytetami po kolei wszystkie rejestry flag. I jeśli któraś jest zapalona oraz jest zezwolenie na to przerwanie - to panie kochany - właśnie to przerwanie jest natychmiast wtedy wykonywane

----------

całkiem inną rzeczą jest to co się stanie podczas _delay_ms w trakcie obsługi 1wire

ale niestety mieszasz wiele rzeczy naraz i dlatego trudno ci to ogarnąć nie rozumiejąc podstaw działania przerwań z tymi flagami chociażby.

Jednak odpowiem ci co się stanie gdy przyjdzie przerwanie podczas tego _delay_us() gdy nie było cli - to opóźnienie zostanie przerwane i wydłużone o czas wykonania się jakiegoś przerwania które nastąpi. Z tym że w tej bibliotece chronione są tylko NAJWAŻNIEJSZE odcinki czasowe - te które mają mniejsze znaczenie i nie spowodują błędu jeśli się czas nieco wydłuży - nie są chronione przez sekcje cli sei

teraz jak? jaśniej znowu troszkę ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 15:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Tak jaśniej, czyli jeżeli przerwanie wystąpi podczas tego _delay to procesor skoczy do obsługi przerwania, a następnie powróci do _delay, czy nie? Jeżeli nie to _delay będzie trwał krócej + czas na obsługę przerwania, jeżeli natomiast tak to będzie trwał dłużej o czas obsługi przerwania. Czy zgadza się moje rozumowanie?

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 18:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

Przerwanie jak sama nazwa wskazuje - przerywa na moment wykonywanie programu głównego a potem gdzie miałoby wrócić ? ;) oczywiście że w to samo miejsce dokładnie skąd nastąpił skok. Zatem wspomniana pętla _delay będzie dalej kontynuowana i nawet nie zauważy że ktoś ją uśpił ;)

oczywiście że będzie trwać dłużej o czas wykonania się przerwania - jakżeby inaczej ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

To dla czego niektórzy narzekają na 1wire, że niby coś mruga na led 7 segmentowym i inne?
Spotkałem się z takimi opiniami i mnie to trochę zniechęciło.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

kwestią mrugania jest odpowiednie napisanie obsługi wyświetlaczy LED 7seg i ich multipleksowania,
a właściwie chodzi o dobranie odpowiednich czasów wyświetlania i częstotliwości zmian, zauważ kolego że sporo ludzi
zbyt często aktualizuje dane na wyświetlaczu , i za często czyta np DSy co w efekcie robi się mało przejrzyste i może powodować
migotanie (zbyt częste odświeżanie wyniku na wyświetlaczach) sporo ludzi robi ten sam błąd i na LCD przez co tez wskazania tracą czytelność.

A wszystko przez nieumiejętność programowania.

Np: czytają DSa i odświeżają wynik co 0,5s a na dodatek ustalaja dokładność do dwóch miejsc po przecinku i co się dzieje w efekcie ??

wyświetlacz migocze :)

a po co ?? skoro wystarcza dokładność do pół stopnia i odświeżanie co np 2-5 s??

teraz rozumiesz .

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lis 2011
Posty: 302
Lokalizacja: Kraków
Pomógł: 6

Tak rozumiem. Dziękuję wszystkim którzy pomogli mi zrozumieć te pojęcia i przekonać do 1Wire.
Mało jest ludzi, którzy chcą pomóc i zrozumieć. Jeszce raz szczerze dziękuję.

_________________
Zapraszam:
filiporlo.blogspot.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 19:16 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

No widzisz - ja też właśnie widziałem ostatnio na pewnym znanym forum, jak to co i rusz ktoś psioczył żeby nie robić 1wire na AVR na przerwaniach - bo to ... bo siamto... że lepiej zrobić to na UART.... itd itp

dlatego się wkurzyłem i pokazałem to:

http://mirekk36.blogspot.com/2011/09/fa ... mow-z.html

warto zobaczyć - bo to jest właśnie zaprzeczenie tych dziwnych narzekań .... jeśli nie widziałeś tego filmiku to spójrz - ile rzeczy naraz można pogodzić razem z 1wire w małym AVR'ku i bez żadnych problemów

Tylko tak jak pisze wyżej SunRiver trzeba odpowiednio podejść do tematu odnośnie pisania programu a nie sięgać zaraz może po ARM'a w tym celu

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 20:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

hehe Mirku myślę, że tu już wskazany byłby I7 intela bo arm też gdzieś widziałem opis że nie wydala 1wire, I2C i multipleksu na 6 wyświetlaczy 7 seg naraz , a to można tak ładnie na Tince puścić i jakoś niema problemów.

Kłopot chyba polega na powielaniu internetowych programów i bibliotek :(

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Przerwania
PostNapisane: 5 maja 2012, o 20:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

SunRiver napisał(a):
Kłopot chyba polega na powielaniu internetowych programów i bibliotek :(


O właśnie to może być sendo sprawy - ale właśnie dlatego zachęcam i w pierwszej książce ale tak samo w drugiej, do przynajmniej pobawienia się w tworzenie takich bibliotek - sam zresztą opisuję pewną znalezioną w necie do 1wire - ale bardzo mocno przeze mnie zmodyfikowaną (można porównać z oryginałem bo przecież podaję źródła oryginału) ...

.... ale jak niektóre osoby bez nawet zajrzenia do środka zaczynają tylko korzystać z tych bibliotek jak z gotowców - bez pochylenia się nad tym co w środku to potem nie dziwota - że sporo rzeczy nie wychodzi - a jedyną receptą jest wybranie coraz większego i szybszego procka - skończywszy na wspomnianym wyżej I7 ;) Intela

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO