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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-05T05:17:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8006&amp;mode</id>
<entry>
<author><name><![CDATA[mictronic]]></name></author>
<updated>2014-08-05T05:17:59+01:00</updated>
<published>2014-08-05T05:17:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90254#p90254</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90254#p90254"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90254#p90254"><![CDATA[
Ustawienie zmiennej ptr jako zwykla zmienna powoduje tylko dobranie sie do adresow zmiennych, a jak dobrac sie do wartosci ktora siedzi pod adresem? Rzutowanie na wskaznik nie dziala natomiast rozwiazalem to tak tyle ze juz na intach bo domyslnie:<br /><br />int *ptr;<br />ptr=(int*)pgm_read_word(&amp;menu_ptr[a]); //rzutowanie na wskaznik bo takiego typu jest ptr<br />uart_putint((int)*ptr, 10); //rzutowanie na int bo funkcja pobiera int<br /><br />Wszystko dziala, dziekuje i pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5292">mictronic</a> — 5 sie 2014, o 05:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-08-04T21:39:54+01:00</updated>
<published>2014-08-04T21:39:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90232#p90232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90232#p90232"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90232#p90232"><![CDATA[
No dobra, niech tam będzie...tylko po coś tam wsadził '&amp;'?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 4 sie 2014, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-04T20:32:06+01:00</updated>
<published>2014-08-04T20:32:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90223#p90223</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90223#p90223"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90223#p90223"><![CDATA[
Dowolną wartość liczbową (całkowitą, a taką objęty jest typ char) można rzutować na typ wskaźnikowy. Tak właśnie działają wszystkie makrodefinicje określające nazwy rejestrów np. PORTA, DDRC, UDR1, TCCRA0 itd.. Jest to rzutowanie zwykłych &quot;intów&quot; (adresów) na typy wskaźnikowe.<br />Jeżeli autor tematu zapisuje adresy zmiennych (tj. liczby dwu-bajtowe) w pamięci FLASH to po ich odczycie trzeba dokonać rzutowania, a później ewentualnej dereferencji. W przeciwnym wypadku odczytana wartość nic nie wnosi - jest to po prostu liczba (adres).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 4 sie 2014, o 20:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-08-04T20:17:05+01:00</updated>
<published>2014-08-04T20:17:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90222#p90222</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90222#p90222"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90222#p90222"><![CDATA[
<div class="quotetitle">mictronic napisał(a):</div><div class="quotecontent"><br />[syntax=c]unsigned char* ptr;[/syntax]<br />[syntax=c]ptr=(unsigned char*)pgm_read_byte(&amp;menu_ptr&#91;a&#93;);[/syntax]<br /></div><br /><br />pgm_read_byte zwraca wartość typu char a NIE wskaźnik. To przypisanie jest nieprawidłowe. Poza tym tablica menu_ptr przechowuje wskaźniki więc operator &amp; jest niepotrzebny.<br />Możesz napisać tak<br />[syntax=c]*ptr=pgm_read_byte(menu_ptr&#91;a&#93;);[/syntax]<br />...ale na patrząc pobieżnie na Twój program raczej nie będzie to miało sensu. Raczej coś takiego:<br />[syntax=c]unsigned char ptr;<br />ptr=pgm_read_byte(menu_ptr&#91;a&#93;);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 4 sie 2014, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-04T19:46:07+01:00</updated>
<published>2014-08-04T19:46:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90219#p90219</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90219#p90219"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90219#p90219"><![CDATA[
Czyli w tym momencie ostrzeżenie dotyczące przypisania zlikwidowane.<br />Może ponownie spróbuj z funkcją &quot;pgm_read_word&quot;, gdyż odczytujesz adres, który jest liczbą 16-bitową.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 4 sie 2014, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mictronic]]></name></author>
<updated>2014-08-04T19:23:43+01:00</updated>
<published>2014-08-04T19:23:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90214#p90214</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90214#p90214"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90214#p90214"><![CDATA[
Proste a jednak nie. Zmienna ptr mam typu: [syntax=c]unsigned char* ptr;[/syntax]<br /><br />Więc po wpiasniu:<br /><br />[syntax=c]ptr=(unsigned char*)pgm_read_byte(&amp;menu_ptr&#91;a&#93;);[/syntax]<br /><br />wywala:<br /><br />&quot;main.c:128: warning: cast to pointer from integer of different size<br />&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5292">mictronic</a> — 4 sie 2014, o 19:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-04T19:11:07+01:00</updated>
<published>2014-08-04T19:11:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90210#p90210</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90210#p90210"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90210#p90210"><![CDATA[
[syntax=c]ptr=(char*)pgm_read_byte(&amp;menu_ptr&#91;a&#93;);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 4 sie 2014, o 19:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mictronic]]></name></author>
<updated>2014-08-04T18:07:08+01:00</updated>
<published>2014-08-04T18:07:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90189#p90189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90189#p90189"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90189#p90189"><![CDATA[
Rzeczywiscie, pomylilo mi sie, ale wartosc 123 i tak powinno obslugiwac.<br /><br />Udalo mi sie naprawic problem nie wiem jeszcze jak poprawić warning <br />&quot; warning: assignment makes pointer from integer without a cast&quot;<br /><br />w linijce <br /><br />[syntax=c]ptr=pgm_read_byte(&amp;menu_ptr&#91;a&#93;);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5292">mictronic</a> — 4 sie 2014, o 18:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2014-08-04T17:02:47+01:00</updated>
<published>2014-08-04T17:02:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90178#p90178</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90178#p90178"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90178#p90178"><![CDATA[
Może mi się już miesza w głowie, ale i tak wyjdę z propozycją <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br /><br />Może spróbuj w 128 linii zrobić:<br />ptr=pgm_read_byte(&amp;(menu_ptr[a]));<br />lub<br />ptr=pgm_read_byte(menu_ptr + a);<br /><br />zamiast:<br />ptr=pgm_read_byte(menu_ptr[a]);<br />?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Czyli (głośno myślę) wykonać makro pgm_read_byte na adresie zmiennej menu_ptr[a], które zwróci jej zawartość, czyli adres do zmiennej typu char, który zostanie zapisany we wskaźniku (char* ptr) do zmiennej char <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2954">HCOOH</a> — 4 sie 2014, o 17:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[eMCe2]]></name></author>
<updated>2014-08-04T08:53:52+01:00</updated>
<published>2014-08-04T08:53:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90138#p90138</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90138#p90138"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90138#p90138"><![CDATA[
A ja jako że mało wiem to zapytam czy char jest domyslnie ze znakiem? bo jesli tak to chyba nie moze przyjmować wartości a6=128? z tego co mówi internet to zakres -128 : 127... Może tu jest problem...<br />Czy to 255 jest przy każdej pozycji w tym menu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1363">eMCe2</a> — 4 sie 2014, o 08:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mictronic]]></name></author>
<updated>2014-08-04T05:22:47+01:00</updated>
<published>2014-08-04T05:22:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90123#p90123</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90123#p90123"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90123#p90123"><![CDATA[
Próbowałem pgm_read_word, zmieniac zmienna ptr na int ze wskazniiem i bez, czyli milion roznych ustawien az ruszy. Może ktoś wyprowadzi mnie z błędu jednym słowem. Wstawie może cały kod dla czytelności.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 30-04-2013<br /> *      Author: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;MKUART/mkuart.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />char a;<br />char buf;<br />char poz_menu;<br />char buf_poz_menu=1;<br /><br /><br /><br />char poz_sub_menu;<br />char buf_poz_sub_menu=1;<br /><br /><br />char a1=123;<br />char a2=124;<br />char a3=125;<br />char a4=126;<br />char a5=127;<br />char a6=128;<br /><br />char* ptr;<br /><br />char main_menu&#91;5&#93;&#91;10&#93; PROGMEM = //napisy pierwsze menu<br />{<br />&quot;text1-1&quot;,<br />&quot;text2-1&quot;,<br />&quot;text3-1&quot;,<br />&quot;text4-1&quot;,<br />&quot;text5-1&quot;,<br />};<br /><br />char alarms_menu&#91;6&#93;&#91;26&#93; PROGMEM = //menu drugie po wybraniu pierwszej pozycji<br />{<br />&quot;text1-2&quot;,<br />&quot;text2-2&quot;,<br />&quot;text3-2&quot;,<br />&quot;text4-2&quot;,<br />&quot;text5-2&quot;,<br />&quot;text6-2&quot;,<br />};<br /><br />char* menu_ptr&#91;6&#93; PROGMEM =//zmienne wyswietlane przypisane tekstom drugiemu menu<br />{<br />&amp;a1,<br />&amp;a2,<br />&amp;a3,<br />&amp;a4,<br />&amp;a5,<br />&amp;a6<br />};<br /><br /><br /><br />int main( void ) <br />{<br /><br />USART_Init( __UBRR );<br /><br />sei();<br /><br /><br />tr_cls(1);<br />tr_cursor_hide(1);<br /><br />while(1) <br />{<br /><br />a=uart_getc();<br />if( a=='w' || a=='W' ) poz_menu--;<br />else if( a=='s' || a=='S' ) poz_menu++;<br />else if( a=='d' || a=='D' ) poz_sub_menu++, tr_cls(1);<br />else if( a=='a' || a=='A' ) poz_sub_menu--, tr_cls(1); // sterowanie po menu W,S,D,A<br /><br />if( poz_menu!=buf_poz_menu || buf_poz_sub_menu!=poz_sub_menu ) // jesli cos sie zmienilo ...<br />{<br /><br />tr_attr( BOLD, WHITE, GREEN );<br />tr_locate(3,5); uart_puts(&quot;_Configuration_&quot;);<br /><br />tr_attr( 0, YELLOW, BLUE );<br />tr_locate(4,5); uart_puts(&quot;w-UP s-DOWN d-RIGHT a-LEFT&quot;);<br /><br />if(poz_sub_menu==0) // zmienna glebokosci w  menu - poz_sub_menu<br />{<br /><br />for(unsigned char a=0; a&lt;5; a++) // petla pierwszegu menu czyta pokolei teksty z tablicy main_menu i podswietla zgodnie ze stanem zmiennej wyboru poz_menu<br />{<br /><br />if(poz_menu==a) tr_attr( BOLD, WHITE, YELLOW );<br />else tr_attr( BOLD, WHITE, BLUE ); <br />tr_locate(a+6,5); <br />uart_puts_P((char *)main_menu&#91;a&#93;);<br />tr_attr( BOLD, WHITE, BLUE );<br /><br />}<br /><br />}<br /><br /><br />if(poz_sub_menu==1 )<br />{<br /><br />if(buf_poz_sub_menu!=poz_sub_menu) poz_menu=0;<br /><br />for(unsigned char a=0; a&lt;6; a++)<br />{<br /><br />tr_attr( BOLD, WHITE, BLUE ); <br />tr_locate(a+6,5); <br />if(poz_sub_menu==1) uart_puts_P((char *)alarms_menu&#91;a&#93;);<br /><br />tr_locate(a+6,30);<br /><br />if(poz_menu==a) tr_attr( BOLD, WHITE, MAGENTA );<br />else tr_attr( BOLD, WHITE, BLUE );<br />ptr=pgm_read_byte(menu_ptr&#91;a&#93;);<br />uart_putint(*ptr, 10);<br /><br />tr_attr( BOLD, WHITE, BLUE );<br /><br />}<br /><br /><br />}<br /><br />buf_poz_menu=poz_menu;<br />buf_poz_sub_menu=poz_sub_menu;<br /><br />}<br /><br />}<br /><br /><br />}[/syntax]<br /><br />Złe podejście czy skladnia?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5292">mictronic</a> — 4 sie 2014, o 05:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-03T21:07:00+01:00</updated>
<published>2014-08-03T21:07:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90088#p90088</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90088#p90088"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90088#p90088"><![CDATA[
W języku C niezależnie od typu wskaźnika i tak jego rozmiar wynosi 2B.<br />Typ wskaźnika informuje jedynie o wielkości przesunięcia w przypadku artytmetyki wskaźników.<br /><br />Spróbuj może zamienić funkcję odczytu na &quot;pgm_read_word&quot;...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 3 sie 2014, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HCOOH]]></name></author>
<updated>2014-08-03T21:07:09+01:00</updated>
<published>2014-08-03T20:59:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90086#p90086</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90086#p90086"/>
<title type="html"><![CDATA[Re: Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90086#p90086"><![CDATA[
A robiłeś próbę ze zdefiniowaniem tablicy w osobnej instrukcji i przypisaniem wartości jej elementom w osobnych?<br /><br />Tak ot, na próbę?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />A nie... przecież do flasha się nie da tak zapisać <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> To nie EEPROM.<br /><br />Sorry, pospieszyłem się.<br /><br /><br />Ale gdybyś na chwilę zmienił koncepcję i spróbował z EEPROMEM i zobaczył jak to hulnie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2954">HCOOH</a> — 3 sie 2014, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mictronic]]></name></author>
<updated>2014-08-03T19:35:48+01:00</updated>
<published>2014-08-03T19:35:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90065#p90065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90065#p90065"/>
<title type="html"><![CDATA[Tablica wskaznikow, menu uart vt100]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8006&amp;p=90065#p90065"><![CDATA[
Witam, pisze proste menu do terminala po rs232. Menu ma wygladac tak ze zaraz po tekscie, ma wystepowac odpowiadajaca liczba do edycji. O ile z wyswietleniem tekstu i wyboru nie ma problemu, to powstal w chwili gdy chce zapisac we flashu wskazniki do zmiennych, i odwolywac sie do nich.<br /><br />[syntax=c]char a1=123; // zmienne wystepujace po tekscie<br />char a2=124;<br />char a3=125;<br />char a4=126;<br />char a5=127;<br />char a6=128;<br /><br />char* ptr; //zmienna pomocnicza do odczytu wartosci z pod adresow<br /><br />char* menu_ptr&#91;6&#93; PROGMEM = // pobranie adresow do zmiennych<br />{<br />&amp;a1,<br />&amp;a2,<br />&amp;a3,<br />&amp;a4,<br />&amp;a5,<br />&amp;a6<br />};<br /><br />ptr=(char*)pgm_read_byte(menu_ptr&#91;a&#93;); //odczytanie adresu wskaznikow do zmiennych i przepisanie do ptr (WARNING)<br />uart_putint(*ptr, 10); //odczytanie wartosci wskaznika z pod adresu w zmiennej ptr[/syntax]<br /><br />W rezultacie wyswietla 255. W czym jest problem? Jeżeli uda się to naprawić umieszcze pod koniec tematu caly poprawny kod menu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5292">mictronic</a> — 3 sie 2014, o 19:35</p><hr />
]]></content>
</entry>
</feed>