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



Teraz jest 22 sty 2026, o 14:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 2 sie 2016, o 01:38 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Witam :)

Właśnie próbuje sobie wymyślić założenia do nowego projektu, którego podstawą jest sieć złożona z jednego mastera i kilku slave'ów. Ramkę chciałbym sobie przyjąć na wzór modbusa ale jestem otwarty na propozycje. Generalnie to potrzebuje jakiegoś impulsu, żeby ruszyć dalej. Załóżmy, że ramkę mam taką :

Opis Hex ASCII l.bajtów
1.START 0x3A ":" 1
2.Adres 0xXX "XX" 2
3.Funkcja/Komenda 0xXX "XX" 2
3.Dane 0xXX... "XX..." n
4.LRC 0xXX "XX" 2 //Suma kontrolna z pominięciem znaczników START i STOP
5.STOP 0x0D "/CR" 1

No i teraz o ile dosyć łatwo byłoby coś takiego wysłać, to pytanie jak odebrać ?
Dajmy na to powstanie taka ramka :

0x3A 0x00001 0x0001 0x01 LRC CR

Odebrałem, mam w buforze cyklicznym i co potem?
Opieram się na tym źródle:
http://ktc.wieik.pk.edu.pl/kurs_avr/avr ... bsluga.pdf
Tylko nie specjalnie wiem jak dodać to przeszukiwanie bufora.
A może są jakieś lepsze metody?
Czy w GreenBooku są opisane jakieś patenty na to ? :) Widziałem, że jest tam parsowanie danych ale nie jestem pewny czy to to samo, poza tym jeszcze nie jestem na etapie eventów, callbacków itp a czas nagli ;/
Byłbym wdzięczny za jakiekolwiek wskazówki .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 06:26 
Offline
Moderator
Avatar użytkownika

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

Jeśli masz komunikację ASCII gdzie ramka zakończona jest ENTERem to właśnie na tym oparte jest omawianie komunikacji RS232 w Greenbooku ... Tzn przykład poszerzony jest o komendy AT ale u ciebie sprawa dużo prostsza ... I nic nie trzeba poszukiwać w buforze cyklicznym on nie do tego służy ....

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


czy może być coś prostszego ? .... Zdarzenia i callbacki nie są po to żeby utrudniać tylko żeby MEGA UŁATWIAĆ życie. To podejście do obsługi RS232 na zdarzeniach .. co w tym może być trudnego odwrotnie!... Rejestrujesz swoją funkcję (własną przez ciebie napisaną parsuj_ramki() w bibliotece) a w pętli głównej programu umieszczasz zdarzenie UART_EVENT(buf) ... i to zdarzenie samo wywoła po prostu ZAWSZE twoją funkcję gdy tylko nadleci pełna ramka. Zdarzenie samo wyjmie ją z bufora cyklicznego i wywołując twoją funkcję przekaże ci ślicznie całą gotową ramkę już bez znaku enter na końcu. Czysty string. Teraz go tylko podzielić .... No co może być trudnego w takim podejściu ? ;)

_________________
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: 2 sie 2016, o 15:56 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Hmm, przejrzałem jeszcze raz ten temat i się troszkę rozjaśniło :) Czy sensownym będzie podział ramki na dane i komendy za pomocą pętli for? - takie kopiowanie uwzględniające kolejność informacji zawartch w ramce, dobrze kombinuje ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 16:50 
Offline
Moderator
Avatar użytkownika

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

Jatsekku napisał(a):
Czy sensownym będzie podział ramki na dane i komendy za pomocą pętli for?

Pętla for nie ma nic wspólnego z dzieleniem ....

do parsowania tokenów służą specjalne wbudowane w C funkcje przede wszystkim podstawowa: strtok()

a jeśli masz ramkę o stałych długościach pól to po choinkę czymś dzielić po odczycie ? ;) toż wystarczy odczytać bajty z odpowiednich miejsc w odpowiedniej ilości zgodnie z budową ramki

_________________
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: 3 sie 2016, o 00:54 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Chyba powoli łapie, czyli na przykład tak:
Tworzę sobie strukturę, gdzie umieszczam interesujące mnie rzeczy (adres odbiorcy/ ew.nadawcy (dla multi master), funkcje, dane, crc itp). Stringi to po prostu tablice, więc po zarejestrowaniu zdarzenia, wykorzystuję funkcję uart_get_str i odbieram sobie z tego bufor, potem już tylko przepisuje do poszczególnych miejsc w strukturze wybrane bajty danych. Dobrze to rozumiem?

Natomiast nie łapie po co w funkcji uart_get_str występuje linijka *buf = 0;
Coś czuje, że to jakiś banał i muszę sobie przypomnieć co nieco o wskaźnikach.

Dobra chyba to też łapie, ale proszę mnie sprawdzić:
W momencie przekazania bufora do funkcji, wskaźnik ustawia się na adres pierwszego elementu C-stringa, potem dalej w funkcji pod wskazany adres wpisuje się wartość pobrana z bufora cyklicznego, potem działa postinkrementacja i tak w kółko aż do znaku CR, za if'em wartość ostatniego elementu tj CR zostaje zmieniona na zero, i tym sposobem formowany jest czysty C-string, bez znacznika końca, tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2016, o 05:51 
Offline
Moderator
Avatar użytkownika

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

znak enter zamieniany jest na zero właśnie po to żeby powstał czysty c-string jak piszesz .... nie wiem co masz na myśli pisząc o jakimś znaczniku końca. W C stringu końcem jest zero

_________________
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: 3 sie 2016, o 10:13 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 61
Pomógł: 0

Znacznik końca rozumiem właśnie jako CR.
Sporo się rozjaśniło :) Dziękuję Panie Mirku.
Pozostało mi jeszcze tylko zrozumieć zdarzenia, ale myślę, że w tym pomogą mi poradniki i analiza IR z GB.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 3 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