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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-10-29T13:47:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=19471&amp;mode</id>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-10-29T13:47:13+01:00</updated>
<published>2017-10-29T13:47:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197979#p197979</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197979#p197979"/>
<title type="html"><![CDATA[Re: Tablica wskaźników do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197979#p197979"><![CDATA[
Myślę, że kolega <strong>roske</strong> dobrze Ci podpowiada, tylko Ty robisz to jakoś nie tak.<br /><br />Jak stworzysz tę tablicę w pamięci RAM (czyli usuniesz atrybut PROGMEM), to polecenie <strong><em>tablica_wskaznikow[licznik](20);</em></strong> będzie działać.<br /><br />Jeśli chcesz te wskaźniki mieć koniecznie we FLASH to moim zdaniem lepiej zrobić np. tak:<br />[syntax=c]typedef void (*T_FUNKCJA)(uint8_t liczba);          //definiujemy nowy typ<br /><br />const T_FUNKCJA tablica_wskaznikow&#91;3&#93; PROGMEM = {<br />    fun_1,<br />    fun_2,<br />    fun_3<br />};<br /><br />// i wywołanie<br />    (* (T_FUNKCJA) pgm_read_ptr(&amp;tablica_wskaznikow&#91;licznik&#93;))(20);[/syntax]<br /><br />a najlepiej, to użyć <a href="http://forum.atnel.pl/topic19149.html#p194736"  class="postlink">kwalifikatora <strong>__flash</strong></a> i wtedy:<br />[syntax=c]// można zdefiniować tablicę tak<br />typedef void (*T_FUNKCJA &#91;3&#93;)(uint8_t liczba);          //definiujemy nowy typ<br /><br />const __flash T_FUNKCJA tablica_wskaznikow = {<br />    fun_1,<br />    fun_2,<br />    fun_3<br />};<br /><br />// lub można tak<br />typedef void (*T_FUNKCJA)(uint8_t liczba);          //definiujemy nowy typ<br /><br />const __flash T_FUNKCJA tablica_wskaznikow&#91;3&#93; = {<br />    fun_1,<br />    fun_2,<br />    fun_3<br />};<br /><br />// i w obu przypadkach zadziała<br />    tablica_wskaznikow&#91;licznik&#93;(20);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 29 paź 2017, o 13:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2017-10-29T12:49:09+01:00</updated>
<published>2017-10-29T12:49:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197974#p197974</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197974#p197974"/>
<title type="html"><![CDATA[Re: Tablica wskaźników do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197974#p197974"><![CDATA[
<div class="quotetitle">roske napisał(a):</div><div class="quotecontent"><br />Przypuszczam, że to nie karkołomne akrobacje z rejestracją callbacka &quot;naprawiły&quot; tablicę funkcji tylko zastosowanie makra pgm_read_*. Wstaw te makro do wersji nr 1 a też zadziała.<br /></div><br /><br />Nie zadziałało.<br /><br />[syntax=c]tablica_wskaznikow&#91;(pgm_read_ptr(&amp;tablica_wskaznikow&#91;licznik&#93;))&#93;(10);[/syntax]<br /><br />otrzyuję błąd, że indeks tablicy nie jest integer.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 29 paź 2017, o 12:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2017-10-27T21:29:37+01:00</updated>
<published>2017-10-27T21:29:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197897#p197897</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197897#p197897"/>
<title type="html"><![CDATA[Re: Tablica wskaźników do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197897#p197897"><![CDATA[
nie pomogło<br /><br />zrobiłem tak:<br /><br />[syntax=c]void (*callback) (uint8_t licz);<br /><br />void register_callback( void(*fun)(uint8_t licznik) ){//rejestracja funkcji callback<br />callback = fun;<br />}[/syntax]<br /><br />[syntax=c]while(1){<br /><br />register_callback(pgm_read_ptr(&amp;tablica_wskaznikow&#91;licznik == 3 ? licznik = 0: licznik++&#93;));<br /><br />(*callback)(10);<br /><br />_delay_ms(100);<br /><br /><br />}[/syntax]<br /><br />i działa ale nie wiem czy jest to &quot;zgodne ze sztuką&quot;    <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />Coś mi dzwoni, że p. Mirek pisał o tym w BB ale nie mogę tego odszukać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 27 paź 2017, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-10-27T21:20:00+01:00</updated>
<published>2017-10-27T21:20:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197896#p197896</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197896#p197896"/>
<title type="html"><![CDATA[Re: Tablica wskaźników do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197896#p197896"><![CDATA[
Spróbuj zmienną licznik zmienić na int.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 27 paź 2017, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jez2000]]></name></author>
<updated>2017-10-27T21:32:16+01:00</updated>
<published>2017-10-27T20:59:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197893#p197893</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197893#p197893"/>
<title type="html"><![CDATA[Tablica wskaźników do funkcji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19471&amp;p=197893#p197893"><![CDATA[
Cześć.<br /><br />Mam tablicę wskaźników do funkcji. Żeby wywołać daną funkcję muszę odwołać się do konkretnego elementu tablicy:<br /><br />[syntax=c]tablica_wskaznikow&#91;2&#93;(20);[/syntax] <br />Jak w nawiasach [] mam wartość stałą to wtedy działa jak powinno, wywołuje odpowiednią funkcję. Jeżeli natomiast chcę zastąpić indeks tablicy zmienną &quot;licznik&quot; program nie działa.<br /><br />Dlaczego tak się dzieje??<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 &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;MK_USART/mkuart.h&quot;<br /><br />void fun_1( uint8_t liczba );<br />void fun_2( uint8_t liczba );<br />void fun_3( uint8_t liczba );<br /><br />typedef void (*T_FUNKCJA &#91;3&#93;)(uint8_t liczba);//definiujemy nowy typ<br /><br />const T_FUNKCJA tablica_wskaznikow PROGMEM = {<br />fun_1,<br />fun_2,<br />fun_3<br />};<br /><br />uint8_t licznik;<br /><br /><br /><br />int main (void){<br /><br />DDRC |= (1&lt;&lt;7);<br />PORTC |= (1&lt;&lt;7);<br /><br />DDRC |= (1&lt;&lt;6);<br />PORTC |= (1&lt;&lt;6);<br /><br />DDRC |= (1&lt;&lt;5);<br />PORTC |= (1&lt;&lt;5);<br /><br /><br />while(1){<br /><br /><br />_delay_ms(100);<br />tablica_wskaznikow&#91;0&#93;(20);//tak działa<br />//tablica_wskaznikow&#91;licznik&#93;(20);//tak nie działa<br /><br />}<br />}<br /><br />void fun_1( uint8_t liczba ){<br />for( uint8_t i = 0; i &lt; liczba; i++){<br />PORTC ^= (1&lt;&lt;7);<br />_delay_ms(20);<br />}<br />}<br />void fun_2( uint8_t liczba ){<br />for( uint8_t i = 0; i &lt; liczba; i++){<br />PORTC ^= (1&lt;&lt;6);<br />_delay_ms(20);<br />}<br />}<br />void fun_3( uint8_t liczba ){<br />for( uint8_t i = 0; i &lt; liczba; i++){<br />PORTC ^= (1&lt;&lt;5);<br />_delay_ms(20);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11828">jez2000</a> — 27 paź 2017, o 20:59</p><hr />
]]></content>
</entry>
</feed>