<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=15911&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-08-03T10:13:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15911&amp;mode</id>
<entry>
<author><name><![CDATA[Jatsekku]]></name></author>
<updated>2016-08-03T10:13:39+01:00</updated>
<published>2016-08-03T10:13:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165320#p165320</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165320#p165320"/>
<title type="html"><![CDATA[Re: Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165320#p165320"><![CDATA[
Znacznik końca rozumiem właśnie jako CR. <br />Sporo się rozjaśniło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dziękuję Panie Mirku. <br />Pozostało mi jeszcze tylko zrozumieć zdarzenia, ale myślę, że w tym pomogą mi poradniki i analiza IR z GB.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3920">Jatsekku</a> — 3 sie 2016, o 10:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-08-03T05:51:24+01:00</updated>
<published>2016-08-03T05:51:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165313#p165313</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165313#p165313"/>
<title type="html"><![CDATA[Re: Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165313#p165313"><![CDATA[
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<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 sie 2016, o 05:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jatsekku]]></name></author>
<updated>2016-08-03T00:54:00+01:00</updated>
<published>2016-08-03T00:54:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165311#p165311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165311#p165311"/>
<title type="html"><![CDATA[Re: Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165311#p165311"><![CDATA[
Chyba powoli łapie, czyli na przykład tak:<br />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?<br /><br />Natomiast nie łapie po co w funkcji uart_get_str występuje linijka *buf = 0; <br />Coś czuje, że to jakiś banał i muszę sobie przypomnieć co nieco o wskaźnikach.<br /><br />Dobra chyba to też łapie, ale proszę mnie sprawdzić:<br />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?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3920">Jatsekku</a> — 3 sie 2016, o 00:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-08-02T16:50:38+01:00</updated>
<published>2016-08-02T16:50:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165287#p165287</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165287#p165287"/>
<title type="html"><![CDATA[Re: Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165287#p165287"><![CDATA[
<div class="quotetitle">Jatsekku napisał(a):</div><div class="quotecontent"><br />Czy sensownym będzie podział ramki na dane i komendy za pomocą pętli for?<br /></div><br />Pętla for nie ma nic wspólnego z dzieleniem ....<br /><br />do parsowania tokenów służą specjalne wbudowane w C funkcje przede wszystkim podstawowa: strtok()<br /><br />a jeśli masz ramkę o stałych długościach pól to po choinkę czymś dzielić po odczycie ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> toż wystarczy odczytać bajty z odpowiednich miejsc w odpowiedniej ilości zgodnie z budową ramki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 sie 2016, o 16:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jatsekku]]></name></author>
<updated>2016-08-02T15:56:32+01:00</updated>
<published>2016-08-02T15:56:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165284#p165284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165284#p165284"/>
<title type="html"><![CDATA[Re: Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165284#p165284"><![CDATA[
Hmm, przejrzałem jeszcze raz ten temat i się troszkę rozjaśniło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> 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 ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3920">Jatsekku</a> — 2 sie 2016, o 15:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-08-02T06:26:24+01:00</updated>
<published>2016-08-02T06:26:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165238#p165238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165238#p165238"/>
<title type="html"><![CDATA[Re: Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165238#p165238"><![CDATA[
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 ....<br /><br />w pętli głównej masz zdarzenie<br />[syntax=c]char buf&#91;100&#93;; // bufor na odebrane stringi z bufora cyklicznego<br /><br /><br />int main( void ) {<br /><br />    // rejestracja własnej funkcji parsującej<br />    register_uart_event( parsuj_ramki );<br /><br />    sei();<br /><br />    // pętla główna programu<br />    while(1) {<br />       UART_EVENT( buf );  // zdarzenie UART<br />    }<br />}<br /><br />// własna funkcja parsująca<br />void parsuj_ramki( char * abuf ) {<br /><br />  // tutaj robisz co chcesz z odebraną ramką do której masz wskaźnik w abuf<br /><br />}[/syntax]<br /><br />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 ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 sie 2016, o 06:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jatsekku]]></name></author>
<updated>2016-08-02T01:38:57+01:00</updated>
<published>2016-08-02T01:38:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165235#p165235</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165235#p165235"/>
<title type="html"><![CDATA[Transmisja szeregowa, protokoły - teoria]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15911&amp;p=165235#p165235"><![CDATA[
Witam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />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ą :<br /><br />   Opis                     Hex               ASCII               l.bajtów<br />1.START                  0x3A                &quot;:&quot;                      1<br />2.Adres                   0xXX               &quot;XX&quot;                    2<br />3.Funkcja/Komenda   0xXX               &quot;XX&quot;                    2<br />3.Dane                    0xXX...          &quot;XX...&quot;                   n<br />4.LRC                      0xXX               &quot;XX&quot;                    2      //Suma kontrolna z pominięciem znaczników START i STOP<br />5.STOP                    0x0D               &quot;/CR&quot;                   1  <br /><br />No i teraz o ile dosyć łatwo byłoby coś takiego wysłać, to pytanie jak odebrać ? <br />Dajmy na to powstanie taka ramka :<br /><br />0x3A 0x00001 0x0001 0x01 LRC CR<br /><br />Odebrałem, mam w buforze cyklicznym i co potem? <br />Opieram się na tym źródle:<br /><!-- m --><a class="postlink" href="http://ktc.wieik.pk.edu.pl/kurs_avr/avr_rs232obsluga.pdf" >http://ktc.wieik.pk.edu.pl/kurs_avr/avr ... bsluga.pdf</a><!-- m --><br />Tylko nie specjalnie wiem jak dodać to przeszukiwanie bufora. <br />A może są jakieś lepsze metody? <br />Czy w GreenBooku są opisane jakieś patenty na to ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> 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 ;/ <br />Byłbym wdzięczny za jakiekolwiek wskazówki .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3920">Jatsekku</a> — 2 sie 2016, o 01:38</p><hr />
]]></content>
</entry>
</feed>