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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-06T09:41:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7166&amp;mode</id>
<entry>
<author><name><![CDATA[mg101]]></name></author>
<updated>2014-06-06T09:41:26+01:00</updated>
<published>2014-06-06T09:41:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=83523#p83523</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=83523#p83523"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=83523#p83523"><![CDATA[
Kiedyś napisałem na forum coś takiego <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic2294.html" >topic2294.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=683">mg101</a> — 6 cze 2014, o 09:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[barney]]></name></author>
<updated>2014-05-28T18:29:05+01:00</updated>
<published>2014-05-28T18:29:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82648#p82648</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82648#p82648"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82648#p82648"><![CDATA[
Tak (tzn. do mniej-więcej czegoś takiego rozwija się ATOMIC_BLOCK), jeżeli nie lubisz się powtarzać to opakuj to w makro <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]#define ISR_PAUSE(...)\<br />{\<br />uint8_t sreg;\<br />sreg=SREG;\<br />cli();\<br />__VA_ARGS__;\<br />SREG=sreg;\<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=973">barney</a> — 28 maja 2014, o 18:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-28T18:07:13+01:00</updated>
<published>2014-05-28T18:07:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82645#p82645</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82645#p82645"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82645#p82645"><![CDATA[
chodzi o coś takiego :<br />[syntax=c]uint8_t sreg;<br />sreg = SREG;<br />cli;<br />//.... przypisanie i reszta <br />SREG = sreg[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 28 maja 2014, o 18:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[barney]]></name></author>
<updated>2014-05-28T17:56:43+01:00</updated>
<published>2014-05-28T17:56:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82643#p82643</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82643#p82643"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82643#p82643"><![CDATA[
Zbiór makr wyłączających przerwania na czas wykonania kodu, który jest wewnątrz nich <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=973">barney</a> — 28 maja 2014, o 17:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-28T17:02:24+01:00</updated>
<published>2014-05-28T17:02:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82637#p82637</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82637#p82637"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82637#p82637"><![CDATA[
xor wiem że najlepszym wyjściem jest zmienna lokalna <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> tak tylko chcviałem się upewnić czy mam racje z tym tokiem mojego myślenia <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />, a tak przy okazji co to jest ATOMIC BLOCK  bo nie słyszałem o czymś takim ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 28 maja 2014, o 17:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-05-28T07:35:01+01:00</updated>
<published>2014-05-28T07:35:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82598#p82598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82598#p82598"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82598#p82598"><![CDATA[
Istnieje takie niebezpieczeństwo. Ale powinno wystarczyć przestawienie instrukcji: najpierw przypisanie potem inkrementacja głowy. Ale znów w przypisaniu trzeba by wyliczać nową wartość głowy - i tu się przydaje zmienna tymczasowa.<br />Z drugiej strony, podobnież kompilator w toku optymalizacji może sobie instrukcje poprzestawiać. Może trzeba by te dwie instrukcje zamknąć w ATOMIC BLOCK? Trochę mało elegancko ale za to ze 100% pewnością.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 28 maja 2014, o 07:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-27T21:05:37+01:00</updated>
<published>2014-05-27T21:05:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82580#p82580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82580#p82580"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82580#p82580"><![CDATA[
O i wszystko zrozumiałe <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Krauser dzięki za wytłumaczenie .<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 18 minutach ]</span></strong><br /><br />Krauser, ale przecież może się wydarzyć skrajny przypadek kiedy to powiedzmy zostanie przekazany pierwszy znak, następnie zostanie włączone przerwani, ale przerwanie zanim się wykona (uruchomi się jego obsługa) to jeszcze wcześniej funkcja wysyłająca kolejny znak dotrze o do tego momentu[syntax=c]Tx_Head = ( Tx_Head + 1 ) &amp; TX_BUF_MASK;[/syntax]czyli nie zostanie przypisana żadna dana buforowi, a mimo to indeks głowy się zwiększy. Następnie zostaje uruchomione przerwanie i klops bo przecież indeks jest zwiększony o 2 po funkcja wykonała się raz w całości a raz do momętu do którego napisałem że się może wykonać i  wtedy przerwanie nie z zeruje flagi przerwania po wysłaniu pierwszego znaku, a zrobi to dopiero po wysłaniu kolejnego, a nasz kolejny znak nie jest przypisany czyli jest to 0 dobrze rozumuje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 27 maja 2014, o 21:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-05-27T20:13:39+01:00</updated>
<published>2014-05-27T20:13:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82566#p82566</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82566#p82566"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82566#p82566"><![CDATA[
<div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />Po pierwsze jak na moje oko to nic to nie zmienia bo przerwanie i tak może wstąpić między zwiększeniem zmiennej Tx_Head a przypisaniem danych do bufora mam racje ?<br /></div><br />Jest tam taka pętla wstrzymująca program gdy bufor jest pełny:<br />[syntax=c]while( ( Tx_Head + 1 ) &amp; TX_BUF_MASK == Tx_Tail);[/syntax]<br />właśnie w tym czasie bufor zostaje opróżniony przez funkcję obsługi przerwania nadawczego i funkcja może iść dalej.<br /><br /><div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />Po drugie co mnie jeszcze bardziej zdziwiło to przecież zmienna Tx_Head zostaje w funkcji zwiększona aż o 2 ?? po co ??<br /></div><br />Wcale nie zostaje zwiększona o 2. W pierwszym przypadku tylko porównywana jest wartość o 1 większa (Tx_Head zostaje takie jakie było). Dopiero w drugim przypadku gdzie jest znak &quot;=&quot; zmienna ta zostaje zmieniona.<br /><br />W analizie swojego kodu musisz patrzeć i na funkcję <em>send_data</em> i na <em>ISR( USART_UDRE_vect )</em>. Jak w twojej funkcji <em>send_data</em> program zatrzymał się na:<br />[syntax=c]while( Tx_Head == Tx_Tail);[/syntax]<br />to w jaki sposób przerwanie może wykonać kod w warunku:<br />[syntax=c]if( Tx_Head != Tx_Tail )[/syntax]<br />i pobrać znak z bufora do rejestru UDR i zwiększyć Tx_Tail, aby warunek w pętli while stał się fałszywy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 maja 2014, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-26T21:48:36+01:00</updated>
<published>2014-05-26T21:48:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82486#p82486</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82486#p82486"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82486#p82486"><![CDATA[
No nie wierze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Ja się czuje jakbyśmy rozmawiali zupełnie innymi językami <div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />a ty wyjmujesz zmienną lokalną, która właśnie zabezpiecza przed takimi przypadkami .... robisz sobie globalną i to volatile (z tego co zrozumiałem to nawet jej w przerwaniu nie używasz) więc po co volatile ???? .....<br /></div> Oczywiści że jej UŻYWAM w przerwani  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Mirku musiałeś mnię zle zrozumieć <div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />skoro ci nie działa wg twojej metody - no to znaczy że gdzieś popełniasz poważny błąd. Ja rozumiem że ty rozumiesz sens działania bufora cyklicznego - no ale z implementacją masz kłopot - to jedno ...<br /></div> NO właśnie wcale nie mam problemu z implementacją po prostu chciałem skrócić kod, ale NIE ZAUWAŻYŁEM, że jesli zrobię to w ten sposób który przedstawiłem w pierwszym poście to właśnie mogą się dziać dziwne rzeczy co opisałem z kolei w innym  poście. <br /><br />Czy wam nigdy nie zdarzają się pomyłki ? Ja jestem tylko początkującym więc mam chyba prawo się pomylić... ale to nie znaczy że nie rozumiem jak działa bufor cykliczny  <div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />a jest sens żebyś i to zrozumiał zamiast dawać to sobie &quot;ot tak na wszelki wypadek w programie&quot; .... bo taką drogą to będziesz jeszcze DŁUUUUGO chodził zanim zrozumiesz i zaimplementujesz bufor cykliczny<br /></div><br />No i znowu się nie zrozumieliśmy, ja wcale tej dodatkowej zmiennej lokalnej nie dodaje na wszelki wypadek i uważam że na przykład w przerwaniu odbiorczym mogłoby się obejść bez niej.... <br /><br />O a kolega Krauser to mnie troszkę zdziwił tym kodem i to podwójnie <br /><br />Po pierwsze jak na moje oko to nic to nie zmienia bo przerwanie i tak może wstąpić między zwiększeniem zmiennej Tx_Head a przypisaniem danych do bufora mam racje ?<br /><br />Po drugie co mnie jeszcze bardziej zdziwiło to przecież zmienna Tx_Head zostaje w funkcji zwiększona aż o 2 ?? po co ??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 26 maja 2014, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-05-26T20:16:11+01:00</updated>
<published>2014-05-26T20:16:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82466#p82466</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82466#p82466"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82466#p82466"><![CDATA[
Koledze rajmund96 nie działa, ale wie już, że to dlatego, że w linii: <em>while( Tx_Head == Tx_Tail);</em> ma zwiększoną już zmienną <em>Tx_Head</em> i funkcja obsługi przerwania <em>ISR( USART0_UDRE_vect)</em> działa inaczej. Można to tak napisać:<br />[syntax=c]void send_data(char data) // funkcja wysyłająca 1 bajt<br />{<br />        while( ( Tx_Head + 1 ) &amp; TX_BUF_MASK == Tx_Tail); <br />        Tx_Head = ( Tx_Head + 1 ) &amp; TX_BUF_MASK;<br />        Tx_Buf&#91;Tx_Head&#93; = data;  <br />        UCSRB |= (1&lt;&lt;UDRIE); <br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 26 maja 2014, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-26T18:59:43+01:00</updated>
<published>2014-05-26T18:59:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82456#p82456</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82456#p82456"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82456#p82456"><![CDATA[
<div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />uwierz mi że naprawdę wiem jak on działa i rozumiem sens jego działania więc dlaczego ciągle mi zarzucasz<br /></div><br /><br />rajmund proszę nie złość się ... nikt ci nie zarzuca, a to że kolega mokrowski uważa, że nadal nie do końca rozumiesz działanie bufora cyklicznego - no to hmmm moim zdaniem ma rację .... i to nie jest żaden zarzut dla ciebie ...<br /><br />skoro ci nie działa wg twojej metody - no to znaczy że gdzieś popełniasz poważny błąd. Ja rozumiem że ty rozumiesz sens działania bufora cyklicznego - no ale z implementacją masz kłopot - to jedno ...<br /><br />a drugie ... po prostu totalnie (i to od początku) nieprecyzyjnie opisujesz swój problem .... No ja np nie mogę się połapać i co chwilę ci o tym piszę ...<br /><br />nawet wcześniej zadałem ci pytanie<br /><br />&quot;czy działa ci to?&quot;<br /><br />odpowiedziałeś , że działa! .....<br /><br />żeby po chwili dodać że działa ale dla krótkich stringów a dla długich nie .... <br /><br />no to jeśli dla ciebie to oznacza że &quot;działa&quot; ..... matko <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no to tak - uwierz mi ciężko będzie z kimkolwiek ci się dogadać ....<br /><br />Poza tym masz:<br /><br />1. opis w książce<br />2. przykład kodu w książce który można śledzić z opisem krok po kroku<br /><br />a ty wyjmujesz zmienną lokalną, która właśnie zabezpiecza przed takimi przypadkami .... robisz sobie globalną i to volatile (z tego co zrozumiałem to nawet jej w przerwaniu nie używasz) więc po co volatile ???? ..... <br /><br />i na końcu dodajesz - że no już tylko gubi ci znaczki<br /><br />tymczasem kolega mokrowski już wcześniej jak jasnowidz przewidział - że niedługo zapytasz <br /><br />&quot;to co to jest to volatile?&quot;<br /><br />a jest sens żebyś i to zrozumiał zamiast dawać to sobie &quot;ot tak na wszelki wypadek w programie&quot; .... bo taką drogą to będziesz jeszcze DŁUUUUGO chodził zanim zrozumiesz i zaimplementujesz bufor cykliczny<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />W przeciwnym wypadku nie doszedł bym do tego dlaczego się tak dzieje czyż nie ?<br /></div><br /><br />no i sam widzisz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jesteś normalnie niepoprawny - toż - po przeczytaniu kilku postów z tego wątku można dostać chyźla <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .... ja jeszcze raz powtórzę - nie wiem nadal działa ci to czy nie działa ...<br /><br />ale chyba też już dam spokój .... bo widzę że ciężko jakoś się domówić ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 maja 2014, o 18:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-26T18:48:42+01:00</updated>
<published>2014-05-26T18:48:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82450#p82450</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82450#p82450"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82450#p82450"><![CDATA[
mokrowski Napisałem  obsugę bufora cykliczny <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i uwierz mi że naprawdę wiem jak on działa i rozumiem  sens jego działania więc dlaczego ciągle mi zarzucasz, chyba od samego początku że nie rozumiem jak działa bufor cykilczny <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Moim problemem nie było zrozumienie jak działa bufor cykliczny, ale to że przy tym buforze wykorzystywałem przerwania i stąd wszystkie problemy,  jest to raczej moje niedopatrzenie niż to że nie rozumiem działania zmiennych czy bufora cyklicznego . W przeciwnym wypadku nie doszedł bym do tego dlaczego się tak dzieje czyż nie ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 26 maja 2014, o 18:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-26T17:02:05+01:00</updated>
<published>2014-05-26T17:02:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82436#p82436</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82436#p82436"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82436#p82436"><![CDATA[
Dobra chyba sobie dam spokój z myśleniem dlaczego wyświetlają się tylko dwie pierwsze literki. Chyba że któryś z kolegów wie dlaczego się tak dzieje to bardzo chętnie posłucham ?<br /><br /> A tak w ogóle to dziękuję wszystkim którzy pomagali mi wyjaśnić mój problem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 26 maja 2014, o 17:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-26T04:32:04+01:00</updated>
<published>2014-05-26T04:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82383#p82383</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82383#p82383"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82383#p82383"><![CDATA[
DOkładnie tak przez własną niewiedze się zaplątałem <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 26 maja 2014, o 04:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-25T22:58:43+01:00</updated>
<published>2014-05-25T22:58:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82373#p82373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82373#p82373"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82373#p82373"><![CDATA[
<div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />Muszę jeszcze dokładnie wyczaić dlaczego to dzieje się tylko dla długich stringów tzn. dłuższych niż długość buforu i dlaczego wtedy zostają wyświetlone tylko dwie pierwsze literki. Wydaje mi się że ma to związek z zapętlaniem bufora<br /></div><br /><br />To pomyśl sobie co się dzieje w twojej funkcji, gdy ona sobie trwa i trwa a w międzyczasie odbywają się przerwania i zmieniają wskaźnik głowy węża .... A tobie po drodze zachciało się bawić zmiennymi globalnymi, które w międzyczasie mogą stracić ważność ...<br /><br />więc może jednak warto sięgnąć po zmienną lokalną czasem ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 maja 2014, o 22:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-25T19:39:58+01:00</updated>
<published>2014-05-25T19:39:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82344#p82344</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82344#p82344"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82344#p82344"><![CDATA[
Muszę jeszcze dokładnie wyczaić dlaczego to dzieje się tylko dla długich stringów tzn. dłuższych niż długość buforu i dlaczego wtedy zostają wyświetlone tylko dwie pierwsze literki. Wydaje mi się że ma to związek z zapętlaniem bufora<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 25 maja 2014, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-25T18:38:25+01:00</updated>
<published>2014-05-25T18:38:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82341#p82341</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82341#p82341"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82341#p82341"><![CDATA[
Działa, ale tylko dla krótkich stringów  przy dłuższych tzn. troche dłuższych niż długość bufora nadawczego przestaje działaś tzn.na terminalu pokazują się tylko pierwsze dwie literki danego stringa<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 55 minutach ]</span></strong><br /><br />Huraaaaa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> wiem dlaczego to nie działa tak jak powinno. Nawet nie chodzi o to że zmienna ze specyfikatorem volatile działa wolniej. <br /><br />Testowałem teraz ten program na różne sposoby z dodatkową zmienną lokalna czyli tak jak jest w Pana orginalnej bibliotece i odkryłem że gdy wystąpi zbyt WCZESNE zwiększenie wartości zmiennej Tx_Head co występuje właśnie gdy nie używamy dodatkowej zmiennej lokalnej, bo przecież bezpośrednio zwiększamy Tx_Head ( a jest to zmienna typu volatile czyli jej wartość zostaje zapisana w pamięci ram i każde odwołanie odnosi się do pamięci ram )  to przecież jeśli wysyłamy string to zmienna jest zapisywana wcześniej niż dane zostają przypisane do bufora. To z kolei oznacza że Jeśli w przerwaniu sprawdzamy warunek po pierwszym wysłanym znaku [syntax=c]if( Tx_Head != Tx_Tail )[/syntax] <br />to jeśli wartość Tx_Head zostanie zwiększona przy wysyłaniu kolejnego znaku , a flaga przerwania przecież sama się nie zeruje po wysłaniu znaku to przez to zwiększenie zmiennej warunek zostanie spełniony pomimo tego że bufor nie został załadowany ( ponieważ zmienna Tx_Head została zwiększona zanim został zapisany bajt do bufora) czyli zostanie wysłany pusty bajt czyli 0 co poskutkuje nie wyświetleniem się niczego <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 25 maja 2014, o 18:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-25T18:35:01+01:00</updated>
<published>2014-05-25T18:35:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82339#p82339</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82339#p82339"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82339#p82339"><![CDATA[
no i działa ci to ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 maja 2014, o 18:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-25T17:32:59+01:00</updated>
<published>2014-05-25T17:32:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82335#p82335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82335#p82335"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82335#p82335"><![CDATA[
O czy mogę zrobić tak w funkcji wysyłającej znak :<br />[syntax=c]void send_data(char data) // funkcja wysyłająca 1 bajt<br />{<br /> <br />        Tx_Head = ( Tx_Head + 1 ) &amp; TX_BUF_MASK; // ustawianie kolejnych pozycji w buforze cyklicznym<br /> <br />        while( Tx_Head == Tx_Tail); // oczekiwanie aż w buforze nadawczym zwolni się miejsce na kolejne znaki<br />        Tx_Buf&#91;Tx_Head&#93; = data; // wpisanie danych do buforu<br /> <br />        UCSRB |= (1&lt;&lt;UDRIE); // załączenie przerwania występującego gdy bufor UDR pusty<br /> <br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />O moje zmienne typu volatile umieczczone na początku pliku w którym znajdują sie funkcje obsługujące UART [syntax=c]volatile char Tx_Buf&#91;TX_BUF_SIZE&#93;; // bufor nadawczy<br />volatile uint8_t Tx_Head; // indeks początku bufora<br />volatile uint8_t Tx_Tail; // indeks końca bufora<br /> <br /> <br />volatile char Rx_Buf&#91;RX_BUF_SIZE&#93;; // bufor odbiorczy<br />volatile uint8_t Rx_Head; // indeks początku bufora<br />volatile uint8_t Rx_Tail; // indeks końca bufor[/syntax][<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 25 maja 2014, o 17:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-25T17:26:08+01:00</updated>
<published>2014-05-25T17:26:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82333#p82333</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82333#p82333"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82333#p82333"><![CDATA[
<div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />o tak, a potem mogę jej użyć w warunku if oraz jako indeksu bufora prawda ?<br /></div><br /><br />ale ja nie widzę co to za zmienna twoja Tx_Head ? <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 maja 2014, o 17:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-25T17:04:20+01:00</updated>
<published>2014-05-25T17:04:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82331#p82331</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82331#p82331"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82331#p82331"><![CDATA[
Tak to rozumiem, ale napisał Pan wcześniej że jak NIE będę używał zmiennej lokalnej to będę  musiał dwa razy &quot;coś&quot; wyliczać rozumiem że chodziło o UART_RxHead ...<br />Ale przecież ją będę też tylko raz obliczał <br />[syntax=c]Tx_Head = ( Tx_Head + 1 ) &amp; TX_BUF_MASK;[/syntax] <br />o tak, a potem mogę jej użyć w warunku if  oraz jako indeksu bufora prawda ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 25 maja 2014, o 17:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-25T16:29:41+01:00</updated>
<published>2014-05-25T16:29:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82330#p82330</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82330#p82330"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82330#p82330"><![CDATA[
jeszcze raz:<br /><br /><img src="http://forum.atnel.pl/_obrazki/o/54/cbce1408fa042da9583c06e49d10e34f.png" alt="Obrazek" /><br /><br />1. obliczam wartość tmp_head<br /><br />2. używam jej pierwszy raz<br /><br />3. używam jej dwukrotnie drugi raz<br /><br />widzisz to ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 maja 2014, o 16:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-25T13:33:25+01:00</updated>
<published>2014-05-25T13:33:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82324#p82324</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82324#p82324"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82324#p82324"><![CDATA[
Mirku to może tak zadam pytanie, tak mi się nasunęło na podstawie twojego postu wyjaśniającego właśnie po co jest zmienna tmp_Head <div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />przecież z kodu widać że chcę ją RAZ mieć w zmiennej a później już nie obliczać tylko posługiwać się tą obliczoną wartością w kilku miejscach. Nie chcesz zmiennej lokalnej ? to nie rób - ale dwa razy w przerwaniu w takim akurat wypadku będziesz musiał ją wyliczać.... w sumie to nie problem.<br /></div> O i tu jest chyba mój problem dlaczego będę musiał ją dwa razy wyliczać ? <br />A nie wystarczy zrobić tak [syntax=c]Tx_Head = ( Tx_Head + 1 ) &amp; TX_BUF_MASK;[/syntax]<br />i przecież też obliczam ją tylko raz ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 25 maja 2014, o 13:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-05-25T11:42:01+01:00</updated>
<published>2014-05-25T11:42:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82321#p82321</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82321#p82321"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82321#p82321"><![CDATA[
<div class="quotetitle">rajmund96 napisał(a):</div><div class="quotecontent"><br />To było moje podstawowe pytanie i nie wiem dlaczego nie możecie mnie zrozumie<br /></div><br /><br />Widzisz - gdyby to było takie proste - że gdy coś piszemy to inni od razu nas w lot rozumieją ..... to popatrz - nie byłoby np problemu ze zrozumieniem książki. Tymczasem autor napisał a ty nie możesz tego zrozumieć. To nie wstyd .... ale teraz postaw się w roli autora - to ty PISZESZ pytanie .... no coś piszesz.... i dziwisz się, albo może za chwilę zarzucisz wszystkim że nie chcą ci specjalnie pomóc kisząc dla siebie jakąś wiedzę.<br /><br />Tymczasem powód jest prozaiczny - no nie możemy zrozumieć tego o co pytasz .... może jeszcze ktoś inny wpadnie, i akurat zaskoczy. To tak samo jak z czytelnikami - jedni zaskoczą od razu inni nie .... <br /><br />więc ew postaraj się jeszcze doprecyzować swoje pytanie .... może to pomoże<br /><br />bo ja wyżej mówiłem ci już dlaczego użyłem zmiennej tmp_head .... ale ty z kolei W OGÓLE się do tego nie odniosłeś ... i dziwisz się że np ja nie wiem tym bardziej o co ci chodzi ? .... tymczasem chyba nie można tu nikogo posądzić o brak chęci do pomocy ... bo jak widać po całym wątku kilka kwestii chyba już udało ci się wyjaśnić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 maja 2014, o 11:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-05-25T10:03:22+01:00</updated>
<published>2014-05-25T10:03:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82317#p82317</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82317#p82317"/>
<title type="html"><![CDATA[Re: UART bufor cykliczny - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7166&amp;p=82317#p82317"><![CDATA[
No właśnie rozumiem jak działa bufor cykliczny oraz zmienne lokalne wiem że istnieją tylko w funkcji w której są powołane oraz że gdy funkcja skończy swoje działanie to one tez znikają chyba że właśnie opatrzymy je specyfikatorem static wtedy wartosć tych zmienny nie zostanie skasowana po zakończeni danej funkcji lecz będze zapamiętana, a volatile używamy po to aby procek nie operował dla tej zmiennej na rejestrach tzn. odwoływał się zawsze dla tej zmiennej do odpowiedniej komórki w pamięci RAM  ponieważ może się zdarzyć, że gdy nastąpi przerwanie w której zostanie wywołana owa zmienna,<br />i zostaną wykonane operacje na innym rejestrze następnie wartość tej zmiennej zostanie zapisana w komórce pamięci RAM, a program  główny który tylko za pierwszym razem wczytuje wartość tej zmiennej z pamięci RAM nie będzie wiedział że zmienna została zmodyfikowana i wiadomo co dalej.<br /><br /><div class="quotetitle">mokrowski napisał(a):</div><div class="quotecontent"><br />rajmund96 myślę że większość pytań które stawiasz wynika z:<br />1. Braku zrozumienia działania bufora kołowego<br />2. Zrozumienia ,,lokalności&quot; zmiennych i czasu ich życia.<br /></div><br /> Mi się wydaje że jednak to rozumiem, ale to nie zmienia faktu dlaczego usunięcie zmienne lokalnej w funkcji nadawczej wpływa na działanie programu. Dlaczego w takim razie w funkcji odbiorczej oraz w przerwaniu nadawczym NIE występuje dodatkowa zmienna lokalna np o nazwie analogicznie tmp_Tail .To było moje podstawowe pytanie i nie wiem dlaczego nie możecie mnie zrozumie.Może dla was jest to oczywistą oczywistością ale ja tego niestety nie rozumiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2275">rajmund96</a> — 25 maja 2014, o 10:03</p><hr />
]]></content>
</entry>
</feed>