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



Teraz jest 22 maja 2026, o 13:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 18 kwi 2013, o 10:43 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

Witam. Jestem początkujący i zastanawia mnie jeden problem. Załóżmy, że mamy program, który odbiera przez USART jakieś znaki używając przerwania. Po odbiorze każdego znaku jest wywoływane przerwanie i wykonywana jakaś funkcja, która obsługuje to przerwanie.

1. Czy podczas wykonywania tej funkcji przerwanie jest zablokowane ?
2. Jeżeli przerwanie jest zablokowane to co się dzieje ze znakami, które powinny być odebrane ?
3. Jeżeli przerwanie nie jest blokowane i znaki są dalej odbierane to czy jednocześnie wykonuje się ta sama funkcja dla różnych odebranych znaków ?
4. Jak długo może wykonywać się taka funkcja w przerwaniu ?

Pytania może banalne dla zaawansowanych programistów. A odpowiedzi bardzo by mi pomogły.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 11:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Przerwanie dla usarta jest generowane w zaleznosci od rodzaju wektora przerwan, ktore wybrales, np. kiedy czeka ona w resjestrze UDR, lub gdy zakonczono nadawnie bajtu albo gdy w buforze odbiorczym nie ma wiecej danych, gdy zawartosc rejestru UDR jest umieszczona w nadajniku. Skoro wiesz czym jest przerwanie, to wiesz, że ona zatrzyma się na ostatniej isntrukcji z programu glównego, odkładając adres na stosie i wykona instrukcje przerwania. Jeśli w przerwaniu masz jakas funckje to ona sie wykona, żeby przerwanie się wykonało.
Ziomek sam wybierasz, kiedy ma być generowane przerwanie, to chyba wiesz, co robisz w programie. No przyszly znaki, i masz wektor przerwan, że kiedy beda robisz przerwanie i zapisujesz je w w jakims buforze.
A jesli przerwanie bedzie zablokowane, to jak chcesz odebrac znak, albo cos innego. Tak jak z przyciskiem nie wcisniesz, nie bedzie przerwanie, przerwanie bedzie zablokowane, to nie odbierzesz sygnalu, ze wcisnales.
A ile razy sie wykona, tyle, az nie bedzie spelniony warunek z wektora przerwan, ktore ustawiles, co nie.

Dokładnie kup książki mirka i zobacz jakie to łatwe w obczjeniu i stosowaniu.

_________________
sig off ;(



Ostatnio edytowano 18 kwi 2013, o 12:49 przez Paul Dirac, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 12:16 
Offline
Moderator
Avatar użytkownika

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

Można by było bardzo dużo o tym pisać, każdy będzie jakoś tłumaczył i wszystko OK, tylko że nadal może być kłopot ....

dlatego ZDECYDOWANIE polecam książkę:

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

bo w niej skupiłem się właśnie od podstaw na opisaniu tego zagadnienia, a dodatkowo zaopatruję czytelnika w przykłady w kodach dla mikrokontrolera nie tylko jeśli chodzi o podstawową obsługę bez przerwań jak w nocie PDF, lecz także właśnie (bo tak się powinno robić) w oparciu o przerwania ale do tego BUFORY CYKLICZNE. Jeśli to przeczytasz to wtedy wszystko stanie się jasne.

A tymczasem odpowiadając szczątkowo na twoje pytania:

1. pewnie że jest zablokowane i to nie tylko to, wszystkie inne przerwania również
2. przerwanie odbiera jeden znak, pozostałe wpadają do bufora sprzętowego jeśli nadlecą w międzyczasie i zostaną obsłużone w kolejnym przerwaniu jak się dobrze program napisze ;)
3. tu już za daleko popłynąłeś w rozważaniach ... gdybyś tak zrobił a miałbyś zbyt szybką transmisję to stos by ci się przepełnił i ZONK. Tak się nigdy nie robi - nie ma takich potrzeb.
4. krótka odpowiedź - ma się wykonywać JAK NAJKRÓCEJ, a to zależy od programisty jak ją napisze i dlatego własnie ....

.... dlatego polecam książkę do której link podałem

_________________
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: 18 kwi 2013, o 12:20 
Offline
Nowy

Dołączył(a): 17 gru 2012
Posty: 17
Pomógł: 1

Przerwania są blokowane na czas obsługi. Można to obejść ale tylko wtedy gdy naprawdę wiesz po co.
Funkcja obsługująca przerwanie musi być możliwe krótka. Nie znaczy to, że ma mieć mało linii musi wykonać się szybko. Nie wstawiamy do obsługi przerwania funkcji _delay() i podobnych funkcji blokujących.
Jeżeli nie skończysz obsługi przerwania przed nadejściem nowego znaku to go stracisz. W przypadku USART'u łatwo to policzyć ile masz czasu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2013, o 12:26 
Offline
Użytkownik

Dołączył(a): 17 mar 2013
Posty: 143
Lokalizacja: Bydgoszcz
Pomógł: 2

Wielkie dzięki za odpowiedzi. Teraz mi się wszystko rozjaśniło. Bufor cykliczny to rozumiem taki bufor z głową i ogonem ? Takie rozwiązanie mi się przyda. A książkę muszę sobie zdecydowanie sprawić :D



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: 5 ] 

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