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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-08-27T06:26:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22506&amp;mode</id>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-08-27T06:26:15+01:00</updated>
<published>2019-08-27T06:26:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221661#p221661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221661#p221661"/>
<title type="html"><![CDATA[Re: Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221661#p221661"><![CDATA[
<div class="quotetitle">MisterWhite napisał(a):</div><div class="quotecontent"><br />Trochę się nie zrozumieliśmy. Struktura SILNIK nie określa różnych silników, a opisuje parametry pracy jednego. Po prostu wywołując SILNIK1 mówię że np. nasz silnik ma obracać się do przodu z prędkością V1 a wywołując SILNIK2 uruchamiam go do tyłu z prędkością V2.<br /></div><br />Nie zrozumieliśmy się, ponieważ dość ważne jest jednak nazewnictwo. Gdybyś np. strukturę nazwał PARAMETRY_RUCHU (lub choćby RUCH), a zmienne RUCH1, RUCH2, RUCH3, osobie postronnej łatwiej byłoby zrozumieć Twoje intencje. Podobnie jest z nazwą funkcji. Nazwa Obsluga_Silnika jest zbyt ogólna i niewiele mówi. Do mnie bardziej przemówiłaby np. nazwa Ustaw_Predkosc.<br /><br />Nadal nie do końca rozumiem, co dokładnie chcesz osiągnąć. Przykładowo, skoro silnik jest jeden i klawisz ma ustawić jego parametry pracy, to po co Ci dwa wskaźniki do funkcji w jednej strukturze BUTTON. Jeden klawisz ma ustawić dwie różne prędkości tego samego silnika? Mam wrażenie, że niepotrzebnie skomplikowałeś sprawę i sam już się w tym nieco pogubiłeś. Gdybyś jednak mógł podać większe fragmenty kodu, być może łatwiej byłoby coś doradzić.<br /><br /><div class="quotetitle">MisterWhite napisał(a):</div><div class="quotecontent"><br />Generalnie chodzi mi o to czy jest jakiś kruczek aby mieć wskaźnik do funkcji z wywołanym wcześniej parametrem.<br /></div><br />Ogólnie rzecz biorąc, odpowiedź brzmi: NIE. Wskaźnik do funkcji to nie jest jakaś magiczna struktura, to zwykła wartość (16-bitowa w przypadku 8-bitowego AVR) reprezentująca adres (w pamięci programu) wejścia do funkcji. Żadnych dodatkowych informacji we wskaźniku umieścić się nie da. Można ewentualnie kombinować z użyciem jakichś &quot;funkcji pośredniczących&quot;, ale raczej nie tędy droga (jak sam chyba zauważyłeś), choćby dlatego, że to fatalnie wpływa na czytelność kodu.<br /><br />Moim zdaniem Twoje dylematy wynikają z próby niewłaściwego użycia wskaźników do funkcji, lub użycia ich w sytuacji do tego nieodpowiedniej. Wskaźniki do funkcji stosuje się np. tam, gdzie funkcja wywoływana po naciśnięciu klawisza jest inna w zależności od stanu, w jakim znajduje się aktualnie program (czyli np. przy obsłudze menu w zależności od kontekstu). Jeśli dobrze zrozumiałem, u Ciebie po naciśnięciu klawisza wywoływana jest zawsze ta sama funkcja ustawiająca parametry ruchu silnika, zmienia się tylko argument do niej przekazywany, więc wskaźnik do funkcji jest tu zbędny. W Twojej strukturze BUTTON możesz sobie zapisać ten argument (lub wskaźnik do niego) i przy obsłudze klawisza po prostu wywołujesz Twoją funkcję Obsluga_Silnika z tym argumentem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 27 sie 2019, o 06:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2019-08-26T19:42:32+01:00</updated>
<published>2019-08-26T19:42:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221654#p221654</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221654#p221654"/>
<title type="html"><![CDATA[Re: Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221654#p221654"><![CDATA[
Trochę się nie zrozumieliśmy. Struktura SILNIK nie określa różnych silników, a opisuje parametry pracy jednego. Po prostu wywołując SILNIK1 mówię że np. nasz silnik ma obracać się do przodu z prędkością V1 a wywołując SILNIK2 uruchamiam go do tyłu z prędkością V2. Mogę tak sobie ustalić różne tryby pracy tego samego silnika i wywoływać je odpowiednimi klawiszami  - do tego mają właśnie one służyć. Dodatkowe klawisze mogą też służyć do precyzyjnego dostrojenia wybranej już prędkości. Stąd trudno określić z góry zarówno ilość obiektów SILNIK jak i klawiszy.<br />Funkcja Obsluga_Silnika to prostu przełączanie uzwojeń silnika krokowego w odpowiedniej kolejności i z właściwą prędkością, zgodnie z danymi pobieranymi z wybranego obiektu SILNIK. Niestety odpowiadam że smartfona i nie mam jak przytoczyć kodu.<br />Generalnie chodzi mi o to czy jest jakiś kruczek aby mieć wskaźnik do funkcji z wywołanym wcześniej parametrem. <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 26 sie 2019, o 19:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[banita 17]]></name></author>
<updated>2019-08-24T16:30:22+01:00</updated>
<published>2019-08-24T16:30:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221587#p221587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221587#p221587"/>
<title type="html"><![CDATA[Re: Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221587#p221587"><![CDATA[
Cześć,<br />Twój opis jest trochę za mało dokładny. Mógłbyś sprecyzować czym dysponujesz i co chcesz osiągnąć ?<br /><br />1) ile masz silników ? (z pierwszego akapitu wydaje się, że jeden silnik a z listingu, że kilka silników między innymi stąd konsternacja),<br />2) ile masz przycisków i jaka jest rola każdego z nich ? (jeżeli jeden silnik to rozumiem, że każdy przycisk odnosi się do tego samego silnika ale jeżeli masz kilka silników to jakie role pełnią poszczególne przyciski),<br />3) rozumiem, że funkcja która nazywasz: &quot;Obsługa_Silnika&quot; to funkcja która jest rejestrowana pod wskaźnikiem &quot;void ( *kfun) (SILNIK *btn);&quot;. Jeżeli nie jest to tajemnicą to wrzuć definicję tej funkcji.<br /><br />Pozdrawiam <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=279">banita 17</a> — 24 sie 2019, o 16:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Szofer]]></name></author>
<updated>2019-08-23T15:19:50+01:00</updated>
<published>2019-08-23T15:19:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221571#p221571</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221571#p221571"/>
<title type="html"><![CDATA[Re: Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221571#p221571"><![CDATA[
ABB ACS 580 tez na fona apka jest.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7664">Szofer</a> — 23 sie 2019, o 15:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michu]]></name></author>
<updated>2019-08-23T13:58:28+01:00</updated>
<published>2019-08-23T13:58:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221570#p221570</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221570#p221570"/>
<title type="html"><![CDATA[Re: Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221570#p221570"><![CDATA[
Witaj<br />Zamontuj falownik i po sprawie , tam masz wszystkie operacje na <br />przyciskach<br />-start<br />-stop<br />-do przodu <br />-do tył i wiele innych <br /><br />No chyba że chcesz się pomęczyć samemu  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> albo myślisz o sterowaniu z telefonu.<br />Do falowników LG chyba jest aplikacja na PC<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9810">michu</a> — 23 sie 2019, o 13:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-08-22T20:53:45+01:00</updated>
<published>2019-08-22T20:53:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221562#p221562</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221562#p221562"/>
<title type="html"><![CDATA[Re: Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221562#p221562"><![CDATA[
Z Twojego opisu trudno jest wywnioskować, co dokładnie chcesz osiągnąć. Nie wiadomo np.: ile jest silników, ile jest klawiszy, a przede wszystkim jakie są zależności między nimi, to znaczy iloma i którymi silnikami sterują poszczególne klawisze.<br /><br />Tak na pierwszy rzut oka, skoro funkcja <strong><em>Obsługa_Silnika</em></strong> jest wspólna, to po co Ci w ogóle wskaźnik do niej w strukturze <em>BUTTON</em>? Powinieneś w niej umieścić raczej parametry, na jakie dany klawisz ma ustawić poszczególne silniki po jego wciśnięciu. Wydaje mi się, że niepotrzebnie skomplikowałeś sprawę a rozwiązanie może być banalne, ale musiałbyś sprecyzować cel, jaki chcesz osiągnąć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 22 sie 2019, o 20:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MisterWhite]]></name></author>
<updated>2019-08-22T15:09:15+01:00</updated>
<published>2019-08-22T15:09:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221559#p221559</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221559#p221559"/>
<title type="html"><![CDATA[Wskaźnik do funkcji, ale z jużustalonym parametrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22506&amp;p=221559#p221559"><![CDATA[
Witam<br />Może na przykładzie wyjaśnię o co mi chodzi.<br />Wyobraźmy sobie iż mamy silnik któremu za pomocą paru klawiszy chcielibyśmy nadawać pewne parametry ruchu - klawisz nr1 - silnik obraca się z prędkością v1 do przodu, klawisz nr2 - silnik obraca się z prędkością v2 do tyłu, itd.<br />Tworzę więc najpierw strukturę SILNIK i odpowiednie obiekty:<br />[syntax=c]typedef struct{<br />uint8_t  prędkość;<br />uint8_t  kierunek;<br />}SILNIK;<br /><br />SILNIK Silnik1, Silnik2, Silnik3, itd;[/syntax]<br />Następnie tworzę drugą strukturę związaną z klawiszami, jak w znanym ogólnie przykładzie:<br />[syntax=c]typedef struct {<br />volatile uint8_t *KPORT;<br />uint8_t mask;<br />uint8_t wait_time_s;<br />void ( *kfun1) (SILNIK *btn);<br />void ( *kfun2) (SILNIK *btn);<br />uint8_t klock;<br />uint8_t flag;<br />}BUTTON;<br /><br />BUTTON Klawisz1, Klawisz2, itd. ;[/syntax]<br /><br />Oczywiście jako fun1 i fun2 kryje się funkcja Obsługa_Silnika - jest to ta sama funkcja wywoływana z różnymi obiektami SILNIKA - Silnik1 i Silnik2. Tu nie ma problemu, bo w procedurze obsługi klawisza mogę wywołać fun ze wskaźnikiem do Silnik1 i Silnik2.<br />Schody zaczynają się przy kolejnych klawiszach Klawisz2, Klawisz3 itd.<br />Przy tworzeniu tych obiektów mogętylko podać wskaźnik do funkcji Obsługa_Silnika która dla każdego obiektu będzie taka sama bez uwzględnienia iż powinna  być wywoływana z różnymi paramtrami. Funkcja obsługi klawiszy też jest jedna. <br />Radzę sobie w ten sposób iż tworzę zbiór dodatkowych funkcji pośrednich wywoływanych z obiektów Klawisz1, Klawisz2 itd., i dopiero w tych funkcjach wywołuję  Obsługę_Silnika z odpowiednim parametrem.<br />Ale chciałbym prościej. Jak to osiągnąć?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1051">MisterWhite</a> — 22 sie 2019, o 15:09</p><hr />
]]></content>
</entry>
</feed>