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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-02-03T13:23:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=21858&amp;mode</id>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-02-03T13:23:57+01:00</updated>
<published>2019-02-03T13:23:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216343#p216343</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216343#p216343"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216343#p216343"><![CDATA[
No nieźle, nieźle <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Tak więc wziąłem sobie do głowy Wasze rady. Wywaliłem tę lcd_refresh i wróciłem do poprzedniej postaci :<br /><br />[syntax=c]void lcd_refresh(void)<br />{<br />static uint8_t locate_flag = 0; // informuje o konieczności przestawienia kursora lcd<br /><br />for(uint8_t y=0; y&lt;LCD_ROWS; y++)<br />{<br />lcd_locate( 0, y );<br /><br />for(uint8_t x=0; x&lt;LCD_COLS; x++)<br />{<br /><br />if( lcd_buf&#91;y&#93;&#91;x&#93; != lcd_buf_old&#91;y&#93;&#91;x&#93; )<br />{<br />if( !locate_flag )<br />lcd_locate( x, y );<br />lcd_char( lcd_buf&#91;y&#93;&#91;x&#93; );<br />lcd_buf_old&#91;y&#93;&#91;x&#93; = lcd_buf&#91;y&#93;&#91;x&#93;;<br />locate_flag = 1;<br />}<br />else<br />locate_flag = 0;<br /><br />}<br /><br />}<br />}[/syntax]<br /><br />Tak samo zrobiłem key_init, wyrzuciłem(zakomentowałem) niepotrzebne na razie funkcje, powołałem zmienną volatile uint8_t fRefresh i main.c wygląda następująco :<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;inout.h&quot;<br />#include &quot;LCD/lcd.h&quot;<br />#include &quot;LCD/menu.h&quot;<br />#include &quot;1Wire/onewire.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;1Wire/crc8.h&quot;<br />#include &quot;IR_DECODE/ir_decode.h&quot;<br /><br />volatile uint8_t ms10_cnt; // zmienne potrzebne do timerów programowych<br /> volatile uint8_t s1_cnt;<br /> volatile uint8_t fRefresh;<br />ISR( TIMER0_OVF_vect ) { <br /><br /> if(++ms10_cnt&gt;99) {<br />   ms10_cnt=0;<br /> if(++s1_cnt&gt;59) s1_cnt=0;<br /><br />}<br /> fRefresh = 1;<br /> }<br /><br />int main (void) {<br /><br /><br />        DDRD |= (1&lt;&lt;PA7); // ustawienie kierunku linii podświetlenia LCD jako wyjście<br />PORTD |= (1&lt;&lt;PA7); // stan wysoki LCD - podświetlenie<br /><br />key_init();<br /><br /><br />        fRefresh=0;<br />    buf_lcd_init(); // inicjalizacja buforowania wyświetlacza LCD<br /><br />    sei();<br /><br />        menu_refresh(); // odświeżanie menu<br /><br />while(1){<br /><br />    key_down_press();<br />key_up_press();<br />key_enter_press();<br />key_cancel_press();<br /><br />if (fRefresh == 1){<br />fRefresh = 0;<br />lcd_refresh();<br />}<br />}<br />}[/syntax]<br />w menu.c timer (&lt;- czy jest dobrze opisany?? )<br />[syntax=c]void buf_lcd_init(void) {<br /><br /><br />TCNT0 = 0x00; //wartość zliczona przez licznik<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />TIMSK |= (1&lt;&lt;TOIE0); // przerwanie Overflow<br /><br />lcd_init();    // inicjalizacja LCD<br />buf_cls();<br /><br />}[/syntax]<br /><br /><div class="quotetitle">dziobak7 napisał(a):</div><div class="quotecontent"><br />Inna ważna rzecz. Jeśli masz 3 poziom zagnieżdżenia w funkcji, to jest coś nie tak z Twoim rozumieniem kodu (pominę wyjątki bo to nie jest na tyle skomplikowana aplikacja).<br /></div> 3 poziom zagnieżdżenia funkcji - który fragment masz na myśli?<br /><br /><div class="quotetitle">dziobak7 napisał(a):</div><div class="quotecontent"><br />Następne... jeśli masz gdzieś zmienną typu flaga, z zasady powinna być ustawiana w 1 miejscu (znanym Ci) i testowana oraz ew. gaszona w 2. Dodatkowo, jej zmiana (czyli zapis), prawie zawsze powinna być zabezpieczona operacją atomową (poczytaj o ATOMIC_BLOCK). A jak jest teraz?<br /></div><br /><br />Trochę poczytałem o tym, ale czy to jest tak potrzebne do mojego kodu i nie można pozostać przy timerze? Ewentualnie opierając się na powyższym kodzie z timerem i przerwaniami, jakbyś to zrobił, wykorzystując ATOMIC_BLOCK?<br /><br /><div class="quotetitle">dziobak7 napisał(a):</div><div class="quotecontent"><br />Dodaj do kompilatora flagi:<br /><br />-Wall -Wextra -Wshadow -pedantic <br /><br />Masz to wydzielone w opcjach kompilacji w eclipse. Inne flagi są także bardzo przydatne ale powyższe wystarczą by pokazać Ci kilka(naście) potencjalnych błędów jakie popełniłeś. Przyjmij zasadę (na początek) że kod ma się kompilować bez ostrzeżeń.<br /></div>  Gdzie dokładnie mogę to znaleźć w eclipsie? Co do samej kompilacji kodu, nie wyrzuca mi żadnych błędów i ostrzeżeń.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 3 lut 2019, o 13:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-02-02T21:58:53+01:00</updated>
<published>2019-02-02T21:58:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216332#p216332</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216332#p216332"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216332#p216332"><![CDATA[
No to żeś panie narobił sobie grochu z kapustą - że aż strach ... aż ciężko to analizować ... po prostu koszmar<br /><br />pomijam już milczeniem to, że w procedurze obsługi przerwania wykonujesz tak drastycznie długotrwałe operacje jak wyświetlanie na LCD to jeszcze do tego można powiedzieć, że wyrżnąłeś &quot;wątrobę&quot; ze zdrowego organizmu <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> czyli mechanizm sprawdzania flagi zajętości LCD i przyszyłeś tę wątrobę poza ustrojem, czyli gdzieś w kodzie głównym programu - no masakra <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i ty się dziwisz że coś ci tam nie działa ... a jeszcze tą jakąś funkcją lcd_refresh() chlastasz jak maczetą po całym ciele ... oczywiście ciele programu nawet w przerwaniach ... Panie panie - taki program ma prawo a nawet obowiązek działać dokładnie jak teraz ci działa  - czyli nie działa ...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />ja bym na twoim miejscu - stworzył mały projekt testowy najpierw tego z czym masz problem i łatwiej byłoby ci testować - ale wywal że z tego testu ten cały zbędny balast czyli coś tam z silnikami nie silnikami itp<br /><br />Już nie wspomnę, że w GB masz przykład takiego buforowanego wyświetlania, który działa idealnie i widziałeś tam gdzieś takie rzeczy jakie zrobiłeś w swoim kodzie czyli to wybebeszanie biblioteki LCD ? albo co gorsze wyświetlanie na LCD w przerwaniach ? Wszędzie się trąbi i na forum ale i w Bluebooku co i rusz piszę aby przerwania były jak najkrótsze a ty tam LCD zasadzasz - no to tak ... to jak tu w ogóle coś pomóc jak idziesz kompletnie pod prąd<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 lut 2019, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-02-02T20:50:05+01:00</updated>
<published>2019-02-02T20:50:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216331#p216331</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216331#p216331"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216331#p216331"><![CDATA[
timer_flag wyrzuciłem. Zrobiłem to w inny sposób. Zmieniłem funkcję lcd_refresh, w taki sposób aby mogła być wywoływana w pętli głównej i żeby można było sprawdzać flagę zajętości:<br /><br />[syntax=c]void lcd_refresh(void)<br />{<br />static uint8_t locate_flag = 0; // informuje o konieczności przestawienia kursora lcd<br />static uint8_t x = 0, y = 0;<br /><br />if( check_BF()!= 0x80 ) // sprawdzenie zajętosci flagi<br />{<br />if (x == LCD_COLS) {<br />x = 0;<br />y++;<br />if (y == LCD_ROWS)<br />y = 0;<br />lcd_locate(0,y);<br />return;<br />}<br /><br />if( lcd_buf&#91;y&#93;&#91;x&#93; != lcd_buf_old&#91;y&#93;&#91;x&#93; )<br />{<br />if(!locate_flag)<br />{<br />lcd_locate(x,y);<br />locate_flag=1;<br />return;<br />}<br /><br />lcd_char( lcd_buf&#91;y&#93;&#91;x&#93; );<br />lcd_buf_old&#91;y&#93;&#91;x&#93;=lcd_buf&#91;y&#93;&#91;x&#93;;<br />}<br />else<br />{<br />locate_flag=0;<br />}<br /><br />x++;<br />}<br /><br />}[/syntax]<br /><br />Co do timera0 - ustawiony na reagowanie na przepełnienie, przerwanie overflow: <br /><br />[syntax=c]void buf_lcd_init(void) {<br /><br />TCNT0 = 0x00; //wartość zliczona przez licznik <br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />        TIMSK |= (1&lt;&lt;TOIE0); // przerwanie Overflow<br />lcd_init();    // inicjalizacja LCD<br />buf_cls();<br /><br />}<br />ISR( TIMER0_OVF_vect ) {<br />if(++ms10_cnt&gt;99) {<br />  ms10_cnt=0;<br />if(++s1_cnt&gt;59) s1_cnt=0;<br />}<br />lcd_refresh();<br />menu_refresh();<br />}[/syntax]<br /><br />pętla główna :<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;inout.h&quot;<br />#include &quot;LCD/lcd.h&quot;<br />#include &quot;LCD/menu.h&quot;<br />#include &quot;1Wire/onewire.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;1Wire/crc8.h&quot;<br />#include &quot;IR_DECODE/ir_decode.h&quot;<br /><br />volatile uint8_t ms10_cnt; // zmienne potrzebne do timerów programowych<br /> volatile uint8_t s1_cnt;<br /> volatile uint8_t timer_flag;<br />int main (void) {<br /><br /><br />        DDRD |= (1&lt;&lt;PA7); // ustawienie kierunku linii podświetlenia LCD jako wyjście<br />PORTD |= (1&lt;&lt;PA7); // stan wysoki LCD - podświetlenie<br /><br />        //Ustawienie przyciskow jako wejscia<br />DDR(KEY1_PORT) &amp;= ~ (KEY1_DOWN);<br />DDR(KEY2_PORT) &amp;= ~ (KEY2_UP);<br />DDR(KEY3_PORT) &amp;= ~ (KEY3_ENTER);<br />DDR(KEY4_PORT) &amp;= ~ (KEY4_CANC);<br /><br />//Podciągniecie do VCC - stan wysoki<br />PORTB |= (KEY1_DOWN);<br />        PORTB |= (KEY2_UP);<br />        PORTB |= (KEY3_ENTER);<br />        PORTB |= (KEY4_CANC);<br /><br />        // ustawienie siłowników jako wyjścia<br />        DDR(SILOWNIK1_PORT) |= SILOWNIK_POM1;<br />        DDR(SILOWNIK2_PORT) |= SILOWNIK_POM2;<br /><br />        // ustawienie stanu niskiego dla siłowników<br />        PORTD &amp;=~ (SILOWNIK_POM1);<br />        PORTD &amp;=~ (SILOWNIK_POM2);<br /><br /><br />        DDRC |= LED_PIN;// kierunek pinu – wyjściowy<br />    // ustawienia TIMER2 w Fast PWM dla wentylatora EC &lt;---- W TRAKCIE DALSZEGO PISANIA FUNKCJI (na razie nieużywany)<br />    TCCR0 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);// tryb Fast PWM<br />    TCCR0 |= (1&lt;&lt;COM01);// clear at TOP<br />    TCCR0 |= (1&lt;&lt;CS00);// preskaler = 1<br />  buf_lcd_init(); // inicjalizacja buforowania wyświetlacza LCD<br /><br />    sei();<br />        menu_refresh();<br /><br />while(check_BF()!= 0x80){ // while(1) przyniósł taki sam efekt<br /><br />key_down_press();<br />key_up_press();<br />key_enter_press();<br />key_cancel_press();<br /><br />lcd_refresh();<br /><br />}<br />}[/syntax]<br /><br />Wynikiem jest napis programator + &quot;&gt;&quot; i litera &quot;A&quot; w 2 wierszu, 2 kolumnie. <br />Mogę się mylić ale brakuje jakiejś zmiennej w funkcji buf_lcd, źle rozpisaną mam obsługę przerwania albo brak zmiennej w pętli while(). Użyłem też takiego sformułowania : while(check_BF()!= 0x80). Po tym mam coś takiego:<br /><a href="https://obrazkiforum.atnel.pl/20433/e409df159b685d8ce8f9f3483189954d.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/e409df159b685d8ce8f9f3483189954d.jpg" alt="Obrazek" /></a><br /><br />Jeżeli ktoś miałby chwilę i chęci żeby rozpisać mi jak to powinno wyglądać, żeby menu zadziałało, innymi słowy dał tą przysłowiową &quot;rybę&quot;, to będę niezmiernie wdzięczny. Pozwoli mi to ruszyć dalej z programem, a na tę chwilę jestem w kropce.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 2 lut 2019, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kazekat]]></name></author>
<updated>2019-02-02T15:52:11+01:00</updated>
<published>2019-02-02T15:52:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216327#p216327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216327#p216327"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216327#p216327"><![CDATA[
W procedurze obsługi przerwanie timer_flag ustawiasz na 1(co 16,38 ms) i w pętli głównej dwa posty wyżej timer_flag też ustawiasz na 1, a więc co obieg pętli. To chyba nie powinno tak być. Musisz sprawdzić czy odpala Ci się przerwanie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17021">kazekat</a> — 2 lut 2019, o 15:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-02-02T13:35:51+01:00</updated>
<published>2019-02-02T13:35:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216324#p216324</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216324#p216324"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216324#p216324"><![CDATA[
wywołuje w buf_lcd_init(), której timer jest opisany na samym dole w menu.c. Tamten chwilowo zakomentowałem, jego odkomentowanie nie pomaga. <br /><br />[syntax=c]void buf_lcd_init(void) {<br /><br />TCCR0 = _BV(CS00)|_BV(CS01)|_BV(CS02); //fclk/1024,<br />TCNT0 = 0x00; //wartość zliczona przez licznik<br />TIMSK |= _BV(TOIE0); //selektywne zezwolenie na przerwania od przepełnienia licznika0 TOIE0=1, przepełnienie co 256*64us=16,38ms<br /><br />lcd_init();// inicjalizacja LCD<br />buf_cls();<br /><br />}<br /><br /><br />ISR (TIMER0_OVF_vect) //przerwanie wywoływane co ok. 16,4 ms<br />{<br />// tutaj procedura wykonywana cyklicznie<br />  timer_flag = 1;<br />};[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 2 lut 2019, o 13:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2019-01-31T18:45:16+01:00</updated>
<published>2019-01-31T18:45:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216306#p216306</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216306#p216306"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216306#p216306"><![CDATA[
A gdzie włączasz timer? Masz zakomentowaną konfigurację. Może gdzieś w funkcji jest? Ale nie wywołujesz tego...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 31 sty 2019, o 18:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-31T15:41:38+01:00</updated>
<published>2019-01-31T15:41:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216305#p216305</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216305#p216305"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216305#p216305"><![CDATA[
Ajj teraz spojrzałem, nie wrzuciło mi się main.c po poprawkach. Wygląda to teraz tak:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;inout.h&quot;<br />#include &quot;LCD/lcd.h&quot;<br />#include &quot;LCD/menu.h&quot;<br />#include &quot;1Wire/onewire.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;1Wire/crc8.h&quot;<br />#include &quot;7-segment/d_led.h&quot;<br />#include &quot;IR_DECODE/ir_decode.h&quot;<br /><br />volatile uint8_t timer_flag;<br /><br /><br />int main (void) {<br /><br /><br />        DDRD |= (1&lt;&lt;PA7); // ustawienie kierunku linii podświetlenia LCD jako wyjście<br />PORTD |= (1&lt;&lt;PA7); // stan wysoki LCD - podświetlenie<br /><br />        //Ustawienie przyciskow jako wejscia<br />DDR(KEY1_PORT) &amp;= ~ (KEY1_DOWN);<br />DDR(KEY2_PORT) &amp;= ~ (KEY2_UP);<br />DDR(KEY3_PORT) &amp;= ~ (KEY3_ENTER);<br />DDR(KEY4_PORT) &amp;= ~ (KEY4_CANC);<br /><br />//Podciągniecie do VCC - stan wysoki<br />PORTB |= (KEY1_DOWN);<br />        PORTB |= (KEY2_UP);<br />        PORTB |= (KEY3_ENTER);<br />        PORTB |= (KEY4_CANC);<br /><br />        // ustawienie siłowników jako wyjścia<br />        DDR(SILOWNIK1_PORT) |= (SILOWNIK_POM1);<br />        DDR(SILOWNIK2_PORT) |= (SILOWNIK_POM2);<br /><br />        // ustawienie stanu niskiego dla siłowników<br /><br />        PORTD &amp;=~ (SILOWNIK_POM1);<br />        PORTD &amp;=~ (SILOWNIK_POM2);<br /><br /><br />        DDRC |= LED_PIN;// kierunek pinu – wyjściowy<br /><br />    //    TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />    //    TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />    //    OCR0 = (F_CPU/1024UL)/100UL;// 100ms - 100Hz<br />    //    TIMSK |= (1&lt;&lt;OCIE0);// przerwanie Compare Match<br /><br />        sei();<br /><br /><br />        buf_lcd_init(); // inicjalizacja buforowania wyświetlacza LCD<br /><br />//        lcd_locate(0,3);<br />//        lcd_str(&quot;CENTRALA WENTYLACYJNA&quot;);<br />//        buf_locate(1,0);<br />//        lcd_str(&quot;NACISNIJ DOWOLNY KLAWISZ&quot;);<br /><br />        menu_refresh(); // odświeżanie wyświetlacza LCD<br /><br />while(1){<br /><br />key_down_press();<br />key_up_press();<br />key_enter_press();<br />key_cancel_press();<br /><br />timer_flag = 1;<br /><br />if (timer_flag) {<br />lcd_refresh();<br />            timer_flag = 0;<br />}<br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 31 sty 2019, o 15:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-31T15:31:38+01:00</updated>
<published>2019-01-31T15:31:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216304#p216304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216304#p216304"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216304#p216304"><![CDATA[
<div class="quotetitle">Gammadion napisał(a):</div><div class="quotecontent"><br />mam nadzieję, że jakaś świeża głowa to wyłapie<br /></div><br />Moja głowa nie jest już taka świeża bo latka lecą - no ale ten program z twoją funkcją main() nie ma prawa w ogóle działać, po starcie od razu się zawiesi, wyłączy przerwania i tak będzie wisiał w nieskończoność.<br /><br />Zajrzyj jednak do Bluebooka do podstaw - polecam - tym bardziej, że masz Bluebooka ...<br /><br />co MUSI być w funkcji main() ?<br /><br />chyba pętla główna - a u ciebie jest ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 sty 2019, o 15:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-31T15:15:04+01:00</updated>
<published>2019-01-31T15:15:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216303#p216303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216303#p216303"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216303#p216303"><![CDATA[
Próbowałem w taki sposób :<br /><br />[syntax=c]void buf_lcd_init(void) {<br /><br />TCCR0 = _BV(CS00)|_BV(CS01)|_BV(CS02); //fclk/1024,<br />TCNT0 = 0x00; //wartość zliczona przez licznik<br />TIMSK |= _BV(TOIE0); //selektywne zezwolenie na przerwania od przepełnienia licznika0 TOIE0=1, przepełnienie co 256*64us=16,38ms<br /><br />lcd_init();// inicjalizacja LCD<br />buf_cls();<br /><br />}<br /><br /><br />ISR (TIMER0_OVF_vect) //przerwanie wywoływane co ok. 16,4 ms<br />{<br />// tutaj procedura wykonywana cyklicznie<br />  timer_flag = 1;<br />};[/syntax]<br /><br />oraz zdjęcie efektu przed i po timerze...<br /><a href="https://obrazkiforum.atnel.pl/20433/d05961a894765c5d221da83cadec1d6f.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/d05961a894765c5d221da83cadec1d6f.jpg" alt="Obrazek" /></a><br /><br />mam nadzieję, że jakaś świeża głowa to wyłapie <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=20433">Gammadion</a> — 31 sty 2019, o 15:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-31T11:06:38+01:00</updated>
<published>2019-01-31T11:06:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216296#p216296</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216296#p216296"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216296#p216296"><![CDATA[
Sprawdziłem kod na płytce, przypisałem również klawisze do sterowania, natomiast wymagany jeszcze jest timer do odświeżania LCD , żeby to wszystko działało. No i za bardzo mi to nie wychodzi...Sprawdziłem w GB inicjalizację mechanizmu buforowania LCD void buf_lcd_init(void), natomiast wykorzystane jest tam zdarzenie barrel, którego nie mam swoim kodzie. Czy ktoś mógłby pomóc mi z timerem w inny sposób do moich bibliotek i funkcji?<br /><br />menu.c - na samym dole timer <br />[syntax=c]#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;lcd.h&quot;<br />#include &quot;menu.h&quot;<br />#include &quot;stdlib.h&quot;<br /><br />void menu_refresh(void);<br />uint8_t menu_get_lv(menu_it *j);<br /><br />//----ZMIENNE DO OBSŁUGI MENU----//<br /><br />menu_it *currentPoint = &amp;menu1; // przechowanie adresu aktualnie wybranego elementu menu (domyslnie ustawiony menu1)<br />uint8_t menu_indeks; // przechowanie numeru aktualnie wybranego elementu na danym poziomie menu, np. menu6<br />uint8_t lcd_row_pos; // przechowanie numeru wiersza w LCD, czyli 1,2,3 lub 4 - zmienna potrzebna do przechodzenia<br />                     // na element wykraczajacy poza obszar wyswietlacza<br />uint8_t lcd_row_pos_lv_1, lcd_row_pos_lv_2; // wskazanie aktualnego poziomu menu - zmiennych musi byc o 1 mniej niz rzeczywistych poziomow w menu<br /><br /><br /><br />    // ************************************************************************************//<br />// DEFINICJA ELEMENTOW MENU :(*name, *up, *down, *podmenu, *nadmenu, *(menu_function)) //<br />    // ************************************************************************************//<br /><br />menu_it menu1 = { &quot;ZARZADZANIE CENTRALA&quot;, &amp;menu4, &amp;menu2, &amp;sub_menu1_1, NULL, NULL };<br />    menu_it sub_menu1_1 = { &quot;PRACA POM.1&quot;, &amp;sub_menu1_8, &amp;sub_menu1_2, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_2 = { &quot;PRACA POM.2&quot;, &amp;sub_menu1_1, &amp;sub_menu1_3, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_3 = { &quot;STOP POM.1&quot;, &amp;sub_menu1_2, &amp;sub_menu1_4, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_4 = { &quot;STOP POM.2&quot;, &amp;sub_menu1_3, &amp;sub_menu1_5, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_5 = { &quot;NASTAWA TEMP.1&quot;, &amp;sub_menu1_4, &amp;sub_menu1_6, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_6 = { &quot;NASTAWA TEMP.2&quot;, &amp;sub_menu1_5, &amp;sub_menu1_7, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_7 = { &quot;USTAW ZAKRES TEMP.&quot;, &amp;sub_menu1_6, &amp;sub_menu1_8, NULL, &amp;menu1, NULL};<br />    menu_it sub_menu1_8 = { &quot;TEMP.MINIMALNA&quot;, &amp;sub_menu1_8, &amp;sub_menu1_1, NULL, &amp;menu1, NULL};<br /><br />menu_it menu2 = { &quot;PODGLAD SYSTEMU&quot;, &amp;menu1, &amp;menu3, &amp;sub_menu2_1, NULL, NULL };<br />    menu_it sub_menu2_1 = { &quot;TEMPERATURY&quot;, &amp;sub_menu2_4, &amp;sub_menu2_2, &amp;sub_menu2_1_1, &amp;menu2, NULL};<br />        menu_it sub_menu2_1_1 = { &quot;TEMPERATURA POM.1&quot;, &amp;sub_menu2_1_3, &amp;sub_menu2_1_2, NULL, &amp;sub_menu2_1, NULL};<br />        menu_it sub_menu2_1_2 = { &quot; TEMPERATURA POM.2&quot;, &amp;sub_menu2_1_1, &amp;sub_menu2_1_3, NULL, &amp;sub_menu2_1, NULL};<br />        menu_it sub_menu2_1_3 = { &quot; TEMPERATURA WYMIENNIKA&quot;, &amp;sub_menu2_1_2, &amp;sub_menu2_1_1, NULL, &amp;sub_menu2_1, NULL};<br />    menu_it sub_menu2_2 = { &quot;WENTYLATOR&quot;, &amp;sub_menu2_1, &amp;sub_menu2_3, NULL, &amp;menu2, NULL};<br />    menu_it sub_menu2_3 = { &quot;NAGRZEWNICE&quot;, &amp;sub_menu2_2, &amp;sub_menu2_4, NULL, &amp;menu2, NULL};<br />        menu_it sub_menu2_3_1 = { &quot;NAGRZEWNICA 1&quot;, &amp;sub_menu2_3_2, &amp;sub_menu2_3_2, NULL, &amp;sub_menu2_3, NULL};<br />        menu_it sub_menu2_3_2 = { &quot;NAGRZEWNICA 2&quot;, &amp;sub_menu2_3_1, &amp;sub_menu2_3_1, NULL, &amp;sub_menu2_3, NULL};<br />    menu_it sub_menu2_4 = { &quot;PRZEPUSTNICE&quot;, &amp;sub_menu2_3, &amp;sub_menu2_1, &amp;sub_menu2_4_1, &amp;menu2, NULL};<br />        menu_it sub_menu2_4_1 = { &quot;PRZEPUSTNICA 1&quot;, &amp;sub_menu2_4_2, &amp;sub_menu2_4_2, NULL, &amp;sub_menu2_4, NULL};<br />        menu_it sub_menu2_4_2 = { &quot;PRZEPUSTNICA 2&quot;, &amp;sub_menu2_4_1, &amp;sub_menu2_4_1, NULL, &amp;sub_menu2_4, NULL};<br /><br />menu_it menu3 = { &quot;DATA I GODZINA&quot;, &amp;menu2, &amp;menu4, &amp;sub_menu3_1, NULL, NULL };<br />    menu_it sub_menu3_1 = { &quot;USTAW DATE&quot;, &amp;sub_menu3_2, &amp;sub_menu3_2, NULL, &amp;menu3, NULL};<br />    menu_it sub_menu3_2 = { &quot;USTAW GODZINE&quot;, &amp;sub_menu3_1, &amp;sub_menu3_1, NULL, &amp;menu3, NULL};<br /><br />menu_it menu4 = { &quot;PROGRAMATOR&quot;, &amp;menu3, &amp;menu1, &amp;sub_menu4_1, NULL, NULL};<br />    menu_it sub_menu4_1 = { &quot;WLACZ/WYLACZ&quot;, &amp;sub_menu4_3, &amp;sub_menu4_2, NULL, &amp;menu4, NULL};<br />    menu_it sub_menu4_2 = { &quot;CZAS WLACZENIA&quot;, &amp;sub_menu4_1, &amp;sub_menu4_3, NULL, &amp;menu4, NULL};<br />    menu_it sub_menu4_3 = { &quot;CZAS WYLACZENIA&quot;, &amp;sub_menu4_2, &amp;sub_menu4_1, NULL, &amp;menu4, NULL};<br /><br />//******************************************************//<br />//****OBSŁUGA WYŚWIETLACZA Z WYKORZYSTANIEM BUFORÓW*****//<br />//******************************************************//<br /><br /><br />char lcd_buf_old&#91;LCD_ROWS&#93;&#91;LCD_COLS&#93;; // tablica na potrzeby odświeżania wyświetlacza - po wysyłaniu umożliwia sprawdzenie czy<br />//znak w buforze różni się od znaku aktualnie występującego na wyświetlaczu.<br /><br />char lcd_buf&#91;LCD_ROWS&#93;&#91;LCD_COLS&#93;; // bufor wyświetlacza lcd<br />uint8_t lcd_buf_x, lcd_buf_y; // współrzędne kursora dla danej kolumny x i wiersza y<br />char hd_buf&#91;ROWS*COLS&#93;;<br />char * active_buf = hd_buf;<br /><br />void buf_locate(uint8_t x, uint8_t y) // ustawienie kursora dla okreslonej pozycji<br />{<br />lcd_buf_x = x;<br />lcd_buf_y = y;<br />}<br /><br />// ---- Odświeżanie menu ---- //<br />//zmienna tadr tymczasowo przechowuje adresy kolejnych przejsc<br />//zmienna i przechowuje tymczasowa wartośc indeksu<br />void menu_refresh(void) {<br /><br />menu_it *tadr;<br />uint8_t i;<br /><br />if (currentPoint-&gt;nadmenu) tadr = (currentPoint-&gt;nadmenu)-&gt;podmenu;<br />else tadr = &amp;menu1;<br /><br />for (i = 0; i != menu_indeks - lcd_row_pos; i++) {<br />tadr = tadr-&gt;down;<br />}<br /><br />buf_cls();<br />for (i = 0; i &lt; LCD_ROWS; i++) {<br /><br />buf_locate(0, i);<br />if (tadr == currentPoint) buf_str_P(&quot;&gt;&gt;&quot;);<br />else buf_char(' ');<br /><br />buf_locate(2, i);<br />buf_str(tadr-&gt;name);<br /><br />tadr = tadr-&gt;down;<br />if (!tadr) break;<br /><br />}<br /><br /> lcd_refresh();<br />}<br /><br /><br />// ---- odświeżanie wyświetlacza ---- //<br /><br />void lcd_refresh(void)<br />{<br />static uint8_t locate_flag = 0; // informuje o konieczności przestawienia kursora lcd<br /><br />for(uint8_t y=0; y&lt;LCD_ROWS; y++)<br />{<br />lcd_locate(0,y);<br /><br />for(uint8_t x=0; x&lt;LCD_COLS; x++)<br />{<br />if( lcd_buf&#91;y&#93;&#91;x&#93; != lcd_buf_old&#91;y&#93;&#91;x&#93; ) // sprawdzenie, czy dany znak rózni sie od aktualnie wyswietlanego na danej pozycji<br />{<br />if( !locate_flag ) // petla do przechowywania informacji o ustawieniu kursora<br />lcd_locate( x, y );<br />lcd_char( lcd_buf&#91;y&#93;&#91;x&#93; );<br />lcd_buf_old&#91;y&#93;&#91;x&#93; = lcd_buf&#91;y&#93;&#91;x&#93;;<br />locate_flag = 1;<br />}<br />else<br />locate_flag = 0;<br />}<br />}<br />}<br /><br />// ---- czyszczenie wyswietlacza ---- //<br /><br />void buf_cls(void)<br />{<br />for(uint8_t y=0; y&lt;LCD_ROWS; y++)<br />{<br />for (uint8_t x=0; x&lt;LCD_COLS; x++)<br />{<br />lcd_buf&#91;y&#93;&#91;x&#93;=' '; // wpisanie w kazdym elemencie znaku spacji jako czyszczenie zawartosci ekranu<br />}<br />}<br />lcd_buf_x=0; lcd_buf_y=0;<br />}<br /><br />// ---- dodawanie znaków do bufora ---- //<br /><br />void buf_char(char c)<br />{<br />if (lcd_buf_x &lt; LCD_COLS &amp;&amp; lcd_buf_y &lt; LCD_ROWS)<br />{<br />lcd_buf&#91;lcd_buf_y&#93;&#91;lcd_buf_x&#93; = c;<br />lcd_buf_x++;<br />if (lcd_buf_x == LCD_COLS) {<br />lcd_buf_x = 0;<br />lcd_buf_y++;<br />if (lcd_buf_y == LCD_ROWS)<br />lcd_buf_y = 0;<br />}<br />}<br />}<br /><br />// ---- dodawanie stringow wlasnych z pamięci RAM---- //<br /><br />void buf_str(const char *text)<br />{<br />while(*text)<br />buf_char(*text++);<br />}<br /><br />// ---- dodawanie stringow wlasnych z pamięci FLASH---- //<br /><br />void buf_str_P(const char * text) {<br />char c;<br />while( (c=pgm_read_byte(text++)) ) buf_char(c);<br />}<br /><br />//***********************************//<br />//********* FUNKCJE DO MENU*************//<br />//***********************************//<br /><br />// ---- Funkcja zwracająca numer indeksu elementu menu ----//<br />//zmienna tadr tymczasowo przechowuje adresy kolejnych przejsc<br />//zmienna i przechowuje tymczasowa wartośc indeksu menu_indeks<br /><br />uint8_t menu_get_indeks(menu_it *j) {<br /><br />menu_it *tadr;<br />uint8_t i = 0;<br />if (j-&gt;nadmenu) tadr = (j-&gt;nadmenu) -&gt; podmenu;<br />else tadr = &amp;menu1;<br /><br />while (tadr !=j) { // petla głowna, która przechodzi przez elementy menu, do momentu gdy tadr i j będą równe.<br />tadr = tadr -&gt; down;<br />i++;<br />}<br />return i;<br />}<br /><br />// ---- Funkcja zwracająca numer aktualnego poziomu menu ---- //<br />//zmienna tadr tymczasowo przechowuje adresy kolejnych przejsc<br />//zmienna i przechowuje tymczasowa wartośc indeksu<br /><br />uint8_t menu_get_lv(menu_it *j) {<br /><br />menu_it *tadr = j;<br />uint8_t i = 0;<br /><br />if (!j -&gt; nadmenu) return 0;<br /><br />while (tadr -&gt; nadmenu != NULL) { // petla głowna, która przechodzi przez poziomy menu, do momentu gdy będzie równa NULL<br />tadr = tadr -&gt; nadmenu;<br />i++;<br />}<br /><br />return i;<br />}<br /><br /><br /><br />// ---- funkcja do przejścia na pozycje wyzej ---- //<br /><br />void menu_up(void) {<br /><br />currentPoint = currentPoint-&gt; up; // ustawienie wskaznika na przejście w górę<br /><br />if(menu_indeks)<br />{<br />menu_indeks--; // jezeli nie jest to element na samej gorze, przesuniecie indeksu do gory<br />if(lcd_row_pos &gt; 0) lcd_row_pos--; // jezeli numer wiersza nie jest na samej górze (=0) to przesuniecie do gory<br />}<br />else<br />{<br />menu_indeks = menu_get_indeks(currentPoint); // zwrocenie numeru indeksu aktualnej pozycji<br /><br />if(menu_indeks &gt;=LCD_ROWS - 1) lcd_row_pos = LCD_ROWS - 1; //sprawdzenie czy indeks menu wykracza poza pozycje wierszy wyswietlacza<br />else lcd_row_pos=menu_indeks; // jesli nie, numer jest równy numerowi wiersza wyświetlacza<br />}<br /><br />menu_refresh();<br />}<br /><br />// ---- funkcja do przejscia na pozycje nizej ---- //<br /><br />void menu_down(void) {<br /><br />if(currentPoint-&gt;down) // sprawdzenie czy wystepuje nastepny element menu<br />{<br />currentPoint = currentPoint-&gt;down; // jesli tak - przypisanie jego adresu do wskaznika<br />menu_indeks++;<br />if(++lcd_row_pos &gt; LCD_ROWS - 1) lcd_row_pos = LCD_ROWS - 1; // jesli np. 4&gt;3 to 4=3. Kursor ma pozostac na ostatnim wierszu<br />}<br />else // jezeli warunek nie jest spelniony(brak kolejnych pozycji menu), przejscie na pierwszy element menu na danym poziomie<br />{<br />    menu_indeks = 0;<br />    lcd_row_pos = 0;<br />    if(currentPoint-&gt;nadmenu) currentPoint = (currentPoint-&gt;nadmenu)-&gt;podmenu; // sprawdzenie warunku w przypadku pozycji na podmenu- odwołanie się do struktur<br />    else currentPoint = &amp;menu1;<br />    }<br /><br />menu_refresh(); // odswiezenie menu<br />}<br /><br /><br />// ---- funkcja umozliwiająca przejście do menu podrzednego ---- //<br /><br />void menu_enter(void) {<br /><br />if (currentPoint -&gt; menu_function) currentPoint -&gt; menu_function(); // warunek sprawdzajacy, czy przypisane jest wykonanie funkcji<br />// jesli tak - wywołanie funkcji, np. uruchomienie wentylatora<br /><br />if (currentPoint -&gt; podmenu) // warunek sprawdzający czy można przejśc do menu podrzednego.<br />{<br />            switch (menu_get_lv(currentPoint)) // zapamiętanie poprzedniej pozycji kursora w menu nadrzędnym<br />            {<br />case 0:<br />lcd_row_pos_lv_1 = lcd_row_pos;<br />break;<br /><br />case 1:<br />lcd_row_pos_lv_2 = lcd_row_pos;<br />break;<br />}<br />menu_indeks = 0;<br />lcd_row_pos = 0;<br /><br />currentPoint = currentPoint -&gt; podmenu;<br />}<br />menu_refresh();<br /><br />}<br /><br />// ---- funkcja umożliwiająca przejście do menu nadrzednego ----//<br /><br />void menu_cancel(void) {<br /><br />if (currentPoint -&gt; nadmenu) { // sprawdzenie czy istnieje poziom nadrzedny menu<br /><br />switch (menu_get_lv(currentPoint)) { // sprawdzenie na ktorym poziomie menu jestesmy<br />case 1:<br />lcd_row_pos = lcd_row_pos_lv_1;<br />break;<br /><br />case 2:<br />lcd_row_pos = lcd_row_pos_lv_2;<br />break;<br />}<br /><br />currentPoint = currentPoint -&gt; nadmenu; // przypisanie odpowiedniego adresu menu nadrzędnego<br />menu_indeks = menu_get_indeks(currentPoint); // odczyt numeru elementu<br />}<br />menu_refresh();<br /><br />}<br /><br />// inicjalizacja mechanizmu buforowania LCD  &lt;----  TUTAJ POTRZEBNA POMOC<br />void buf_lcd_init(void) {<br /><br />TCCR0 |= (1&lt;&lt;WGM01);// tryb CTC<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);// preskaler = 1024<br />OCR0 = (F_CPU/1024UL)/100UL;// 100ms - 100Hz<br />TIMSK |= (1&lt;&lt;OCIE0);// przerwanie Compare Match<br /><br />lcd_init();// inicjalizacja LCD<br /><br />buf_cls();<br /><br />}[/syntax]<br /><br />menu.h :<br /><br />[syntax=c]// biblioteka dla menu<br />#ifndef MENU_H_<br />#define MENU_H_<br /><br /><br />#define LCD_REFRESH_MS20 // czas odswiezania LCD<br />#define COLS 20<br />#define ROWS 4<br /><br />#define AT(y,x) ((y*COLS)+x)<br /><br />// STRUKTURA MENU //<br /><br />typedef struct menu_item menu_it;<br /><br />struct menu_item {<br /><br />const char * name;<br />menu_it * up;<br />menu_it * down;<br />menu_it * podmenu;<br />menu_it * nadmenu;<br />void (*menu_function)(void);<br /><br />};<br /><br />// definicja wszystkich elementów menu //<br /><br />menu_it menu1;<br />        menu_it sub_menu1_1;<br />        menu_it sub_menu1_2;<br />        menu_it sub_menu1_3;<br />        menu_it sub_menu1_4;<br />        menu_it sub_menu1_5;<br />        menu_it sub_menu1_6;<br />        menu_it sub_menu1_7;<br />        menu_it sub_menu1_8;<br />menu_it menu2;<br />        menu_it sub_menu2_1;<br />                 menu_it sub_menu2_1_1;<br />                 menu_it sub_menu2_1_2;<br />                 menu_it sub_menu2_1_3;<br />        menu_it sub_menu2_2;<br />        menu_it sub_menu2_3;<br />                 menu_it sub_menu2_3_1;<br />                 menu_it sub_menu2_3_2;<br />        menu_it sub_menu2_4;<br />                 menu_it sub_menu2_4_1;<br />                 menu_it sub_menu2_4_2;<br />menu_it menu3;<br />        menu_it sub_menu3_1;<br />        menu_it sub_menu3_2;<br />menu_it menu4;<br />        menu_it sub_menu4_1;<br />        menu_it sub_menu4_2;<br />        menu_it sub_menu4_3;<br /><br /><br /><br />// deklaracja menu<br /><br />void menu_up(void); // przejscie kursora w gore<br />void menu_down(void); // przejscie kursora w dol<br />void menu_enter (void); // przejscie do podmenu<br />void menu_cancel (void); // powrot do nadrzednego menu<br />void menu_refresh(void); // odświeżanie<br /><br /><br /><br />void buf_locate(uint8_t x, uint8_t y);<br />void buf_char(char c);<br />void buf_cls(void);<br />void lcd_refresh(void);<br /><br />void buf_str(const char *text);<br />void buf_str_XY(uint8_t x, uint8_t y, char * text);<br />void buf_str_P(const char *text);<br /><br />void buf_lcd_init(void);<br /><br />extern char lcd_buf&#91;LCD_ROWS&#93;&#91;LCD_COLS&#93;;<br />extern char *active_buf;<br />extern char hd_buf&#91;ROWS*COLS&#93;;<br /><br />extern volatile uint8_t ms10_cnt;<br />extern volatile uint8_t s1_cnt;<br /><br />#endif[/syntax]<br /><br />przyciski do sterowania :<br /><br />[syntax=c]// ---- OBSŁUGA PRZYCISKÓW DO PORUSZANIA SIĘ PO MENU ---- //<br /><br />void key_down_press(void){<br /><br />static uint8_t key_down_lock = 0;<br /><br />if (!key_down_lock &amp;&amp; !(PINB &amp; KEY1_DOWN))<br />{<br />key_down_lock = 1;<br />menu_down();<br />LED_OFF;<br />} else if (key_down_lock &amp;&amp; (PINB &amp; KEY1_DOWN)) key_down_lock++;<br />}<br /><br />void key_up_press(void){<br /><br />static uint8_t key_up_lock = 0;<br /><br />if (!key_up_lock &amp;&amp; ! (PINB &amp; KEY2_UP))<br />{<br />key_up_lock = 1;<br />menu_up();<br />LED_OFF;<br />} else if (key_up_lock &amp;&amp; (PINB &amp; KEY2_UP)) key_up_lock++;<br />}<br /><br />void key_enter_press(void){<br /><br />static uint8_t key_enter_lock = 0;<br /><br />if (!key_enter_lock &amp;&amp; ! (PINB &amp; KEY3_ENTER))<br />{<br />key_enter_lock = 1;<br />menu_enter();<br />LED_ON;<br />} else if (key_enter_lock &amp;&amp; (PINB &amp; KEY3_ENTER)) key_enter_lock++;<br />}<br /><br />void key_cancel_press(void){<br /><br />static uint8_t key_cancel_lock = 0;<br /><br />if (!key_cancel_lock &amp;&amp; ! (PINB &amp; KEY4_CANC))<br />{<br />key_cancel_lock = 1;<br />menu_cancel();<br />LED_OFF;<br />} else if (key_cancel_lock &amp;&amp; (PINB &amp; KEY4_CANC)) key_cancel_lock++;<br />}[/syntax]<br /><br />Będę wdzięczny za wszelką pomoc, trochę mnie czas goni, a ja już czuje zmęczenie z tego wszystkiego  <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 31 sty 2019, o 11:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wirnick]]></name></author>
<updated>2019-01-30T16:05:03+01:00</updated>
<published>2019-01-30T16:05:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216265#p216265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216265#p216265"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216265#p216265"><![CDATA[
Znalazłem babol - w pliku &quot;pwm.c&quot; był drugi main. Skasowałem plik i jest OK.<br /><a href="https://obrazkiforum.atnel.pl/9272/5f7f81e9b85ea2a35421242bc581d74a.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/9272/5f7f81e9b85ea2a35421242bc581d74a.PNG" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9272">Wirnick</a> — 30 sty 2019, o 16:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-30T15:23:41+01:00</updated>
<published>2019-01-30T15:23:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216264#p216264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216264#p216264"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216264#p216264"><![CDATA[
<div class="quotetitle">Wirnick napisał(a):</div><div class="quotecontent"><br />&quot;multiple definition ...<br /></div> <br />no a co dalej po tych kropkach masz ? .... jak byk &quot;of main&quot;<br /><br />czyli masz w projekcie co najmniej dwa pliki z funkcją main - to jak chcesz żeby ci się to skompilowało - czytaj komunikaty do końca <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=54">mirekk36</a> — 30 sty 2019, o 15:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wirnick]]></name></author>
<updated>2019-01-30T12:34:51+01:00</updated>
<published>2019-01-30T12:34:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216261#p216261</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216261#p216261"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216261#p216261"><![CDATA[
Po poprawieniu w pliku menu.c nie mam błędów.<br />Nie kompiluje się do hex, ale w konsoli jest &quot;multiple definition ...&quot;.<br /><a href="https://obrazkiforum.atnel.pl/9272/d5819e002c218b66a7cf0d96a2b6bde5.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/9272/d5819e002c218b66a7cf0d96a2b6bde5.PNG" alt="Obrazek" /></a><br />Nie wprowadzałem zmian w plikach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9272">Wirnick</a> — 30 sty 2019, o 12:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-30T12:09:13+01:00</updated>
<published>2019-01-30T12:09:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216259#p216259</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216259#p216259"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216259#p216259"><![CDATA[
Pod menu_enter(void) jeszcze było menu_cancel(void), ale faktycznie to było to...<br />A ja z tym walczyłem tyle czasu..<br />Dziękuję za wyjaśnienie <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=20433">Gammadion</a> — 30 sty 2019, o 12:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2019-01-30T11:29:21+01:00</updated>
<published>2019-01-30T11:29:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216257#p216257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216257#p216257"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216257#p216257"><![CDATA[
Kolego, znalazłem gdzie miałeś babola. Nie zamknąłeś klamrą funkcji void menu_enter(void) w main.c. Funkcja void menu_refresh(void) była poniżej i kompilator traktował ją jako wewnętrzną, a to się kłóciło z deklaracją w main.h. Po usunięciu klamry na końcu pliku wszystko się kompiluje poprawnie. Przenosząc funkcję na górę przypadkowo pewnie to naprawiłeś.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 30 sty 2019, o 11:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-30T09:40:03+01:00</updated>
<published>2019-01-30T09:40:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216255#p216255</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216255#p216255"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216255#p216255"><![CDATA[
Panie Mirku, oczywiście zaglądałem do BB nawet przed GB (przepraszam za wcześniejsze niedomówienie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ). Jest tam wszystko jasno rozpisane. Ale po moich wypocinach nie osiągnąłem celu zamierzonego. Nie chcę już tutaj wrzucać różnych przypadków, tak więc napiszę krótko jak rozwiązałem problem z kompilacją - po prostu wrzuciłem menu_refresh (który był na samym dole menu.c) na samą górę pod linijkami :<br /><br />[syntax=c]char lcd_buf_old&#91;LCD_ROWS&#93;&#91;LCD_COLS&#93;; // tablica na potrzeby odświeżania wyświetlacza - po wysyłaniu umożliwia sprawdzenie czy<br />//znak w buforze różni się od znaku aktualnie występującego na wyświetlaczu.<br /><br />char lcd_buf&#91;LCD_ROWS&#93;&#91;LCD_COLS&#93;; // bufor wyświetlacza lcd<br />uint8_t lcd_buf_x, lcd_buf_y; // współrzędne kursora dla danej kolumny x i wiersza y<br /><br /><br />void buf_locate(uint8_t x, uint8_t y) // ustawienie kursora dla okreslonej pozycji<br />{<br />lcd_buf_x = x;<br />lcd_buf_y = y;<br />}[/syntax]<br /><br />Problem zniknął, wygenerował się plik.hex, niezależnie od tego, czy wrzucę swoją funkcję pierwotną, którą miałem, czy podpowiedzi kolegów lub kody z książki. Niestety nie mam przy sobie płytki, ale jak wrócę do domu to napiszę, czy wszystko działa jak należy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Co do funkcji lcd_buf(), została ona stworzona na podobieństwo Pana funkcji. Robię dość złożony projekt, do którego dojdą funkcje wykonawcze i zapewne jeszcze nie raz utknę i opiszę niejeden problem. <br />W każdym razie dziękuję wszystkim za pomoc !<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 30 sty 2019, o 09:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-29T21:48:33+01:00</updated>
<published>2019-01-29T21:48:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216247#p216247</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216247#p216247"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216247#p216247"><![CDATA[
eee bo mieszasz pojęcia - co ty bierzesz za jakąś funkcję lcd_buf() - nie dość, że masz wyraźny komunikat że zła ilość argumentów to mieszasz między książkami GB i BB nie patrząc nawet do czego są dane funkcje<br /><br />Mówiłem ci zajrzyj do BB do np biblioteki LCD i tam zobacz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 sty 2019, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-29T21:25:37+01:00</updated>
<published>2019-01-29T21:25:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216246#p216246</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216246#p216246"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216246#p216246"><![CDATA[
Przejrzałem kody w greenbooku na 365 i 366 stronie. Ogólnie miałem stringa wysyłać z pamięci RAM, przerobiłem na FLASH i wyrzuca mi kolejne błędy. Zdefiniowałem active_buf i lcd_buf w menu.h. Jeszcze jedna uwaga - w książce jest kod void buf_str_P(char*s), natomiast w kodzie źródłowym, który wrzuciłem do Eclipsa jest void buf_str_P(<strong>const</strong> char*s). <br />Przeróbki i błędy wyglądają następująco :<br /><br /><a href="https://obrazkiforum.atnel.pl/20433/6c08dd87a9350b4e9173c38af260ffbb.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/6c08dd87a9350b4e9173c38af260ffbb.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/20433/db0c7f32ba920fa11c82b3f68bd9b12e.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/db0c7f32ba920fa11c82b3f68bd9b12e.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/20433/84da1b031d85d62c4b759f76a78079d9.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/84da1b031d85d62c4b759f76a78079d9.png" alt="Obrazek" /></a><br /><a href="https://obrazkiforum.atnel.pl/20433/7f01598edfb5813f99f6e4d37cabc5a8.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/7f01598edfb5813f99f6e4d37cabc5a8.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 29 sty 2019, o 21:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-29T14:00:48+01:00</updated>
<published>2019-01-29T14:00:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216234#p216234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216234#p216234"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216234#p216234"><![CDATA[
Sprawdzę dzisiaj w książce jak będę w domu, może rzeczywiście robię coś źle. Clean nie pomaga, wyrzuca takie same błędy. <br />Co do buf_char, nic nie zmieniałem i napisany jest następująco:<br />[syntax=c]void buf_char(char c)<br />{<br />if ( lcd_buf_y&gt;=0 &amp;&amp; lcd_buf_y&lt;LCD_ROWS &amp;&amp; lcd_buf_x&gt;=0 &amp;&amp; lcd_buf_x&lt;LCD_COLS) // sprawdzenie poprawności współrzednych kursora<br />{<br />lcd_buf&#91;lcd_buf_y&#93;&#91;lcd_buf_x&#93; = c; // dodanie znaku do bufora w tablicach współrzednych x i y<br />lcd_buf_x++;<br />if (lcd_buf_x == LCD_COLS) {<br />lcd_buf_x = 0;<br />lcd_buf_y++;<br />if (lcd_buf_y == LCD_ROWS)<br />lcd_buf_y = 0;<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 29 sty 2019, o 14:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2019-01-29T13:34:44+01:00</updated>
<published>2019-01-29T13:34:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216232#p216232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216232#p216232"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216232#p216232"><![CDATA[
Teraz nie widzi funkcji menu_refresh w pliku menu.c. Dziwne... spróbuj zrobić Clean projektu przed kompilacją.<br />Widzę, że w funkcji buf_str wywołujesz funkcję buf_char. W niej też zmieniłeś parametry?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 29 sty 2019, o 13:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-01-29T13:25:06+01:00</updated>
<published>2019-01-29T13:25:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216231#p216231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216231#p216231"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216231#p216231"><![CDATA[
<div class="quotetitle">Gammadion napisał(a):</div><div class="quotecontent"><br />void buf_str(const char *name)<br />{<br />        while(*name)<br />                buf_char(*name++);<br />}<br /></div><br /><br />Panie kochany no zajrzyj proszę do Bluebooka, czy greenbooka do pierwszej lepszej biblioteki wysyłającej string z pamięci FLASH (czy to biblioteka do UART, czy do LCD itp) <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> no przecież masz tam jak byk jak to się robi - bo ta funkcja będzie zwracać śmieci<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 sty 2019, o 13:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-29T13:04:28+01:00</updated>
<published>2019-01-29T13:04:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216229#p216229</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216229#p216229"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216229#p216229"><![CDATA[
buf_str mam wrzucone w menu.h następująco :<br /><br />[syntax=c]void buf_locate(int8_t x, int8_t y);<br />void buf_char(char c);<br />void buf_cls(void);<br />void lcd_refresh(void);<br /><br />void buf_str(const char *name); // według podpowiedzi od Was jest const<br />void buf_str_XY(uint8_t x, uint8_t y, char * text);<br /><br />#endif[/syntax]<br /><br />następnie w menu.c mam w raz zadeklarowaną i wywołaną w menu_refresh, jak poniżej :<br /><br />[syntax=c]void buf_str(const char *name)<br />{<br />while(*name)<br />buf_char(*name++);<br />}<br />// ---- Odświeżanie menu ---- //<br />//zmienna tadr tymczasowo przechowuje adresy kolejnych przejsc<br />//zmienna i przechowuje tymczasowa wartośc indeksu<br />void menu_refresh(void) {<br /><br />menu_it *tadr;<br />uint8_t i;<br /><br />if (currentPoint-&gt;nadmenu) tadr = (currentPoint-&gt;nadmenu)-&gt;podmenu;<br />else tadr = &amp;menu1;<br /><br />for (i = 0; i != menu_indeks - lcd_row_pos; i++) {<br />tadr = tadr-&gt;down;<br />}<br /><br />buf_cls();<br />for (i = 0; i &lt; LCD_ROWS; i++) {<br /><br />buf_locate(0, i);<br />if (tadr == currentPoint) buf_str(&quot;&gt;&gt;&quot;);<br />else buf_char(' ');<br /><br />buf_locate(2, i);<br />buf_str(tadr-&gt;name);<br /><br />tadr = tadr-&gt;down;<br />if (!tadr) break;<br /><br />}<br /><br /> lcd_refresh();<br />}<br />}[/syntax]<br /><br />Obawiam się, że problem może tkwić w samym eclipsie, ponieważ teraz po kompilacji mam jakiś nowy błąd, nie generuje już nawet pliku.elf. Robiłem Builda, nie pomaga. Aczkolwiek jeśli kompiluje przykładowy program od Pana Mirka, to normalnie działa. <br />Wrzucam jeszcze screena z ostatniego komunikatu w zakładce Console:<br /><a href="https://obrazkiforum.atnel.pl/20433/7bab81c0896d41bf887a44b2fea09e83.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20433/7bab81c0896d41bf887a44b2fea09e83.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 29 sty 2019, o 13:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2019-01-29T11:55:33+01:00</updated>
<published>2019-01-29T11:55:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216228#p216228</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216228#p216228"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216228#p216228"><![CDATA[
Musisz poprawić i deklarację i definicję. Najłatwiej: wyszukaj void buf_str(char *name) (bo chyba tak jest ta funkcja deklarowana) i zamień na void buf_str(const char *name). Koniecznie we wszystkich miejscach. Bo wygląda na to, że zmieniłeś w jednym miejscu i eclipse woła, że masz różne funkcje buf_str<br /><br />Edit: Kolega mnie ubiegł, ale zamieszczę, może się przyda<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 29 sty 2019, o 11:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2019-01-29T11:54:48+01:00</updated>
<published>2019-01-29T11:54:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216227#p216227</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216227#p216227"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216227#p216227"><![CDATA[
W menu.c i menu.h zmieniłeś? Tzn. deklarację i definicję?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 29 sty 2019, o 11:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gammadion]]></name></author>
<updated>2019-01-29T11:42:03+01:00</updated>
<published>2019-01-29T11:42:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216226#p216226</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216226#p216226"/>
<title type="html"><![CDATA[Re: Problem z plikiem main.c w Eclipse Mars]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21858&amp;p=216226#p216226"><![CDATA[
Nie przepuszcza &quot;const&quot;. Podkreśla na czerwono error: conflicting types for 'buf_str'<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20433">Gammadion</a> — 29 sty 2019, o 11:42</p><hr />
]]></content>
</entry>
</feed>