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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-05-27T21:15:04+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7201&amp;mode</id>
<entry>
<author><name><![CDATA[dobo]]></name></author>
<updated>2014-05-27T21:15:04+01:00</updated>
<published>2014-05-27T21:15:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82581#p82581</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82581#p82581"/>
<title type="html"><![CDATA[Re: Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82581#p82581"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br />Masz błąd:<br /></div><br />Faktycznie, ale tylko w pierwszej linijce  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> - zmienna powinna być inicjowana do 0xFF. Działanie funkcji polega na tym, że jeśli kolejne 10 &quot;próbek&quot; było pozytywnych, to przycisk uznawany jest za wciśnięty. Jeżeli choć jedna była zerowa (-&gt; drgania styku), wynik jest negatywny. Stąd &quot;&amp;=&quot;. Dzięki za uwagę!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4528">dobo</a> — 27 maja 2014, o 21:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-05-27T21:03:01+01:00</updated>
<published>2014-05-27T21:03:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82579#p82579</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82579#p82579"/>
<title type="html"><![CDATA[Re: Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82579#p82579"><![CDATA[
<div class="quotetitle">dobo napisał(a):</div><div class="quotecontent"><br />Jak temu zaradzić?<br /></div><br />Masz błąd:<br />[syntax=c]inline uint8_t debounce(void)<br />{<br />        uint8_t debounced_state=0x00; //&lt;--------------------0x00<br />        for(uint8_t i=0; i&lt;READ_ITERATIONS; i++)<br />                debounced_state &amp;= ~(saved_state&#91;i&#93;);  //&lt;---------------0x00 &amp; cokolwiek = 0x00 (chyba miało być |=<br />       <br />        return debounced_state;         //&lt;------------------zawsze 0x00<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 maja 2014, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dobo]]></name></author>
<updated>2014-05-27T21:04:30+01:00</updated>
<published>2014-05-27T20:28:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82569#p82569</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82569#p82569"/>
<title type="html"><![CDATA[Re: Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82569#p82569"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Czy masz w switch sekcję default?<br /></div><br />Nie mam, ponieważ na razie nie mam nic takiego, co mogłoby się tam wykonywać. Dla pewności spróbowałem dodać pusty default: {}; i nic to nie zmieniło.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />wyrażenia, funkcje czy inne bloki programu które nigdy nie zmieniają wartości są zamieniane przez kompilator w stałą<br /></div><br />Podejrzewałem, że może chodzić o coś takiego. Faktycznie, w funkcji main() tablica saved_state nie jest nigdy modyfikowana (tylko w przerwaniu), a to jedyna &quot;zmieniająca się&quot; rzecz w funkcji debounce().<br /><br />Z funkcji button_press zostało tyle:[syntax=c]00000130 &lt;button_press&gt;:<br />one_button = i;//zwraca jeden z jednocześnie wciśniętych przycisków<br />temp = temp &gt;&gt; 1;<br />};<br /><br />return one_button;<br />}<br /> 130:8f ef       ldir24, 0xFF; 255<br /> 132:08 95       ret[/syntax]<br /><br /> Jak temu zaradzić?<br />------------------------<br />Edit: oczywiście z wyłączoną optymalizacją (i usunięciem inline) wszystko działało poprawnie, ale nie tędy droga - zwłaszcza, że korzystam z funkcji delay. <br />Dzięki podpowiedzi poszperałem i znalazłem częściowe rozwiązanie - mogę zadeklarować tablicę z modyfikatorem volatile i f. button_press() nie zostaje usunięta. Jednak wewnątrz debounce(), usuwana jest zmienna debounced_state. <br />Czy volatile to jedyne wyjście?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4528">dobo</a> — 27 maja 2014, o 20:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-05-27T12:45:00+01:00</updated>
<published>2014-05-27T12:45:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82536#p82536</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82536#p82536"/>
<title type="html"><![CDATA[Re: Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82536#p82536"><![CDATA[
Sprawdź sobie w pliku .lss czy funkcja button_press w ogóle istnieje. Przypuszczam, że jej tam nie znajdziesz. Nie znajdziesz też funkcji debounce (OK, w tej chwili jest inline, ale nawet jak usuniesz modyfikator to też jej nie będzie). A dlaczego? Przeanalizuj funkcję debounce, a na pewno znajdziesz odpowiedź (w ramach małej podpowiedzi: wyrażenia, funkcje czy inne bloki programu które nigdy nie zmieniają wartości są  zamieniane przez kompilator w stałą)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 27 maja 2014, o 12:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dobo]]></name></author>
<updated>2014-05-27T08:08:16+01:00</updated>
<published>2014-05-27T08:08:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82508#p82508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82508#p82508"/>
<title type="html"><![CDATA[Re: Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82508#p82508"><![CDATA[
Wynik funkcji switch obserwuję na watchu i zamiast wartości pojawia się właśnie ten komunikat. Przed while(1) jest tylko ustawianie DAC i timera, nic związanego z przyciskami.<br /><br />Próbowałem już przypisać najpierw wynik f. do zmiennej - efekt ten sam. Gdy program &quot;wchodzi&quot; do funkcji, to kursor od razu zatrzymuje się na klamrze zamykającej a wszelkie breaki w niej ustawiane mają komunikat, że nie zostaną osiągnięte. Nawet zmienna one_button nie jest inicjowana.<br /><br />Podaję wszytko, co związane z przyciskami (buttons.c bez includów).<br />[syntax=c]static uint8_t saved_state&#91;READ_ITERATIONS&#93;; //&#91;10&#93;<br /><br />void accumulate_buttons(void) //akumulacja w przerwaniu timera<br />{<br />static uint8_t index;<br /><br />saved_state&#91;index&#93; = PORTA.IN; //0 oznacza wciśnięty przycisk<br />index++;<br />if(index == READ_ITERATIONS)<br />index = 0;<br />}<br /><br />inline uint8_t debounce(void)<br />{<br />uint8_t debounced_state=0x00;<br />for(uint8_t i=0; i&lt;READ_ITERATIONS; i++)<br />debounced_state &amp;= ~(saved_state&#91;i&#93;);  //1 oznacza wciśnięty przycisk<br /><br />return debounced_state;//maska wciśniętych przycisków<br />}<br /><br />uint8_t button_press (void)  //zwraca nr przycisku lub 0xFF, gdy nic nie wciśnięte<br />{<br />uint8_t one_button=0xFF;<br />uint8_t temp=debounce();<br /><br />for (uint8_t i=0; i&lt;(B_NO_OF_BTNS); i++)  //ilość przycisków ustawiona na 8 - sprawdza cały bajt<br />{<br />if (temp &amp; 0x01) // sic! - sprawdza dany bit<br />one_button = i;//zwraca jeden z jednocześnie wciśniętych przycisków<br />temp = temp &gt;&gt; 1;<br />};<br /><br />return one_button;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4528">dobo</a> — 27 maja 2014, o 08:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-05-26T21:07:45+01:00</updated>
<published>2014-05-26T21:07:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82477#p82477</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82477#p82477"/>
<title type="html"><![CDATA[Re: Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82477#p82477"><![CDATA[
W przedstawionym przez Ciebie programie nic nie wskazuje na to, aby ta funkcja miałaby się nie wykonać.<br />Najlepiej przedstaw całość programu bo ten wielokropek przed while wydaje się skrywać pewną tajemnicę <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=1183">atmel</a> — 26 maja 2014, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dobo]]></name></author>
<updated>2014-05-26T20:22:17+01:00</updated>
<published>2014-05-26T20:22:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82468#p82468</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82468#p82468"/>
<title type="html"><![CDATA[Błąd Call to unknown function]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7201&amp;p=82468#p82468"><![CDATA[
Cześć,<br /><br />Od pewnego czasu obserwuję forum, kupiłem też zestaw ATB z książkami i wszystko do tej pory szło pięknie.<br />Natknąłem się jednak w swojej aplikacji na błąd jak w temacie i nie mogę nigdzie znaleźć konkretnych informacji na jego temat. Program się kompiluje, problem pojawia się w momencie wykonywania funkcji button_press (jest omijana). Korzystam z Atmel Studio 6.<br /><br />Poniżej uproszczona struktura programu:<br /><br />main.c<br />[syntax=c]#include &quot;buttons.h&quot;<br />int main(void) <br />{ ...<br />    while(1) { switch(button_press()) {...}  <br />  ... }<br />     <br />   return 0;<br />}[/syntax]<br /><br />buttons.c<br />[syntax=c]uint8_t button_press(void) {...} //zwraca nr przycisku albo 0xFF, gdy nic nie wciśnięte[/syntax]<br /><br />buttons.h<br />[syntax=c]uint8_t button_press(void);[/syntax]<br /><br />Z góry dziękuję za wszelką pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4528">dobo</a> — 26 maja 2014, o 20:22</p><hr />
]]></content>
</entry>
</feed>