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



Teraz jest 20 mar 2026, o 06:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 3 lip 2015, o 09:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

W skrócie _delay_ms(); czy _delay_us(); zatrzymują pracę programu na określony czas. Procesor nie może wykonywać w tym czasie innych zadań.
Raczej używa się terminu "funkcja nieblokująca" czyli taka, która nie używa delay'ów tylko przerwań, zdarzeń czy timerów programowych.
Poczytaj w BB o timerach sprzętowych szczególnie "Tryb CTC - jeden z najważniejszych", oraz rozdział "Wstęp do systemów czasu rzeczywistego". ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2015, o 09:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

musiałeś natrafić na to w BB widać zapomniałeś że o tym czytałeś :)

delay_ms czy też delay_us po prostu blokuje pracę procesora w taki sposób że żadna inna funkcja nie zostanie wykonana w momencie gdy obieg pętli trafi na delay zablokuje pracę procesora jak i jego timerów na zadany czas.

Zakładając że masz program gdzie dioda ma mrugać co 0,5 sek i obsługujesz te mruganie timerem to w momencie gdy program trafi na delay wydłuży czas mrugnięcia diody z powodu iż cała praca procesora zostanie zatrzymana.

Jak będziesz chciał kliknąć klawisz to zadziała on tylko wtedy gdy obieg pętli nie jest w delayu bo wtedy praca procka jest zablokowana i przycisk nie zadziała, zadziała dopiero jak pętla ruszy dalej.

Mam nadzieję że nie zamieszałem za mocno i udało mi się to łopatologicznie wytłumaczyć.

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lip 2015, o 16:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Poniżej mały przykład jak np. delaye blokują działanie pętli głównej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dioda LED2 w pętli głównej zmienia stan co 2,5s i co 5s. Inne procesy, np. sprawdzanie klawiszy, wykonują się co 7,5s. Na czas delayów pętla główna "stoi" bo procesor jest zajęty odliczaniem czasu poprzez te nieszczęsne delaye. Dlatego to właśnie jest sposób blokujący.

W tym czasie jedynie włączone przerwania będą działać. Potwierdza to dioda LED1, która ładnie sobie miga co kilkaset ms. Mimo, że pętla główna "stoi".

Do blokujących części programu należą także przydługawe wszelakie pętlę np. while, for. I znów mały przykład
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dioda LED1 w przerwaniu miga sobie niezmiennie.
Dioda LED2 miga co ok. 100ms, ale dioda LED3 zmienia stan co kilka sekund. Program w pętli for ładnie miga diodą ale to co jest poza pętlą for czyli miganie LED3 i sprawdzanie klawiszy "stoi" na czas wykonywania się tej pętli for. Czyli z punktu widzenie programu pętla for na czas swoich obiegów blokuje działanie reszty pętli głównej.

Z tego wynika, że blokujące części programu to nie tylko delaye.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lip 2015, o 20:29 
Offline
Moderator
Avatar użytkownika

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

multitask napisał(a):
(ponoc odbieranie nie działa po użyciu _delay)

A powiedz mi skąd bierzesz takie opowieści i bajania ? ;)

Zamiast słuchać takich bajek - sam postaraj się przećwiczyć z Bluebooka bo widzę, że masz - jak działa buforowanie cykliczne i jak jest robiona transmisja UART na przerwaniach. To już później nigdy nie dasz sobie wmówić takich rzeczy ;)

W skrócie - gdy trwa najdłuższy delay ;) to transmisja na przerwaniach leci aż miło .... ;)

_________________
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: 7 lip 2015, o 08:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

Bufor cykliczny (ang. ring buffer), ja podglądam tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Co prawda _delay_ms(1000) zakrywa przerwanie - efekt widać na PB1 ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2015, o 09:25 
Offline
Moderator
Avatar użytkownika

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

multitask napisał(a):
Mirku ! czy byłbyś tak uprzejmy i podesłał mi jakieś przykłady do przeanalizowania?

Powiedz mi - bo takimi pytaniami wprowadzasz mnie w konsternację albo duże zakłopotanie - no masz w podpisie na forum informację, że posiadasz nie tylko Bluebooka ale nawet Greenbooka - a ty piszesz mi - żebym ja ci podesłał jakieś przykłady do przeanalizowania .... No to ja na to żegnam się teraz lewą nogą po plecach ;) nie mogąc zrozumieć o co ci chodzi - skoro masz to w książce z Bluebooku (odbiór na przerwaniach i opis buforowania cyklicznego) ... w GB masz dalsze z tym przygody czyli odbieranie i parsowanie stringów .... o co więc tu i teraz tobie chodzi - możesz to sprecyzować ?

------------------------ [ Dodano po: 1 minucie ]

multitask napisał(a):
Są różne teorie dlatego warto je sprawdzać w kilku zródłach

Co do teorii i to takich o jakich tu piszesz - to rzeczywiście IDEALNĄ odpowiedzią na to jest post kolegi mokrowskiego :lol: ! :lol:

_________________
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: 7 lip 2015, o 10:13 
Offline
Moderator
Avatar użytkownika

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

multitask napisał(a):
a tak serio powalczę dzis troszkę z C

No więc DOKŁADNIE - zamiast wprawiać się w poczucie winy, otwórz Bluebooka i przeczytaj rozdział o obsłudze UART za pomocą przerwań i o buforze cyklicznym.

_________________
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: 7 lip 2015, o 12:12 
Offline
Moderator
Avatar użytkownika

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

multitask napisał(a):
ew jak odbierać całe stringi ?

Kurczę - kolego - GREENBOOK - rozdział o UART masz to wyjaśnione krok po kroku i to na dodatek dużo więcej informacji

zaglądałeś do tego rozdziału ? Bo albo nie masz tej książki i wtedy niepotrzebnie umieściłeś ją w podpisie albo już nie wiem o co chodzi ....

Przeczytaj więc ten rozdział i daj znać wtedy czego nie rozumiesz ?

_________________
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: 10 lip 2015, o 13:51 
Offline
Moderator
Avatar użytkownika

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

multitask napisał(a):
Mam pytanie
jeśli zarejestruję
register_uart_str_rx_event_callback ( analizuj_dane );
przestaje mi działać nadawanie z uarta w innym miejscu niż while(1)

Nadawanie nie ma NIC WSPÓLNEGO z callbackiem, który jest TYLKO do odbioru, więc pewnie gdzieś tam jakiegoś babola robisz z tym wysyłaniem

multitask napisał(a):
czy w obsłudzie przerwania to zrobić == dobry pomysł ?

raczej średnio koci pomysł - tzn teoretycznie można ale to bez sensu ... zainteresuj się teraz timerami programowymi, bo peklowanie czegoś do przerwania żeby się robiło co 5 sekund czyli co wieczność to po prostu koszmar

temat dla ciebie to: timery programowe

_________________
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: 10 lip 2015, o 14:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Poszukaj w BB

Dla przypomnienia kolega @Jaglarz zrobił skorowidz do BB do pobrania w tym temacie
http://forum.atnel.pl/post51576.html?hilit=skorowidz#p51576



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

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