<?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=14023&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-31T00:35:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14023&amp;mode</id>
<entry>
<author><name><![CDATA[xdmilaxd]]></name></author>
<updated>2015-12-31T00:35:19+01:00</updated>
<published>2015-12-31T00:35:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149235#p149235</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149235#p149235"/>
<title type="html"><![CDATA[Re: USART przepełnienie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149235#p149235"><![CDATA[
Wprowadzenie oddzielnej zmiennej licznik zamiast wyliczania reszty z dzielenia tmp_head przez 5 rozwiązało problem. Dziękuję za wszystkie porady.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12186">xdmilaxd</a> — 31 gru 2015, o 00:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2015-12-30T22:20:56+01:00</updated>
<published>2015-12-30T22:20:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149215#p149215</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149215#p149215"/>
<title type="html"><![CDATA[Re: USART przepełnienie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149215#p149215"><![CDATA[
Jeżeli chcesz nadal wykorzystywać bufor cykliczny, to możesz przy dodawaniu i odczytywaniu danych stosować także dodatkową zmienną licznik. Jak zapisujesz coś do bufora, to go zwiększasz a jak odczytujesz to zmniejszasz. Dzięki niemu będziesz mógł sprawdzać sobie jaką masz aktualną zajętość.<br /><br />Nic nie stoi na przeszkodzie byś też mógł wyliczać zajętość bufora na bieżąco na podstawie wartości head i tail. <br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 30 gru 2015, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xdmilaxd]]></name></author>
<updated>2015-12-30T19:42:22+01:00</updated>
<published>2015-12-30T19:42:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149197#p149197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149197#p149197"/>
<title type="html"><![CDATA[Re: USART przepełnienie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149197#p149197"><![CDATA[
Z tego co rozumiem w przerwaniu jeśli napotkam znak enter to inkrementuję zmienną ascii_line. Sygnalizuję tym, że nastąpił koniec ramki. Zatem jak zasygnalizować koniec ramki jeśli nie mogę zrobić tego poprzez konkretny znak, a chciałbym to zrobić po odebraniu piątego znaku. Przesyłam kod pliku main, biblioteka od UART bez zmian.<br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br />#include &quot;MK_USART/mkuart.h&quot;<br /><br /><br />char uart_buf&#91;4&#93;;<br />int lewy,prawy;<br />void analizuj_dane_przychodzace(char * buf);<br />int main(void){<br /><br />register_uart_str_rx_event_callback( analizuj_dane_przychodzace );<br />sei();<br />USART_Init(__UBRR); //USART inicjalizacja<br />while(1){<br />UART_RX_STR_EVENT(uart_buf);<br />}<br />}<br />void analizuj_dane_przychodzace(char *buf){<br />lewy=buf&#91;1&#93;;<br />prawy=buf&#91;2&#93;;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12186">xdmilaxd</a> — 30 gru 2015, o 19:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2015-12-30T17:41:38+01:00</updated>
<published>2015-12-30T17:41:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149179#p149179</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149179#p149179"/>
<title type="html"><![CDATA[Re: USART przepełnienie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149179#p149179"><![CDATA[
No ale bufor cykliczny nie ma w zasadzie początku ani końca. Jego wielkość powinna być tak dobrana aby zapobiec utracie danych przy współpracy systemów o różnych prędkościach przetwarzania. Nie bardzo widzę w czym jest problem. Robisz bufor 5-cio bajtowy jako jedna ramka do niego ładujesz dane z bufora cyklicznego o wielkości jaka jest potrzebna do płynnej pracy układu. Czyli magazynem ramek będzie bufor cykliczny z którego będziesz pobierał 5-cio bajtowe ramki. Nie ma znaczenia czy bufor cykliczny jest podzielny przez jakąkolwiek liczbę. Zaproponowany przez Mirka bufor cykliczny ma rozmiar 2^n ze względu na sprytny sposób zapętlenia bufora ale zmieniając sposób obsługi można stworzyć bufor o dowolnym rozmiarze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 30 gru 2015, o 17:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jnk0le]]></name></author>
<updated>2015-12-30T00:51:16+01:00</updated>
<published>2015-12-30T00:51:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149125#p149125</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149125#p149125"/>
<title type="html"><![CDATA[Re: USART przepełnienie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149125#p149125"><![CDATA[
Ja bym zostawił przerwanie w spokoju i w pętli głównej ładował ramki do drugiego bufora liniowego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8491">jnk0le</a> — 30 gru 2015, o 00:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xdmilaxd]]></name></author>
<updated>2015-12-29T15:54:48+01:00</updated>
<published>2015-12-29T15:54:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149084#p149084</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149084#p149084"/>
<title type="html"><![CDATA[USART przepełnienie bufora]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14023&amp;p=149084#p149084"><![CDATA[
Witam<br /><br />Mam następujący problem. Korzystam z biblioteki do USARTu opracowanej przez Pana Mirka. Staram się ją odpowiednio edytować pod własne potrzeby. Wiem, że w założeniach tej biblioteki każda ramka danych powinna zakończyć się znakiem enter. Niestety w moim przypadku muszę przyjąć założenie, że ramkę danych kończy znak, który się zmienia. Za to do odczytania zawsze mam równo 5 znaków. Zmienną ascii_line zatem inkrementuję w momencie gdy reszta z dzielenia tmp_head przez 5 jest równa 0. Wszystko działa jak należy do momentu gdy dojdę do końca bufora, wówczas odczytuję ramkę w sposób niewłaściwy tj. przesuniętą. Przykładowo jeśli mam UART_RX_BUF_SIZE=32 to mogę odebrać poprawnie 6 ramek każda po 5 znaków. Jeśli ustawię UART_RX_BUF_SIZE=8 to tylko jedną. <br />Jak można temu zaradzić?<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12186">xdmilaxd</a> — 29 gru 2015, o 15:54</p><hr />
]]></content>
</entry>
</feed>