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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-10-09T16:40:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22588&amp;mode</id>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-09T16:40:26+01:00</updated>
<published>2019-10-09T16:40:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222413#p222413</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222413#p222413"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222413#p222413"><![CDATA[
Mam fragment z poradnika pt. snake którego nie rozumiem.<br /> <br />Jest w nim mowa o strukturze  do której możne wpisywać<br />dane za pomocą dwóch funkcji i odczytywać  zawartość <br />jej za pomocą jednej funkcji <br /><br />Jak wyświetlać na LCD zawartość tej struktury dla dwóch <br />ustawień <br /><br />Na początku poradnika szło fajnie ale po zmianie tematu <br />i natłoku informacji trudno było wyłuskać dalszą część działania struktury<br /><br />Prosiłbym o pomoc w rozwikłaniu problemu wyświetlania zawartości tej struktury<br />na LCD Na przykładzie pobranym z poradnika <br /> <br />[syntax=c]typedef struct {<br />        uint8_t godz;<br />        uint8_t min;<br />        uint8_t sek;<br />        void (* pokaz_alarm_ptr)(void * wsk); // TO JEST WSKAŻNIK NA FUNKCJĘ<br />    }TALARM;<br /><br />    TALARM  alarm&#91;2&#93;;<br /><br />// ** ODWOŁYWANIE SIĘ DO PÓL STRUKTURY PRZEZ WSKAŻNIK ( FUNKCJA DLA URZĄDZENIA 1 ) ***<br />    void pokaz_alarm( TALARM * wsk ){<br /><br />    wsk -&gt; godz = 22;<br />    wsk -&gt; min = 15;<br />    wsk -&gt; sek = 30;<br /><br />    }<br />// ************************************************************************************<br /><br />// ** ODWOŁYWANIE SIĘ DO PÓL STRUKTURY PRZEZ WSKAŻNIK ( FUNKCJA DLA URZĄDZENIA 2 ) ***<br />      void pokaz_alarm1( TALARM * wsk ){<br /><br />        wsk -&gt; godz = 12;<br />    wsk -&gt; min = 5;<br />        wsk -&gt; sek = 35;<br /><br /><br />     }<br />// ************************************************************************************<br /><br />// W TEJ FUNKCJI ODWOŁUJEMY SIĘ DO ZAWARTOŚCI OBU FUNKCJI ( CZYLI MOŻEMY WYWOŁAĆ ZAWARTOŚĆ DWÓCH FUNKCJI ZA POMOCĄ JEDNEJ )<br /><br />      void init_alarm ( void ) {<br /><br />      alarm&#91;0&#93; . pokaz_alarm_ptr = ( void*)pokaz_alarm;<br /><br />      alarm&#91;1&#93; . pokaz_alarm_ptr = ( void*)pokaz_alarm1;<br />      }<br /><br /><br /><br /><br />// główna pętla programu<br />while(1) {<br /><br /><br /><br />// odwołuję się do pierwszego elementu tablicy wywołuję funkcję po przez wskażnik (.) wywołuję funkcję w kturej jest<br />// wskażnik na strukturę<br /><br />// |  sprawdzamy czy wskażnik na  | w tym miejscu wywołuję  |tu podaję   |<br />// |  strukturę nie jest zerowy  | funkcję                 |argument wskażnik na strukturę |<br />if ( alarm &#91;0&#93; . pokaz_alarm_ptr ) alarm&#91;0&#93; . pokaz_alarm_ptr (&amp;alarm&#91;0&#93;);//sprawdzamy czy wskażnik na funkcję jest nie zerowy<br />// TAK SAMO SPRAWDZAMY DRUGĄ FUNKCJĘ<br />if ( alarm &#91;1&#93; . pokaz_alarm_ptr ) alarm&#91;1&#93; . pokaz_alarm_ptr (&amp;alarm&#91;1&#93;);//sprawdzamy czy wskażnik na funkcję jest nie zerowy<br /><br /><br /><br />// *** ALARM nr1 *******************<br />// lcd_cls();<br />lcd_locate(0,0);<br />if( alarm &#91;0&#93;.godz &lt;9 ) lcd_char('0');<br />lcd_int( alarm &#91;0&#93;.godz );<br />lcd_char(':');<br />if( alarm &#91;0&#93;.min &lt; 9 ) lcd_char('0');<br />lcd_int( alarm &#91;0&#93;.min );<br />lcd_char(':');<br />if( alarm &#91;0&#93;.sek &lt; 9 ) lcd_char('0');<br />lcd_int( alarm &#91;0&#93;.sek );<br /><br />// *** ALARM nr2 ******************<br />lcd_locate(1,0);<br />if( alarm &#91;1&#93;.godz &lt;9 ) lcd_char('0');<br />lcd_int( alarm &#91;1&#93;.godz );<br />lcd_char(':');<br />if( alarm &#91;1&#93;.min &lt; 9 ) lcd_char('0');<br />lcd_int( alarm &#91;1&#93;.min );<br />lcd_char(':');<br />if( alarm &#91;1&#93;.sek &lt; 9 ) lcd_char('0');<br />lcd_int( alarm &#91;1&#93;.sek );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 9 paź 2019, o 16:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-07T19:37:50+01:00</updated>
<published>2019-10-07T19:37:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222394#p222394</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222394#p222394"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222394#p222394"><![CDATA[
<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Mam parę pytań <br /><br /> 1 - dlaczego użyłeś zmiennej  uint8_t active;<br />      jakie ma zadanie ?<br /><br /> 2 - co znaczy słowo costam i jego zadanie<br /> <br /> 3 - dlaczego tak chcesz wyświetlić zawartość tablicy     lcd_int( costam.godz );<br />      skoro wskazujesz tylko na jeden jej element<br /></div><br />Ad1.<br />Użyłem tej zmiennej jako flaga prawda/fałsz. Później w pętli [syntax=c]if ( alarmy&#91;a&#93;.active ) {<br />            // sprawdź czy alarm aktywny i wykonaj akcję<br />            // prawda że banalne?<br />        }[/syntax]Czyli jeśli zmienna będzie różna od zera wykonaj akcję <br />Ad2. <br />Ad3.<br />Tu trochę popłynąłem. <br />Chciałem pokazać jak z wielu osobnych funkcji zrobić jedną uniwersalną do wyświetlenia wszystkich alarmów.<br /> Spróbuje to jeszcze raz napisać.[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />typedef struct {<br />    uint8_t godz;<br />    uint8_t min;<br />    uint8_t sek;<br />    uint8_t active;<br />}TALARM;<br /><br />uint8_t a;<br />TALARM  alarmy&#91;5&#93; ;<br /><br />void pokaz_alarm( uint8_t ktory );<br /><br />int main( void ) {<br /><br />    pokaz_alarm( 1 );   // wywołujesz jedną funkcję i podajesz tylko który alarm wyświetlić<br />    pokaz_alarm( 2 );<br />    pokaz_alarm( 3 );             <br /><br />    while ( 1 ) {<br />    }<br />}<br /><br />void pokaz_alarm( uint8_t ktory ) {<br />    if ( alarmy&#91;ktory&#93;.active ) {                  // jeśli active różne od zera czyli prawda<br />        lcd_int( alarmy&#91;ktory&#93;.godz );<br />        lcd_locate( 0, 0 );<br />        if ( alarmy&#91;ktory&#93;.godz &lt; 9 ) lcd_char( '0' );<br />        lcd_int(( alarmy&#91;ktory&#93;.godz );<br />//                                        i tak dalej<br />            }                           //  Koniec if                                                 <br />        }                               //  koniec pokaz_alarmy[/syntax]<br /><br />Nie mam na czym sprawdzić ale tak jak pisałem chodziło o idee.<br />Do funkcji można by również przekazać wskaźnik do struktury <br />ale wtedy dobieranie się do poszczególnych zmiennych robi się inaczej.<br />To jest w linku który ci podesłałem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 7 paź 2019, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-07T18:40:04+01:00</updated>
<published>2019-10-07T18:40:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222393#p222393</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222393#p222393"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222393#p222393"><![CDATA[
Mam parę pytań <br /><br /> 1 - dlaczego użyłeś zmiennej  uint8_t active;<br />      jakie ma zadanie ?<br /><br /> 2 - co znaczy słowo costam i jego zadanie<br /> <br /> 3 - dlaczego tak chcesz wyświetlić zawartość tablicy     lcd_int( costam.godz );<br />      skoro wskazujesz tylko na jeden jej element<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 7 paź 2019, o 18:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-07T13:15:43+01:00</updated>
<published>2019-10-07T13:15:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222390#p222390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222390#p222390"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222390#p222390"><![CDATA[
No trochę &quot;nababoliłem&quot; w ostatniej części wpisu. <br />No cóż cały czas się uczę i czasem takie potworki mi się zdarzają<br />Niestety nie mogę tego wyedytować i poprawić <br />Coś się porobiło że raz mogę edytować raz nie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 7 paź 2019, o 13:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-07T11:31:05+01:00</updated>
<published>2019-10-07T11:31:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222389#p222389</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222389#p222389"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222389#p222389"><![CDATA[
No widzę tu jeden problem <br />Definiujesz typ strukturalny TALARM w main.c<br />No i zmenne alarm_1 i alarm_2 też w main.c<br />Raczej bym zdefiniował to poza funkcją main.c <br /><br />Dodatkowo jak już tak działasz to zrób sobie tablicę alarmów[syntax=c]TALARM alarm&#91;2&#93;;[/syntax]<br />wtedy odwołanie staje do kolejnych alarmów staje się banalne[syntax=c]alarm&#91;1&#93;.godz =22;[/syntax]<br />Gdy dołożysz sobie następny alarm to dodajesz tylko kolejny indeks<br />To tak na szybko na zasadzie wędki <br />W poradniku o snake część druga Mirek to opisuje bardziej szczegółowo.<br /><br />O tu masz link do tego o czym piszę<br /><!-- m --><a class="postlink" href="https://youtu.be/MOgXcDJ29B0?t=149" >https://youtu.be/MOgXcDJ29B0?t=149</a><!-- m --><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 41 minutach ]</span></strong><br /><br />Zobacz jaką można zrobić ciekawą rzecz:[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />typedef struct {<br />    uint8_t godz;<br />    uint8_t min;<br />    uint8_t sek;<br />    uint8_t active;<br />}TALARM;<br /><br />uint8_t a;<br />TALARM  alarmy&#91;5&#93; ;<br /><br />int main( void ) {<br /><br />    for ( a = 0; a &lt; 4; a++ ) {<br />        if ( alarmy&#91;a&#93;.active ) {<br />            // sprawdź czy alarm aktywny i wykonaj akcję<br />            // prawda że banalne?<br />        }<br />    }<br />    while ( 1 ) {<br />    }<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 53 minutyach ]</span></strong><br /><br />A wtedy wyświetlanie alarmu sprowadzasz do jednej prostej funkcji:[syntax=c]void pokaz_alarm( TALRAM costam );<br /><br />int main( void ) {<br /><br />    pokaz_alarm( alarmy&#91;1&#93; );<br /><br />    while ( 1 ) {<br />    }<br />}       <br />void pokaz_alarm( TALRAM costam ) {<br />    lcd_int( costam.godz );<br />}[/syntax]<br /><br />Oczywiście mogłem zrobić jakąś literówkę ale chodzi o idee tego co można zrobić z tablicą struktur<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 7 paź 2019, o 11:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-07T11:01:28+01:00</updated>
<published>2019-10-07T11:01:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222388#p222388</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222388#p222388"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222388#p222388"><![CDATA[
Czy tę strukturę mam napisane dobrze?<br /><br />Jeśli  coś jest nie tak, czy czegoś brakuje to proszę poprawcie <br />na przykładach bo od tego szukania odpowiedzi w poradnikach i literaturze<br />kręci się w głowie  <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /> <br /><br /><br />[syntax=c]// ------------- główna funkcja programu main() ----<br />int main(void){<br /><br />lcd_init();<br /><br />typedef struct {<br />    uint8_t godz;<br />    uint8_t min;<br />    uint8_t sek;<br />    }TALARM;  <br /><br />    TALARM alarm_1, alarm_2;<br /><br /><br />    alarm_1 . godz = 22;<br />    alarm_1 . min = 12;<br />    alarm_1 . sek = 00;<br /><br />    alarm_2 . godz = 7;<br />    alarm_2 . min = 15;<br />    alarm_2 . sek = 30;<br /><br />// główna pętla programu<br />while(1) {<br /><br /><br /><br />// *** ALARM nr1 *******************<br />// lcd_cls();<br />lcd_locate(0,0);<br />if(alarm_1.godz &lt;9 ) lcd_char('0');<br />lcd_int( alarm_1.godz );<br />lcd_char(':');<br />if( alarm_1.min &lt; 9 ) lcd_char('0');<br />lcd_int( alarm_1.min );<br />lcd_char(':');<br />if( alarm_1.sek &lt; 9 ) lcd_char('0');<br />lcd_int( alarm_1.sek );<br /><br />// *** ALARM nr2 ******************<br />lcd_locate(1,0);<br />if( alarm_2.godz &lt;9 ) lcd_char('0');<br />lcd_int( alarm_2.godz );<br />lcd_char(':');<br />if( alarm_2.min &lt; 9 ) lcd_char('0');<br />lcd_int( alarm_2.min );<br />lcd_char(':');<br />if( alarm_2.sek &lt; 9 ) lcd_char('0');<br />lcd_int( alarm_2.sek );<br /><br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 7 paź 2019, o 11:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-10-05T13:22:42+01:00</updated>
<published>2019-10-05T13:22:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222369#p222369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222369#p222369"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222369#p222369"><![CDATA[
Widzisz, wklejasz tu fragmenty kodu, i w taki sposób niezwykle trudno pomóc nie widząc reszty. Czasem jest tak że gdzieś zamiast średnika jest przecinek, albo zamiata nawiasu klamrowego okrągły i wywala błędy, ale nie dotyczące nawiasu a zupełnie czego innego i w innym miejscu kodu, bo dla kompilatora to oznacza zupełnie co innego niż to czego oczekuje programista. I może (ale tylko może) być tak że błędy które tu wklejasz są powodowane przez coś co jest zupełnie w innym miejscu kodu.<br />Dla tego koledzy już wcześniej Ci sugerowali założenie projektu od nowa, i wrzucanie do niego małe segmenty kodu i sprawdzanie czy kompiluje się poprawnie po każdym takim wzbogaceniu nowego kodu. Wtedy szybciej idzie wyłapać źródło problemu. A i też można się przy tym dużo nauczyć, bo trzeba te segment wydzielać &quot;z głową&quot;, a przecież piszesz że chcesz się uczyć... Więc może spróbuj tą drogą.<br /><br />np ten błąd:<br /><div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />// komendy_at.c:37:15: error: 'at_al1_service' undeclared here (not in a function)<br /></div>moze oznaczać to że zmian dokonałeś w pliku c, ale już zapomniałeś o poprawie deklaracji w pliku h.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 5 paź 2019, o 13:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-04T13:20:47+01:00</updated>
<published>2019-10-04T13:20:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222356#p222356</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222356#p222356"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222356#p222356"><![CDATA[
Ten projekt był na żywca przepisany z poradnika Mirka i dzieliłem go na pliki tak jak <br />było w poradniku więc tu chyba nie ma pomyłki tak myślę.<br />Tu chodzi o różnice między tymi kompilatorami <br />wstawiałem const w funkcje i bez rezultatu <br />Nie wiem jak to przejść<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 4 paź 2019, o 13:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-04T12:47:21+01:00</updated>
<published>2019-10-04T12:47:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222355#p222355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222355#p222355"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222355#p222355"><![CDATA[
Ja bym tak szybko nie rezygnował.<br /><br />Nie ważne w czym piszesz ostateczną robotę robi kompilator i to on może czasem nie zgadzać się z tym co napisałeś <br />Ale tych różnic między starym WINAVR a nowym kompilatorem nie ma tak wiele.<br />Błędy które ci kompilator wytknął raczej wskazują że nie do końca dobrze podzieliłeś projekt na pliki. <br />Ale mogę się mylić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 4 paź 2019, o 12:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-04T12:23:16+01:00</updated>
<published>2019-10-04T12:23:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222353#p222353</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222353#p222353"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222353#p222353"><![CDATA[
Szkoda że nie mogę z korzystać z tego poradnika z powodu nie tyle błędów programu co <br />z powodu niezgodności programu w którym został napisany a eclipse w którym chcę <br />go otworzyć <br /><br />Miałem nadzieję że dzięki niemu nauczę się czegoś , chciałem spróbować go przerabiać<br />do swoich potrzeb ( jako sterownik ) ale nic z tego<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 4 paź 2019, o 12:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-03T19:13:13+01:00</updated>
<published>2019-10-03T19:13:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222335#p222335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222335#p222335"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222335#p222335"><![CDATA[
Myślę sobie że powinieneś na chwile ten projekt odłożyć na bok i zacząć od początku. <br />Tak jak Ci podałem przykład, czyli zdefiniowanie jakiegoś małego typu strukturalnego. Wygenerowanie najpierw zmiennej tego typu w pamięci RAM. Potem próba &quot;obróbki&quot; tej zmiennej. Dalej stworzenie przebrnięcie tego typu strukturalnego we flash dalej w eeprom. <br />Następnie korzystając z poradnika Mirka kopiować w te i we te te zmienne. <br />Z ramu do eeprom z flasz do ram i do eeprom<br />Na koniec jak już to opanujesz to umieść w definiowanej strukturze wskaźnik na funkcje. <br />void (*funkcja)(void);<br />Wywołaj tę funkcje. <br />Wejdź potem na wyższy poziom i w definicji struktury umieść wskaźnik do funkcji z argumentem w postaci jak niżej<br />void (*funkcja)(struct TWOJTYPSTRUKTURALNY * zmienna)<br />Za każdym razem kompiluj i patrz czy nie robisz babola. <br />Później pójdzie z górki.<br /><br />Zobacz Tu masz błąd w 275 linii. Nie było wcześniej błędów?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 3 paź 2019, o 19:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-03T14:58:38+01:00</updated>
<published>2019-10-03T14:58:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222321#p222321</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222321#p222321"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222321#p222321"><![CDATA[
Co z tymi  błędami  zrobić jak z tego wyjść ?<br />opiszę najkrócej jak można aby było łatwiej przeanalizować <br /><br />[syntax=c]{&quot;AT+AL1&quot;,  at_al1_service},//  to polecenie ustawia ALARM-1<br />{&quot;AT+AL2&quot;,  at_al2_service},//  to polecenie ustawia ALARM-2<br />{&quot;AT+BLK&quot;,  at_blk_service},//  to polecenie zmieni częstotliwość migania diody LED<br />{&quot;AT+DEF&quot;, at_def_service},// to polecenie pozwala na zdalne przywracanie ustawień<br /><br />// OPIS BŁĘDÓW<br />// komendy_at.c:37:15: error: 'at_al1_service' undeclared here (not in a function)<br />// komendy_at.c:38:15: error: 'at_al2_service' undeclared here (not in a function)<br />// komendy_at.c:39:15: error: 'at_blk_service' undeclared here (not in a function)<br />// komendy_at.c:40:15: error: 'at_def_service' undeclared here (not in a function)<br /><br />// BŁĘDY W FUNKCJACH<br /><br />// fragment  w którym jest błąd <br /><br /> ram_cfg.lcd_led = atoi(wsk);<br />        copy_ram_to_eem(); // Zapisywanie do pamięci eeprom czy LCD włączony czy wyłączony<br /><br />// OPIS BŁĘDU<br /><br />// komendy_at.c:190:3: error: assignment of member 'lcd_led' in read-only object<br />// komendy_at.c:192:18: warning: function with qualified void return type called &#91;enabled by default&#93;<br /><br />// fragment z funkcji <br /><br />   ram_cfg.ir_backlight = atoi(wsk);<br />   copy_ramto_eem(); // zapis ustawienia do pamięci EEPROM<br /><br />// OPIS BŁĘDU<br /><br />// komendy_at.c:214:3: error: assignment of member 'ir_backlight' in read-only object<br />// komendy_at.c:216:3: warning: implicit declaration of function 'copy_ramto_eem' &#91;-Wimplicit-function-declaration&#93;<br /><br /><br />// KOD FUNKCJI<br /><br />    ram_cfg.blink=atoi(wsk);<br />    copy_ram_to_eem(); // Zapis ustawień do EEPROM<br /><br />// OPIS BŁĘDU<br /><br />// komendy_at.c:240:6: error: assignment of member 'blink' in read-only object<br />// komendy_at.c:242:18: warning: function with qualified void return type called &#91;enabled by default&#93;<br /><br />// KOD FUNKCJI<br /><br />    ram_cfg.al1_mm = atoi(wsk);<br />    ram_cfg.al1_hh = h;<br />    copy_ram_to_eem();  // Zapis ustawień do EEPROM<br /><br />// OPIS BŁĘDÓW<br /><br />// komendy_at.c:271:3: error: assignment of member 'al1_mm' in read-only object<br />// komendy_at.c:273:3: error: assignment of member 'al1_hh' in read-only object<br />// komendy_at.c:275:18: warning: function with qualified void return type called &#91;enabled by default&#93;<br /><br />// KOD FUNKCJI<br /><br />      ram_cfg.al2_mm = atoi(wsk);<br />      ram_cfg.al2_hh = h;<br />      copy_ram_to_eem(); // Zapis do EEPROMU<br /><br />// OPIS BŁĘDU<br /><br />// komendy_at.c:304:6: error: assignment of member 'al2_mm' in read-only object<br />// komendy_at.c:306:3: error: assignment of member 'al2_hh' in read-only object<br />// komendy_at.c:308:18: warning: function with qualified void return type called &#91;enabled by default&#93;[/syntax]<br /><br /><br />(Mimo że programowanie jest fajne to jednak taka walka z przeciwnościami jest zniechęcająca)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 3 paź 2019, o 14:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-03T05:51:30+01:00</updated>
<published>2019-10-03T05:51:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222300#p222300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222300#p222300"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222300#p222300"><![CDATA[
Może spróbuj jednak zacząć od pisania małych fragmentów programu. Odłóż cały obecny projekt. Stwórz sobie nowy testowy zadeklaruj typ strukturalny zdefiniuj zmienne i zacznij z nich korzystać. Wtedy będzie można łatwiej dojść do tego. Teraz wysłałeś posta na zasadzie coś nie działa. No to coś trzeba zrobić. <br />Tak sobie kiedyś ćwiczyłem <br />main.c[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgm#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;test.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />int main( void ) {                         <br />    lcd_init();                                      <br />    lcd_str_P( pgm_tstr.tab );<br />    lcd_str_E( eem_tstr.tab );<br />    lcd_str( mem_tstr.tab );<br />    while ( 1 ) {<br />    }<br />}[/syntax]<br /><br />test.c[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br />#include &quot;test.h&quot;<br /><br />TSTR const pgm_tstr  PROGMEM =  {1, {&quot;dafdfa&quot;}};<br />TSTR eem_tstr EEMEM = { 2, {&quot;DOCD&quot;}};<br />TSTR mem_tstr;[/syntax]<br /><br />test.h[syntax=c]#ifndef TEST_H_<br />#define TEST_H_<br /><br />typedef struct {<br />    uint8_t csd;                   <br />    char tab &#91;20&#93;;<br />} TSTR;<br /><br />extern TSTR const pgm_tstr  PROGMEM;<br />extern TSTR eem_tstr EEMEM;<br />extern TSTR mem_tstr;<br /><br />                                  <br />#endif[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 3 paź 2019, o 05:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-02T14:16:09+01:00</updated>
<published>2019-10-02T14:16:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222289#p222289</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222289#p222289"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222289#p222289"><![CDATA[
Wstawiłem ale to nie pomaga<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 49 minutach ]</span></strong><br /><br />Spróbowałem zastosować to (przedstawione niżej ) z poradnika mi nie działa<br /><br />[syntax=c]// inicjalizacja ustawień fabrucznych w pamięci Flash<br />const TCFG pgm_cfg__attribute__(( __progmem__)) = { // TU ZMIANY.. const TCFG pgm_cfg PROGMEM  = {<br />IR_BACKLIGHT,<br />AL1_HH,<br />AL1_MM,<br />AL2_HH,<br />AL2_MM,<br />BLINK,<br />LCD_LED<br />};<br /><br /><br />const TCFG eem_cfg__attribute__((section(&quot;.eeprom))); // dane w pamięci EEPROM //TU ZMIANY<br />      TCFG ram_cfg;       // dane w pamięci RAM[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 2 paź 2019, o 14:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2019-10-02T05:59:47+01:00</updated>
<published>2019-10-02T05:59:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222283#p222283</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222283#p222283"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222283#p222283"><![CDATA[
[syntax=c]TATCMD polecenia_at&#91;AT_CNT&#93; PROGMEM[/syntax]<br />dołożyłbym to <br />[syntax=c]const TATCMD polecenia_at&#91;AT_CNT&#93; PROGMEM[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 2 paź 2019, o 05:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-10-01T18:46:00+01:00</updated>
<published>2019-10-01T18:46:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222277#p222277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222277#p222277"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222277#p222277"><![CDATA[
Plik komendy at.c<br />W tym pliku pojawiło się najwięcej błędów <br />Próbowałem sobie z tym poradzić przy pomocy Mirka poradników ale bez rezultatu <br /><br />[syntax=c]//----------- tablica z poleceniami AT i wskaźnikami funkcji do ich obsługi --------------------<br />  TATCMD polecenia_at&#91;AT_CNT&#93; PROGMEM = {<br />// { at_cmd } , { wskaźnik do funkcji obsługi at },<br />// ***********************************************************************<br /><br />{&quot;AT&quot;, at_service},<br />{&quot;ATI&quot;, ati_service},// w tym programie wyświetli nazwe<br />{&quot;AT+RST&quot;, at_rst_service},// w tym programie reset programu<br /><br />{&quot;AT+IR&quot;, at_ir_service},// w tym programie spowoduje zmiane klawisza na pilocie<br />{&quot;AT+AL1&quot;,  at_al1_service},// w tym programie to polecenie ustawia ALARM-1 // &gt;&gt;&gt;&gt;&gt; BŁĄD W TYM MIEJSCU<br />{&quot;AT+AL2&quot;,  at_al2_service},// w tym programie to polecenie ustawia ALARM-2 // &gt;&gt;&gt;&gt;&gt; BŁĄD W TYM MIEJSCU<br />{&quot;AT+BLK&quot;,  at_blk_service},// w tym programie to polecenie znieni częstotliwośc migania diody LED // &gt;&gt;&gt; BŁĄD W TYM MIEJSCU<br />{&quot;AT+DEF&quot;,  at_def_service},// w tym programie to polecenie pozwala na zdalne przywracanie ustawień // BŁĄD W TYM MIEJSCU<br />{&quot;AT+LCD&quot;, at_lcd_service},// w tym programie to polecenie ustawia włączenie lub wyłączenie podświetlania LCD<br /><br /><br />// BŁĘDY POJAWIŁY SIĘ RÓWNIEŻ W FUNKCJACH PONIŻEJ <br /><br />// Załączanie podświetlania wyświetlacza LCD **************************************<br />int8_t at_lcd_service( uint8_t inout,  char * params ) {<br /><br />char * wsk;<br /><br />if( 1 == inout ) {<br /><br />// sprawdzamy czy są parametry, jeli nie to błąd<br />if(!strlen(params)) return -1;<br />// wyłuskujemy pierwszy parametr do deókropka<br />wsk = strtok(params, &quot;:&quot;);<br />ram_cfg.lcd_led = atoi(wsk);<br /><br />copy_ram_to_eem(); // Zapisywanie do pamięci eeprom czy LCD włczy czy wyłączony<br /><br />uart_puts(&quot;\r\n+LCD: &quot;);<br />uart_putint( ram_cfg.lcd_led ,10 );<br />uart_puts(&quot;\r\n&quot;);<br /><br /><br />}<br /><br />return 0;<br /><br />}<br />// *************************************************************************************<br />// Obsługa komendy AT która zmienia nam klawisz na pilocie *****************************<br />int8_t at_ir_service(uint8_t inout, char * params) {<br /><br />char * wsk;<br /><br />if( 1 == inout ) {<br /><br />if(!strlen(params)) return -1;<br />wsk = strtok(params, &quot;:&quot;);<br />ram_cfg.ir_backlight = atoi(wsk);<br /><br />copy_ramto_eem(); // zapis ustawienia do pamięci EEPROM<br /><br />uart_puts(&quot;\r\n+IR: &quot;);<br />uart_putint( ram_cfg.ir_backlight ,10 );<br />uart_puts(&quot;\r\n&quot;);<br /><br />} else if( !inout ){<br /><br />} else if( 2 == inout ){<br /><br />}<br />return 0;<br />}<br />// ************************************************************************<br />// ** Obsługa diody świeconcej ********************************************<br />int8_t at_blk_service(uint8_t inout, char * params) {<br /><br />char * wsk;<br /><br />if( 1 == inout ) {<br /><br /><br />if(!strlen(params)) return -1;<br />wsk = strtok(params, &quot;:&quot;);<br />const ram_cfg.blink=atoi(wsk);<br /><br />copy_ram_to_eem(); // Zapis ustawień do EEPROM<br /><br />uart_puts(&quot;\r\n+BLK: &quot;);<br />uart_putint( ram_cfg.blink  ,10 );<br />uart_puts(&quot;\r\n&quot;);<br /><br />} else if( !inout ) {<br /><br />} else if( 2 == inout ) {<br /><br />}<br />return 0;<br /><br />}<br />// ****************************************************************************<br />// Obsługa alarmu nr1 *********************************************************<br />const int8_t at_al1_service(uint8_t inout, char * params) {<br /><br />char * wsk;<br />uint8_t h=0;<br /><br />if( inout &lt; 2 ) {<br /><br />if(!strlen(params)) return -1;<br />wsk = strtok(params, &quot;:&quot;);<br />if(!strlen(wsk)) return -1;<br />h = atoi(wsk);<br />wsk = strtok(NULL, &quot;:&quot;);<br />if(!strlen(wsk)) return -1;<br />ram_cfg.al1_mm = atoi(wsk);<br /><br />ram_cfg.al1_hh = h;<br /><br />copy_ram_to_eem();  // Zapis ustawień do EEPROM<br /><br />uart_puts(&quot;\r\n+AL1: &quot;);<br />uart_putint( ram_cfg.al1_hh ,10 );<br />uart_puts(&quot;:&quot;);<br />uart_putint( ram_cfg.al1_mm ,10 );<br />uart_puts(&quot;\r\n&quot;);<br /><br />} else if ( 2 == inout ) {<br /><br />}<br />return 0;<br /><br />}<br />// ****************************************************************<br />// ** Obsługa alarmu nr2 *****************************************<br />int8_t at_al2_service(uint8_t inout, char * params) {<br /><br />char * wsk;<br />uint8_t h=0;<br /><br />if( inout &lt; 2 ) {<br /><br />if(!strlen(params)) return -1;<br />wsk = strtok(params, &quot;:&quot;);<br />if(!strlen(wsk)) return -1;<br />h = atoi(wsk);<br />wsk = strtok(NULL, &quot;:&quot;);<br />if(!strlen(wsk)) return -1;<br />ram_cfg.al2_mm = atoi(wsk);<br /><br />ram_cfg.al2_hh = h;<br /><br />copy_ram_to_eem(); // Zapis do EEPROMU<br /><br />uart_puts(&quot;\r\n+AL2: &quot;);<br />uart_putint( ram_cfg.al2_hh ,10 );<br />uart_puts(&quot;:&quot;);<br />uart_putint( ram_cfg.al2_mm ,10 );<br />uart_puts(&quot;\r\n&quot;);<br /><br />} else if ( 2 == inout ) {<br /><br />}<br />return 0;<br /><br />}[/syntax]<br /><br />Tu podaję wyświetlane błędy<br />[syntax=c]19:21:41 **** Incremental Build of configuration Release for project EEPROM_TEST ****<br />make all <br />'Building file: ../komendy_at.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32a -DF_CPU=11059200UL -MMD -MP -MF&quot;komendy_at.d&quot; -MT&quot;komendy_at.o&quot; -c -o &quot;komendy_at.o&quot; &quot;../komendy_at.c&quot;<br />../komendy_at.c:37:15: error: 'at_al1_service' undeclared here (not in a function)<br />   {&quot;AT+AL1&quot;,  at_al1_service},// w tym programie to polecenie ustawia ALARM-1<br />               ^<br />../komendy_at.c:38:15: error: 'at_al2_service' undeclared here (not in a function)<br />   {&quot;AT+AL2&quot;,  at_al2_service},// w tym programie to polecenie ustawia ALARM-2<br />               ^<br />../komendy_at.c:39:15: error: 'at_blk_service' undeclared here (not in a function)<br />   {&quot;AT+BLK&quot;,  at_blk_service},// w tym programie to polecenie znieni częstotliwośc migania diody LED<br />               ^<br />../komendy_at.c:40:15: error: 'at_def_service' undeclared here (not in a function)<br />   {&quot;AT+DEF&quot;,  at_def_service},// w tym programie to polecenie pozwala na zdalne przywracanie ustawień<br />               ^<br />../komendy_at.c: In function 'at_lcd_service':<br />../komendy_at.c:190:3: error: assignment of member 'lcd_led' in read-only object<br />   ram_cfg.lcd_led = atoi(wsk);<br />   ^<br />../komendy_at.c: In function 'at_ir_service':<br />../komendy_at.c:214:3: error: assignment of member 'ir_backlight' in read-only object<br />   ram_cfg.ir_backlight = atoi(wsk);<br />   ^<br />../komendy_at.c:216:3: warning: implicit declaration of function 'copy_ramto_eem' &#91;-Wimplicit-function-declaration&#93;<br />   copy_ramto_eem(); // zapis ustawienia do pamięci EEPROM<br />   ^<br />../komendy_at.c: In function 'at_blk_service':<br />../komendy_at.c:240:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token<br />   const ram_cfg.blink=atoi(wsk);<br />                ^<br />../komendy_at.c:240:16: error: expected expression before '.' token<br />../komendy_at.c: In function 'at_al1_service':<br />../komendy_at.c:271:3: error: assignment of member 'al1_mm' in read-only object<br />   ram_cfg.al1_mm = atoi(wsk);<br />   ^<br />../komendy_at.c:273:3: error: assignment of member 'al1_hh' in read-only object<br />   ram_cfg.al1_hh = h;<br />   ^<br />../komendy_at.c: In function 'at_al2_service':<br />../komendy_at.c:304:3: error: assignment of member 'al2_mm' in read-only object<br />   ram_cfg.al2_mm = atoi(wsk);<br />   ^<br />../komendy_at.c:306:3: error: assignment of member 'al2_hh' in read-only object<br />   ram_cfg.al2_hh = h;<br />   ^<br />make: *** &#91;komendy_at.o&#93; Błąd 1<br /><br />19:21:41 Build Finished (took 284ms)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 1 paź 2019, o 18:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-09-29T20:15:26+01:00</updated>
<published>2019-09-29T20:15:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222257#p222257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222257#p222257"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222257#p222257"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />variable 'pgm_cfg' must be const<br /></div><br />to jest klucz w błędach które ci się pojawiają i słusznie pisze kolega wyżej ... na to zaś odpowiedź masz w dużo późniejszym poradniku z bloga<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/08/eclipse-kopot-z-pstr-przeczytaj.html" >http://mirekk36.blogspot.com/2012/08/ec ... zytaj.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2019, o 20:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-09-29T17:16:31+01:00</updated>
<published>2019-09-29T17:16:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222254#p222254</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222254#p222254"/>
<title type="html"><![CDATA[Re: Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222254#p222254"><![CDATA[
<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Nie wiem czemu w moim kodzie mimo że jest przepisany kropka w kropkę z poradnika<br />Deklaracja extern TCFG pgm_cfg PROGMEM nie widzi stałej tak jak w poradniku<br /></div>Odpowiedź jest prosta - kod z poradnika był kompilowany na starym winavr, Ty zapewne próbujesz to kompilować w najnowszym atmel toolchainie który narzuca nowe zasady, i niestety jak dane we flash to musi być const.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Jeśli wstawię słówko -&gt; const to w komendach AT błędy się mnożą jak króliki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div> Pokaż jak to robisz i jak wyglądają te &quot;króliki&quot;<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />Przypuszczam że const dodajesz do deklaracji/definicji samej zmiennej, ale już w funkcjach które używają tej zmiennej nie zmieniasz deklaracji zmiennych funkcji na const, stąd kompilatorowi się czkawka odbijają różnice w deklaracjach tych zmiennych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 29 wrz 2019, o 17:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-09-29T17:03:59+01:00</updated>
<published>2019-09-29T17:03:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222253#p222253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222253#p222253"/>
<title type="html"><![CDATA[Pytanie do poradnika  AVR-EEPROM-Struktury cz.2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22588&amp;p=222253#p222253"><![CDATA[
Mam mały problem związany z poradnikiem avr - eeprom - struktury cz.2<br />Przepisywałem go z poradnika , biblioteki mam z GB wszystko niby ok<br />sprawdzane po kilka razy a pojawia mi się jeden błąd którego w poradniku<br />nie było <br /><br />[syntax=c]// Deklaracje zmiennych *******************************<br />extern TCFG pgm_cfg PROGMEM; // dane w pamięci FLASH &gt;&gt;&gt; TU SIĘ POKAZUJE BŁĄD<br />extern TCFG eem_cfg EEMEM;   // dane w pamięci EEPROM<br />extern TCFG ram_cfg;         // dane w pamięci RAM<br />// *****************************************************[/syntax]<br />OPIS BŁĘDU<br /><br />[syntax=c]'Building file: ../common.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32a -DF_CPU=11059200UL -MMD -MP -MF&quot;common.d&quot; -MT&quot;common.o&quot; -c -o &quot;common.o&quot; &quot;../common.c&quot;<br />In file included from ../common.c:15:0:<br />../common.h:28:13: error: variable 'pgm_cfg' must be const in order to be put into read-only section by means of '__attribute__((progmem))'<br /> extern TCFG pgm_cfg PROGMEM; // dane w pamięci FLASH<br />             ^<br />make: *** &#91;common.o&#93; Błąd 1[/syntax]<br /><br />Jeśli wstawię słówko  -&gt;  const  to w komendach AT błędy się mnożą jak króliki   <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Nie wiem czemu w moim kodzie mimo że jest przepisany kropka w kropkę z poradnika<br />Deklaracja extern TCFG pgm_cfg PROGMEM nie widzi stałej tak jak w poradniku<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 29 wrz 2019, o 17:03</p><hr />
]]></content>
</entry>
</feed>