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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-18T11:33:52+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10274&amp;mode</id>
<entry>
<author><name><![CDATA[golytm]]></name></author>
<updated>2015-01-18T11:33:52+01:00</updated>
<published>2015-01-18T11:33:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114706#p114706</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114706#p114706"/>
<title type="html"><![CDATA[Re: Nie interpretuje warunku if w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114706#p114706"><![CDATA[
receive_status zwraca 1 jeżeli wykona się poprawnie (i wykonuje się). diada dodana w celach debugowych - żeby zobaczyć jak daleko dochodzi program. Jak usunę całkowicie if(buffer_ready){}, dioda miga, &quot;buffer_ready&quot; zmienia wartości tak jak zmieniać powinno (wyrzuciłem to na wyświetlacz i widzę aktualną wartość tej zmiennej). Jak pozostawię ten felerny if(buffer_ready){}, to pomimo tego że na wyświetlaczu widzę że &quot;buffer_ready&quot; ma wartość 1, to program nie wchodzi do tego warunku (&quot;buffer_ready&quot; pozostaje na wartości 1, dioda nie zmienia stanu).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6734">golytm</a> — 18 sty 2015, o 11:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-01-18T11:26:11+01:00</updated>
<published>2015-01-18T11:26:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114704#p114704</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114704#p114704"/>
<title type="html"><![CDATA[Re: Nie interpretuje warunku if w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114704#p114704"><![CDATA[
co zwraca funkcja receive_status() przy poprawnym statusie<br />bo jeśli zero to zmienna się nie wyzeruje<br />ponieważ ten if się nie spełni .<br /><br />Czy dioda na PB1 mruga ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 18 sty 2015, o 11:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[golytm]]></name></author>
<updated>2015-01-18T11:01:54+01:00</updated>
<published>2015-01-18T11:01:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114701#p114701</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114701#p114701"/>
<title type="html"><![CDATA[Re: Nie interpretuje warunku if w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114701#p114701"><![CDATA[
Przepraszam z tym syntaxem - poprawiłem. Widać cały kod któy wkleiłem - nie chciałem wklejać całego kodu z plików, bo trochę tego jest. Chyba że to pomoże, to oczywiście uzupełnię.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6734">golytm</a> — 18 sty 2015, o 11:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2015-01-18T10:14:28+01:00</updated>
<published>2015-01-18T10:14:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114693#p114693</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114693#p114693"/>
<title type="html"><![CDATA[Re: Nie interpretuje warunku if w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114693#p114693"><![CDATA[
Wrzuć kod w znacznikach syntax=c<br />bo takie są zasady na forum a po drugie nie cały<br />kod jest widoczny<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 18 sty 2015, o 10:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[golytm]]></name></author>
<updated>2015-01-18T11:00:20+01:00</updated>
<published>2015-01-18T01:12:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114674#p114674</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114674#p114674"/>
<title type="html"><![CDATA[Nie interpretuje warunku if w przerwaniu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10274&amp;p=114674#p114674"><![CDATA[
Witam.<br /><br />Mam następujący problem. Postanowiłem zrobić sobie własny protokół komunikacji za pomocą UART, którego chciałbym używać do komunikacji między Atmegami. Do testów posłużyłem się projektem Pana Mirka wyjaśniającym działanie bufora cyklicznego. Zmodyfikowałem go nieco do swoich potrzeb i pojawił się problem... modyfikacja polegała na tym, że w przerwaniu wywoływanym po odebraniu danych przez procesor, dodałem flagę która przyjmuje wartość 1 w momencie gdy odebrany bajt wskazuje na koniec sekwencji nadawania - jeżeli tak, drugie przerwanie pochodzące od timera może użyć bufora w którym znajdują się odebrane dane. Założeniem tego mechanizmu było zapewnienie pracy na buforze odbiorczym tylko w przypadku gdy zawiera dane zebrane pomiędzy bajty &quot;FRAME_START&quot; oraz &quot;FRAME_STOP&quot;. Problem polega na tym, że w przerwaniu od timera, wspomniana flaga nie jest prawidłowo sprawdzana w warunku &quot;if&quot;. Wiem to, bo wyrzuciłem wartość flagi na wyświetlacz - jeżeli w przerwaniu jest wspomniany if - flaga ma cały czas wartość 1 (ustawioną w prawidłowy sposób po pierwszej &quot;paczce danych&quot;), a funkcja w warunku nie wykonuje się. Jeżeli zakomentuję wspomnianego if - na wyświetlaczu widać zmianę tej zmiennej i funkcja z przerwania wykonuje się...<br />Nie mam już pomysłu gdzie jest problem<br />Proszę o jakieś sugestie - poniżej fragmenty kodu:<br /><br />plik mkuart.c:<br />[syntax=c]ISR( USART_RX_vect ) {<br />    uint8_t tmp_head;<br />    char data;<br /><br />    data = UDR0; //pobieramy natychmiast bajt danych z bufora sprzêtowego<br /><br />    // obliczamy nowy indeks „g³owy wê¿a”<br />    tmp_head = ( UART_RxHead + 1) &amp; UART_RX_BUF_MASK;<br /><br />    // sprawdzamy, czy w¹¿ nie zacznie zjadaæ w³asnego ogona<br />    if ( tmp_head == UART_RxTail ) {<br />    // tutaj mo¿emy w jakiœ wygodny dla nas sposób obs³u¿yæ  b³¹d spowodowany<br />    // prób¹ nadpisania danych w buforze, mog³oby dojœæ do sytuacji gdzie<br />    // nasz w¹¿ zacz¹³by zjadaæ w³asny ogon<br />    } else {<br />UART_RxHead = tmp_head; // zapamiêtujemy nowy indeks<br />UART_RxBuf&#91;tmp_head&#93; = data; // wpisujemy odebrany bajt do bufora<br />//dopisane przez mnie obsluga konca ramki<br />      if(data==FRAME_STOP){<br />      buffer_ready=1;<br />      }<br />    }<br /><br /><br />}[/syntax]<br /><br /><br />plik mkuart.h:<br />[syntax=c]volatile uint8_t buffer_ready; // flaga dostepnosci bufora[/syntax]<br /><br />plik main.c:<br />[syntax=c]ISR(TIMER0_COMPA_vect){<br /><br />if(timer==0){<br />if(buffer_ready){<br />if(receive_status()){<br />PORTB ^= (1&lt;&lt;PB1);<br />buffer_ready=0;<br />timer=timer_setting;<br />}<br />}<br />}<br />  timer=timer-1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6734">golytm</a> — 18 sty 2015, o 01:12</p><hr />
]]></content>
</entry>
</feed>