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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-12-28T11:52:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=21771&amp;mode</id>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-28T11:52:02+01:00</updated>
<published>2018-12-28T11:52:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215132#p215132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215132#p215132"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215132#p215132"><![CDATA[
Niezłe uzupełnienie wiedzy z BB, dzięki, poszedł <strong>pomógł</strong>!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 28 gru 2018, o 11:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-12-28T11:06:55+01:00</updated>
<published>2018-12-28T11:06:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215131#p215131</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215131#p215131"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215131#p215131"><![CDATA[
<div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />Natomiast powyższego nie mogę zrozumieć. Skoro nie ma gwiazdki, to do PORTC powinien przypisać się adres drugiego elementu wskaźnika na tablicę, a nie to co pod tym wskaźnikiem jest.<br /></div><br />Gwiazdka jest operatorem dereferencji. W uproszczeniu można przyjąć, że nawiasy kwadratowe są alternatywnym operatorem dereferencji.<br />Wyrażenie <strong><em>wsk[n]</em></strong> mówi kompilatorowi: do wartości adresu zawartego we wskaźniku <strong><em>wsk</em></strong> dodaj wartość <strong><em>(n*rozmiar_elementu_tablicy_w_bajtach)</em></strong> i spod uzyskanego w ten sposób adresu odczytaj zmienną.<br /><br />Działa to tak samo, jak w przypadku użycia nazwy tablicy <strong><em>tab[n]</em></strong>. W uproszczeniu można przyjąć, że nazwa tablicy też jest wskaźnikiem na pierwszy jej element, tylko że jest wartością stałą, której nie można zmienić. W przypadku nazwy tablicy <strong>nie można</strong> tak, jak w przypadku wskaźnika użyć operacji arytmetycznych przypisujących nazwie tablicy inną wartość (np. <strong><em>tab = tab + 1;</em></strong>).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 28 gru 2018, o 11:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-28T10:23:57+01:00</updated>
<published>2018-12-28T10:23:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215130#p215130</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215130#p215130"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215130#p215130"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Alternatywnie można użyć notacji tablicowej (indeksowej), czyli wsk[1].<br /></div><br />Chyba nie rozumiem jeszcze, dlaczego ta alternatywa działa, a faktycznie działa..<br />[syntax=c]PORTC ^= *(wsk+1)[/syntax]<br />Co się dzieje powyżej, rozumiem. Skoro jest gwiazdka, to znaczy że do PORTC przypisuję to co jest pod wskaźnikiem, a nie jego adres.<br />[syntax=c]PORTC ^= wsk&#91;1&#93;[/syntax]<br />Natomiast powyższego nie mogę zrozumieć. Skoro nie ma gwiazdki, to do PORTC powinien przypisać się adres drugiego elementu wskaźnika na tablicę, a nie to co pod tym wskaźnikiem jest.<br /><br />Gdzie popełniam błąd myślowy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 28 gru 2018, o 10:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-12-27T11:59:05+01:00</updated>
<published>2018-12-27T11:59:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215096#p215096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215096#p215096"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215096#p215096"><![CDATA[
<div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />Wiec gdybym stworzył wskaźnik na tablicę, a później w if’ie chciałbym powołać się wskaźnikiem na jej drugi element, mogę zrobić np. w ten sposób?[syntax=c]uint8_t *wsk = tab;<br />if (klawisz((1&lt;&lt;PD5))) PORTC ^= *(wsk+1);[/syntax]<br /></div><br />Oczywiście że tak. Alternatywnie można użyć notacji tablicowej (indeksowej), czyli <strong><em>wsk[1]</em></strong>.<br /><br />Na wskaźnikach można również wykonywać operacje arytmetyczne, przypisując im nową wartość (przy założeniu, że <strong>nie</strong> zostały zadeklarowane jako <strong><em>const</em></strong>):[syntax=c]//<br />    uint8_t tab&#91;&#93; = {32, 16, 8};<br />    uint8_t *wsk = tab;<br />        <br />// odczyt wartości pierwszego elementu tablicy i przypisanie do rejestru PORTC<br />    PORTC = wsk&#91;0&#93;;     // notacja tablicowa<br />    // lub<br />    PORTC = *(wsk+0);   // notacja wskaźnikowa<br />    // lub prościej<br />    PORTC = *wsk;       // notacja wskaźnikowa<br />        <br />// odczyt wartości drugiego elementu tablicy<br />    PORTC = wsk&#91;1&#93;;<br />    // lub<br />    PORTC = *(wsk+1);<br />    // zamiast tego możemy wskaźnikowi przypisać nową wartość,<br />    // tak, aby wskazywał na drugi element tablicy<br />    wsk = wsk + 1;      // lub wsk += 1; lub wsk++;<br />                        // od tej chwili wskaźnik wsk wskazuje<br />                        // na drugi element tablicy<br />    // i odczytać drugi element tablicy<br />    PORTC = *wsk;<br /><br />// odczyt wartości trzeciego elementu tablicy<br />    // w związku z tym, że wsk wskazuje teraz<br />    // na drugi element tablicy, odczyt trzeciego może wyglądać tak<br />    PORTC = wsk&#91;1&#93;;     // jedynka w nawiasie kwadratowym to offset<br />                        // od drugiego elementu tablicy<br />    // alternatywnie<br />    PORTC = *(wsk+1);<br />    // możemy też ponownie zwiększyć wartość wskaźnika o 1<br />    wsk++;              // od tej chwili wsk wskazuje<br />                        // na trzeci element tablicy<br />    // i odczytać trzeci element tablicy<br />    PORTC = *wsk;<br /><br />// nazwy tablicy nie można używać podobnie jak wskaźnika<br />    tab++;              // spowoduje błąd kompilacji[/syntax]<br />Wskaźniki są bardzo przydatne, jednak należy zdawać sobie sprawę z pewnych faktów.<br /><br />Przykładowo:[syntax=c]// o ile poniższa linijka wygeneruje błąd<br />// z powodu przekroczenia rozmiaru tablicy<br />    PORTC = tab&#91;20&#93;;    // 'array subscript is above array bounds &#91;-Warray-bounds&#93;'<br />// o tyle taka linijka kodu<br />    PORTC = wsk&#91;20&#93;;   // przejdzie bez ostrzeżeń - programista<br />                       // musi sam pilnować rozmiaru tablicy[/syntax]<br /><br />Podobna sytuacja występuje w przypadku pobrania do wskaźnika adresu pojedynczej zmiennej, a nie adresu tablicy:<br />[syntax=c]uint8_t zmienna = 7;<br />uint8_t * wsk = &amp;zmienna;<br /><br />    // w przypadku użycia wskaźnika przykładowo w ten sposób<br />    PORTC = wsk&#91;1&#93;;<br />    // lub w ten sposób<br />    PORTC = *(wsk+1);<br />// nie zostanie wyświetlone żadne ostrzeżenie,<br />// natomiast z przyczyn (wydaje mi się) oczywistych<br />// odczytane zostaną jakieś przypadkowe dane z pamięci,<br />// ponieważ kompilator nie sprawdza tego,<br />// czy wskaźnik wskazuje na tablicę, czy na pojedynczą zmienną,<br />// czy też na element struktury[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 27 gru 2018, o 11:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-26T23:23:05+01:00</updated>
<published>2018-12-26T23:23:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215082#p215082</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215082#p215082"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215082#p215082"><![CDATA[
Ok, chyba zalapalem.<br />Oczywiscie, ze to są tylko rozważania teoretyczne, chcę po prostu poćwiczyć wskaźniki.<br /><br />Wiec gdybym stworzył wskaźnik na tablicę, a później w if’ie chciałbym powołać się wskaźnikiem na jej drugi element, mogę zrobić np. w ten sposób?<br />[syntax=c]uint8_t *wsk = tab;<br />if (klawisz((1&lt;&lt;PD5))) PORTC ^= *(wsk+1);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 26 gru 2018, o 23:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2018-12-26T19:46:55+01:00</updated>
<published>2018-12-26T19:46:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215080#p215080</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215080#p215080"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215080#p215080"><![CDATA[
<div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />mógłbym posługiwać się<br />[syntax=c]if (klawisz((1&lt;&lt;PD5))) PORTC ^= tab&#91;0&#93;;[/syntax]<br />Więc gdybym zrobił tak:<br />[syntax=c]uint8_t *wsk = tab;<br />if (klawisz((1&lt;&lt;PD5))) PORTC ^= wsk&#91;0&#93;;[/syntax]<br />to na PORTC trafiłyby adresy poszczególnych rekordów tablicy tab, a nie jej zawartość.<br /></div><br />Chyba się nieco pogubiłeś. W takim przypadku wyrażenia <strong><em>tab[0]</em></strong> oraz <strong><em>wsk[0]</em></strong> są sobie równoważne. Można je także zapisać jako <strong><em>*(tab+0)</em></strong> lub <strong><em>*(wsk+0)</em></strong>.<br /><br />Natomiast wyrażenie:<div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />[syntax=c]uint8_t *wsk = tab;<br />if (klawisz((1&lt;&lt;PD5))) PORTC ^= *wsk&#91;0&#93;;[/syntax]<br /></div>to błąd, ponieważ próbujesz  użyć elementu tablicy o typie <em>uint8_t</em> jako wskaźnika. Zadziałałoby to w przypadku, gdyby zmienna <strong><em>wsk</em></strong> nie była pojedynczym wskaźnikiem, tylko tablicą wskaźników:<br />[syntax=c]uint8_t *wsk&#91;3&#93; = { &amp;tab&#91;0&#93;, &amp;tab&#91;1&#93;, &amp;tab&#91;2&#93; };<br />if (klawisz((1&lt;&lt;PD5))) PORTC ^= *wsk&#91;0&#93;;[/syntax]<br /><br />Oczywiście zakładam, że to rozważania teoretyczne, bo w realnym programowaniu taki kod nie sensu. Jeśli chcesz w ten (lub podobny) sposób osiągnąć jakiś rzeczywisty cel, to opisz dokładniej problem, wtedy może coś uda się doradzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 26 gru 2018, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-26T15:37:17+01:00</updated>
<published>2018-12-26T15:37:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215075#p215075</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215075#p215075"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215075#p215075"><![CDATA[
Ogólnie ten mój przykład to tylko przykład skomplikowania sobie programu, ten sam rezultat uzyskałbym pomijając tablicę wskaźników, a potem w pętli głównej zamiast <br />[syntax=c]if (klawisz((1&lt;&lt;PD5))) PORTC ^= *wsk&#91;0&#93;;[/syntax]<br />mógłbym posługiwać się<br />[syntax=c]if (klawisz((1&lt;&lt;PD5))) PORTC ^= tab&#91;0&#93;;[/syntax]<br /><br />Jednak chciałem poćwiczyć wskaźniki.<br /><br />Gdybym jednak zamiast tworzyć tablicę wskaźników stworzył wskaźnik do tablicy (tak jak Mirek pokazał), jak mógłbym poźniej w if'ie odwoływać się tym wskaźnikiem do poszczególnych rekordów tablicy tab?<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />zrób tak<br /><br />Składnia: [ Pobierz ] [ Ukryj ]<br />język c<br />uint8_t tab[] = {32, 16, 8};<br />uint8_t *wsk = tab;<br />GeSHi<br /><br /><br />i możesz wtedy posługiwać się wsk tak jak tab<br /></div><br /><br />Więc gdybym zrobił tak:<br />[syntax=c]if (klawisz((1&lt;&lt;PD5))) PORTC ^= wsk&#91;0&#93;[/syntax]<br />to na PORTC trafiłyby adresy poszczególnych rekordów tablicy tab, a nie jej zawartość.<br />Natomiast tak:<br />[syntax=c]if (klawisz((1&lt;&lt;PD5))) PORTC ^= *wsk&#91;0&#93;[/syntax]<br />nie chce się skompilować, error: invalid type argument of unary '*' (have 'int')<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 26 gru 2018, o 15:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-26T13:48:06+01:00</updated>
<published>2018-12-26T13:48:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215067#p215067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215067#p215067"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215067#p215067"><![CDATA[
<strong>zubik</strong>, Twój kod jak najbardziej działa i ten sposób rozumowania też u mnie działa  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Nie bardzo rozumiem rozwiązanie Mirka..<br /><br />No i pozostaje bez odpowiedzi moje pytanie, czy można na początku programu zadeklarować tablicę wskaźników w ten sposób:<br />[syntax=c]uint8_t *wsk&#91;&#93;;[/syntax]<br />czy jednak trzeba określić przynajmniej jej wielkość:<br />[syntax=c]uint8_t *wsk&#91;3&#93;;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 26 gru 2018, o 13:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-26T13:24:54+01:00</updated>
<published>2018-12-26T13:24:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215065#p215065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215065#p215065"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215065#p215065"><![CDATA[
Więc tym razem error wygląda tak:<br /><br />&quot;invalid type argument of unary '*' (have 'int')&quot;<br /><br />Mirku, skoro mam zdefiniować tablicę wskaźników w ten sposób bez nawiasów kwadratowych<br />[syntax=c]uint8_t * wsk = tab;[/syntax]<br />to kompilator sam się skapnie, że ma to być tablica a nie zwykła zmienna wsk?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 26 gru 2018, o 13:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-12-26T13:15:45+01:00</updated>
<published>2018-12-26T13:15:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215064#p215064</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215064#p215064"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215064#p215064"><![CDATA[
eeeeh edytowałem, sorki<br /><br />[syntax=c]uint8_t * wsk = tab;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 gru 2018, o 13:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-26T13:07:08+01:00</updated>
<published>2018-12-26T13:07:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215062#p215062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215062#p215062"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215062#p215062"><![CDATA[
Niestety, gdy zrobię tak jak mówisz, wyrzuca mi w tej linijce i to nie warning tylko error:<br /><br />error: invalid initializer<br /><br /> <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 26 gru 2018, o 13:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2018-12-26T12:55:54+01:00</updated>
<published>2018-12-26T12:55:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215061#p215061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215061#p215061"/>
<title type="html"><![CDATA[Re: Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215061#p215061"><![CDATA[
<div class="quotetitle">dayer41 napisał(a):</div><div class="quotecontent"><br />Rozumiem, że wpisując ilość elementów tablicy, tworzy się już definicja i rezerwuje się pamięć. <br />Czy w takim razie można bez warningów zadeklarować tablicę, czy trzeba ją od razu definiować?<br /></div><br />Źle rozumiesz - tak tworzysz tablicę wskaźników<br /><br />zrób tak<br /><br />[syntax=c]uint8_t tab&#91;&#93; = {32, 16, 8};<br />uint8_t *wsk = tab;[/syntax]<br /><br />i możesz wtedy posługiwać się wsk tak jak tab<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 gru 2018, o 12:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dayer41]]></name></author>
<updated>2018-12-26T12:17:49+01:00</updated>
<published>2018-12-26T12:17:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215059#p215059</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215059#p215059"/>
<title type="html"><![CDATA[Eclipse warning - przekroczenie indeksu tablicy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21771&amp;p=215059#p215059"><![CDATA[
Hej, <br />mam problem z warningiem, który wyskakuje mi przy kompilacji prostego programu:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />uint8_t i;<br />uint8_t klawisz(uint8_t x);<br />uint8_t tab&#91;&#93; = {32, 16, 8};<br />uint8_t *wsk&#91;&#93;;<br /><br />int main (void)<br />{<br />DDRC |= (1&lt;&lt;PC5) | (1&lt;&lt;PC4) | (1&lt;&lt;PC3); //wejscia<br />DDRD &amp;= ~((1&lt;&lt;PD7) | (1&lt;&lt;PD6) | (1&lt;&lt;PD5)); // wyjscia<br />PORTC |= (1&lt;&lt;PC5) | (1&lt;&lt;PC4) | (1&lt;&lt;PC3); //wygaszenie diod<br />PORTD |= (1&lt;&lt;PD7) | (1&lt;&lt;PD6) | (1&lt;&lt;PD5); //podciaganie przyciskow do vcc<br /><br />wsk&#91;0&#93; = &amp;tab&#91;0&#93;;<br />wsk&#91;1&#93; = &amp;tab&#91;1&#93;;<br />wsk&#91;2&#93; = &amp;tab&#91;2&#93;;<br /><br />while (1)<br />{<br />if (klawisz((1&lt;&lt;PD5))) PORTC ^= *wsk&#91;0&#93;;<br />if (klawisz((1&lt;&lt;PD6))) PORTC ^= *wsk&#91;1&#93;;<br />if (klawisz((1&lt;&lt;PD7))) PORTC ^= *wsk&#91;2&#93;;<br />}<br />}<br /><br />uint8_t klawisz(uint8_t x)<br />{<br />if (!(PIND &amp; x)) return 1;<br />return 0;<br />}[/syntax]<br /><br />Warning wyskakuje w liniach 7, 17, 18, 23 i 24. Ma on związek z przekroczeniem indeksu tablicy uint8_t *wsk[]:<br />&quot;array 'wsk' assumed to have one element [enabled by default]&quot;<br />&quot;array subscript is above array bounds [-Warray-bounds]&quot;<br /><br />Kiedy w deklaracji tablicy w nawiasach kwadratowych wpiszę liczbę 3 (zgodnie z ilością elementów), wtedy warningi znikają.<br />[syntax=c]uint8_t *wsk&#91;3&#93;;[/syntax] <br />Rozumiem, że wpisując ilość elementów tablicy, tworzy się już definicja i rezerwuje się pamięć. <br />Czy w takim razie można bez warningów zadeklarować tablicę, czy trzeba ją od razu definiować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3977">dayer41</a> — 26 gru 2018, o 12:17</p><hr />
]]></content>
</entry>
</feed>