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



Teraz jest 29 mar 2024, o 11:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 17 mar 2021, o 23:31 
Offline
Moderator
Avatar użytkownika

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

edwardkraweznik napisał(a):
Kod działa tak jak ma działać(nie blokuje procesora). Czy moje podejście jest poprawne?

Jak to nie blokuje jak blokuje. Na krócej ale niestety paskudnie blokuje. Dlatego odbiór danych przez UART robi się za pomocą przerwań od UART'a i to najlepiej z użyciem bufora cyklicznego. Dopiero wtedy masz w 100% nieblokującą obsługę.

Już nie wspomnę o delayach w pętli głównej które niszczą nieblokujący charakter ewentualnych innych rozwiązań.

Polecam Bluebooka https://atnel.pl/mikrokontrolery-avr-jezyk-c.html - gdzie będziesz mógł zobaczyć jak się do tego podchodzi a szczególnie jak zacząć pisać nieblokujące programy bez żadnych delayów.

_________________
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 mar 2021, o 07:59 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Źródła odpalisz, poza tym teraz to chyba dostajesz time linka do ściągnięcia materiałów z sieci.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2021, o 09:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2019
Posty: 147
Pomógł: 37

Nieblokujący odbiór bez wykorzystania przerwań:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W main loop:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Main loop musi się kręcić wystarczająco szybko by nadążać za odbieranymi znakami. Na przykład dla nieprzerwanej transmisji 115kbps nowy znak pojawia się co 86us (694 takty przy zegarze 8Mhz) a więc main loop musi trwać krócej by nie zachodziło gubienie znaków.

_________________
Think for yourself and question authority.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2021, o 14:00 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 393
Lokalizacja: Mielec
Pomógł: 14

Witam.
Fofex - wyliczenia spoko, a co z funkcjami które napiszesz i będą wykonywać dłuższe "prace"?
Co chwila będziesz if'a wkładał w każdą funkcje by sprawdzić czy coś nadeszło na uart? Zgubisz/stracisz znaki z uart to pewne.

Mirek już wskazał prawidłowe podejście do tematu.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2021, o 14:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2019
Posty: 147
Pomógł: 37

Po co na siłę lansować "jedynie słuszne" rozwiązanie w przypadkach gdy polling jest wystarczający?
Ale tu nie o to chodzi, a o pokazanie pewnego, często wykorzystywanego, schematu budowania aplikacji tj. symulacji wielozadaniowości.
W uzupełnieniu. Można zauważyć, że funkcja odbiorcza ma poważną wadę tj. nie pozwala na odebranie danej o wartości zero. Znacznie lepiej zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

albo krócej i czytelniej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

main loop
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Think for yourself and question authority.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2021, o 14:39 
Offline
Moderator
Avatar użytkownika

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

fofex napisał(a):
Po co na siłę lansować "jedynie słuszne" rozwiązanie w przypadkach gdy polling jest wystarczający?


pooling dla RS232 jest właśnie NAJCZĘŚCIEJ Niewystarczający i zawodzi gdy tylko pojawi się byle dłuższe opóźnienie, szczególnie gdy ktoś zaczyna z tematem. Dlatego taki sposób to może się czasem przydać komuś kto od lat już siedzi i programuje czując dokładnie całą konstrukcję programu.

Poza tym tu nie chodzi o żadne bezsensowne "lansowanie" tylko o zwrócenie uwagi jak należy to porządnie zrobić - czyli na przerwaniach i z buforami cyklicznymi, dzięki czemu można odbierać i w trybie ASCII i BINarnym. A nie takie protezy poolingowe.


Autor postu otrzymał pochwałę

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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO