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



Teraz jest 29 lis 2024, o 06:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
 Tytuł: Obsługa flagi
PostNapisane: 4 lis 2013, o 14:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Mirku, małe pytanko odnośnie poradnika.
Rozumiem mechanizm sprawdzania flagi sprzętowej od przerwania (ten bez wykonania obsługi przerwania). Ale dlaczego kasowanie flagi odbywa się przez wpisanie jedynki. Wiem, że w nocie jest to opisane. Ale jednocześnie jest tam napisane, że po wystąpieniu zdarzenia na pinie (INT0,1,2) flaga ustawia się na jedynkę. A jej skasowanie też polega na wpisaniu jedynki... Nico to dziwne. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 15:20 
Offline
Moderator
Avatar użytkownika

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

sq8dsr napisał(a):
Wiem, że w nocie jest to opisane. Ale jednocześnie jest tam napisane, że po wystąpieniu zdarzenia na pinie (INT0,1,2) flaga ustawia się na jedynkę. A jej skasowanie też polega na wpisaniu jedynki... Nico to dziwne.


A zobacz jak to jest z Fusebitami w AVR'ach ;) czy też aby przypadkiem nie jakby odwrotnie ? ;)

i właśnie taka sama jakby odwrotna logika obowiązuje praktycznie dla WSZYSTKICH flag w AVR'ach ale i tak pewnie zawsze jak coś sprawdzać sobie to w nocie ...

zrobili tak - że TYLKO WPISANIE - JEDYNKI - na pozycję tego bitu flagi - dokonuje tak na prawdę jej wyzerowania.

Trzeba to w głowie potraktować sobie jako taki swego rodzaju mechanizm - no bo tak jest w rzeczywistości, ;) pewnie tak tam sobie w środku poustawiali jakieś przerzutniki JK :lol: albo inne rejestry przesuwne - że wygodniej im aby wpisać jedynkę - a w efekcie końcowym - jakiś już przerzutnik dalej - dokona skasowania (wyzerowania) tej flagi

Jak mówię - zajrzyj sobie do flag nie tylko przerwań INTx ale do flag przerwań timerów, ADC, komparatora i innych - praktycznie wszędzie to samo

na początku też byłem skonsternowany - ale jak już się człowiek przyzwyczai to robi to z pamięci ;)

_________________
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  
PostNapisane: 4 lis 2013, o 15:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

No właśnie, bo jakby aktywna flaga była zerem, to by się ją kasowało jedynką. A tak wpisanie jedynki daje zero w rejestrze. Faktycznie to musi być jakiś wewnętrzny sprzętowy myk. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 16:26 
Offline
Moderator
Avatar użytkownika

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

oczywiście że drugi warunek nie będzie spełniony z tego powodu że my ręcznie "NIBY" wpisaliśmy jedynkę ;) ... ale ...

ale ... jeśli pomiędzy tymi warunkami wystąpi jednak fizycznie przerwanie z jakichś względów to drugi IF może się wykonać ale tylko dlatego że to procek sprzętowo ustawi flagę na JEDEN sygnalizując że jest przerwanie.

------------------------------

Podsumowując warto jeszcze pamiętać o tym, że jeśli tylko użylibyśmy wektora przerwania ... czyli fizycznej procedury obsługi przerwania po zezwoleniu na nie - to oczywiście w takie sytuacji procek sam sobie wyzeruje te flagi po wykonaniu przerwania.

_________________
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  
PostNapisane: 4 lis 2013, o 18:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

mirekk36 napisał(a):
to oczywiście w takie sytuacji procek sam sobie wyzeruje te flagi po wykonaniu przerwania.

Tak tak, o tym nota wyraźnie wspomina, że po zakończeniu obsługi przerwania flaga jest zerowana.

Natomiast ciekawą rzecza jest takie coś. Nie wiem czy dobrze rozumiem.

1. zdarzenie ustawiło flagę
2. sprawdzamy czy flaga jest ustawiona -> PRAWDA
3. zerujemy flagę (wpisujemy jedynkę) a w tym samym takcie CPU pojawia się zdarzenie które znowu ustawia flagę.

Czyli proc tak jakby potrafi ustawić te flagę pomiedzy wykonywanymi rozkazami ASM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 19:19 
Offline
Moderator
Avatar użytkownika

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

sq8dsr napisał(a):
3. zerujemy flagę (wpisujemy jedynkę) a w tym samym takcie CPU pojawia się zdarzenie które znowu ustawia flagę.

Czyli proc tak jakby potrafi ustawić te flagę pomiedzy wykonywanymi rozkazami ASM.


najpierw sprecyzuj o jakim języku piszesz ? Bo pomiędzy takimi dwoma IF'ami w C może się dużo zdarzyć jeśli chodzi o asembler ...

ale w czystym asemblerze operacja zerowania flagi jest atmowa czyli trwa w jednym cyklu ... a zatem już chyba sam sobie odpowiesz, że nie może być "w międzyczasie" z tego punktu widzenia ;)

_________________
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  
PostNapisane: 6 lis 2013, o 01:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

mirekk36 napisał(a):
ale w czystym asemblerze operacja zerowania flagi jest atmowa czyli trwa w jednym cyklu

Mi chodziło o to, że ustawienie flagi jest jakby czynnością realizowaną sprzętowo, przynajmniej tak je rozumiem.
I co się stanie jeśli zbocze wyzwalające pojawi się pomiędzy taktami CPU..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2013, o 07:20 
Offline
Moderator
Avatar użytkownika

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

sq8dsr napisał(a):
Mi chodziło o to, że ustawienie flagi jest jakby czynnością realizowaną sprzętowo, przynajmniej tak je rozumiem.
I co się stanie jeśli zbocze wyzwalające pojawi się pomiędzy taktami CPU..


No sprzętowo ale operacja

GIFR |= (1<<INTF0);

zostanie w skompilowana w asemblerze do JEDNEJ instrukcji, a to oznacza, że zostanie wykonana właśnie w 1 cyklu - no a to oznacza, że nie może się zdarzyć NIC pomiędzy - bo to co wykonywane w 1 cyklu to właśnie operacja tzw atomowa

czyli mamy tu do czynienia TYLKO z możliwością wystąpienia przerwania INT0

1. tuż przed zerowaniem flagi - wtedy właśnie jeśli kolejna operacja skasuje flagę to już to przerwanie NIGDY nie nastąpi
2. tuż po zerowaniu flagi - wtedy oczywiście przerwanie może nastąpić

_________________
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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO