<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Krzysztof Wesołowski &#187; Programowanie</title>
	<atom:link href="http://kwesoly.net/kategoria/programowanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://kwesoly.net</link>
	<description>Programowanie, elektronika, automatyka - doświadczenia i projekty</description>
	<lastBuildDate>Wed, 07 Sep 2011 14:03:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Zapisywanie ustawień aplikacji &#8211; QSettings w QT</title>
		<link>http://kwesoly.net/programowanie/cpp/zapisywanie-ustawien-aplikacji-qsettings-w-qt/</link>
		<comments>http://kwesoly.net/programowanie/cpp/zapisywanie-ustawien-aplikacji-qsettings-w-qt/#comments</comments>
		<pubDate>Sun, 09 May 2010 18:13:28 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[qsettings]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[ustawienia]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=466</guid>
		<description><![CDATA[Kontynuując tradycję rzadkich wpisów o ciekawych rzeczach które warto poznać/wykorzystać chciałbym wam przybliżyć trochę klasę QSettings. Do tej pory większość moich aplikacji nie potrafiło sensownie obsługiwać pamiętania różnych drobiazgów między uruchomieniami. Często najważniejsze rzeczy zapisywano w jakimś "własnym" typie plików, podczas gdy cała reszta była resetowana po każdym uruchomieniu. Klasa QSettings rozwiązywała część tych problemów [...]]]></description>
			<content:encoded><![CDATA[<p>Kontynuując tradycję rzadkich wpisów o ciekawych rzeczach które warto poznać/wykorzystać chciałbym wam przybliżyć trochę klasę QSettings. Do tej pory większość moich aplikacji nie potrafiło sensownie obsługiwać pamiętania różnych drobiazgów między uruchomieniami. Często najważniejsze rzeczy zapisywano w jakimś "własnym" typie plików, podczas gdy cała reszta była resetowana po każdym uruchomieniu.</p>
<p><span id="more-466"></span>Klasa QSettings rozwiązywała część tych problemów - pozwalając skierować grupę ustawień do pliku/rejestru. Niestety, pierwszy wymyślony sposób ich użycia stał się bardzo szybko uciążliwy - zapisywanie setek ustawień w jednym miejscu, pilnowanie aby odczyt zgadzał się z zapisem - jak łatwo się domyślić szybko stało się to nie do opanowania.</p>
<p>Niedawno czytając dokumentację, i stając przed podobnym problemem znalazłem sensowniejsze podejście - wraz z dostarczonymi metodami pozwalające zminimalizować nakład pracy.</p>
<p>Zacznijmy od samego początku naszego programu, dostarczając parę istotnych informacji:</p>
<p>int main(int argc, char *argv[])<br />
{<br />
QApplication a(argc, argv);<br />
QApplication::setOrganizationName("RainLabs");<br />
QApplication::setOrganizationDomain("rainlabs.pl");<br />
QApplication::setApplicationName("Orbi Eye");<br />
QApplication::setApplicationVersion("0.2 alpha");</p>
<p>AutoPhotoAdvanced b;<br />
b.setWindowTitle(QApplication::applicationName()+" v"+QApplication::applicationVersion());<br />
b.show();<br />
return a.exec();</p>
<p>}</p>
<p>Po takim wywołaniu każda klasa potrzebująca skorzystać z ustawień może to zrobić niezwykle szybko i wygodnie - np. w konstruktorze/destruktorze, za pomocą:</p>
<p>QSettings settings;<br />
settings.setValue(....) / settings.value(...)</p>
<p>dzięki takiemu podziałowi każde ustawienia są niezależne, zaś dokonane na początku ustawienia aplikacji pozwalają korzystać z domyślnego konstruktora, co ułatwia ich używanie w całym programie, nie uciekając się do kopiowania kawałka kodu tam i z powrotem lub co gorsza pamiętania jakie argumenty przekazać za każdym razem konstruktorowi.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/cpp/zapisywanie-ustawien-aplikacji-qsettings-w-qt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3</title>
		<link>http://kwesoly.net/programowanie/cpp/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/</link>
		<comments>http://kwesoly.net/programowanie/cpp/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 01:28:49 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[cdt]]></category>
		<category><![CDATA[Code Sourcery]]></category>
		<category><![CDATA[Cortex-M3]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=458</guid>
		<description><![CDATA[Na blogu znajomego zamieściłem wpis na temat związany z nowoczesnymi mikrokontrolerami z którymi ostatnio miałem doczynienia - zapraszam do lektury. Link: Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3]]></description>
			<content:encoded><![CDATA[<p>Na blogu znajomego zamieściłem wpis na temat związany z nowoczesnymi mikrokontrolerami z którymi ostatnio miałem doczynienia - zapraszam do lektury.</p>
<p>Link: <a title="Stały link do Integracja Eclipse CDT z  CodeSourcery dla ARM Cortex-M3" rel="bookmark" href="http://tutro.net/elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/">Integracja Eclipse CDT z CodeSourcery  dla ARM Cortex-M3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/cpp/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>System sprzedaży biletów na Bal Elektryka 2010</title>
		<link>http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/</link>
		<comments>http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 10:22:41 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=451</guid>
		<description><![CDATA[W okresie grudnia uczyłem się trochę Symfony (akurat było to 1.4.1 i Doctrine). Wynikiem i powodem zabawy był system sprzedaży biletów na tegoroczny Bal Elektryka. Główną inspiracją był system Balsit, stworzony przez Rafała Bednarza na Bal w roku 2009. W przypływie nadmiernej chęci do pacy stwierdziłem, że można go napisać od nowa, rozbudowując niektóre możliwości/zmieniając [...]]]></description>
			<content:encoded><![CDATA[<p>W okresie grudnia uczyłem się trochę Symfony (akurat było to 1.4.1 i Doctrine). Wynikiem i powodem zabawy był system sprzedaży biletów na tegoroczny Bal Elektryka.</p>

<a href='http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/attachment/strona_glowna/' title='strona_glowna'><img width="150" height="150" src="http://download.kwesoly.net/2010/02/strona_glowna-150x150.png" class="attachment-thumbnail" alt="strona_glowna" title="strona_glowna" /></a>
<a href='http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/attachment/panel_sprzedawcy/' title='panel_sprzedawcy'><img width="150" height="150" src="http://download.kwesoly.net/2010/02/panel_sprzedawcy-150x150.png" class="attachment-thumbnail" alt="panel_sprzedawcy" title="panel_sprzedawcy" /></a>
<a href='http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/attachment/potwierdzenie_rejestracji/' title='potwierdzenie_rejestracji'><img width="150" height="150" src="http://download.kwesoly.net/2010/02/potwierdzenie_rejestracji-150x150.png" class="attachment-thumbnail" alt="potwierdzenie_rejestracji" title="potwierdzenie_rejestracji" /></a>
<a href='http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/attachment/rejestracja_goscia/' title='rejestracja_goscia'><img width="150" height="150" src="http://download.kwesoly.net/2010/02/rejestracja_goscia-150x150.png" class="attachment-thumbnail" alt="rejestracja_goscia" title="rejestracja_goscia" /></a>

<p>Główną inspiracją był system Balsit, stworzony przez Rafała Bednarza na Bal w roku 2009. W przypływie nadmiernej chęci do pacy stwierdziłem, że można go napisać od nowa, rozbudowując niektóre możliwości/zmieniając funkcjonalność.</p>
<p>System składa się z front-endu do rejestracji gości - każdy chcący kupić bilet rejestrował się na komputerze, członek naszego samorządu sprawdzał poprawność wpisanych danych. Użytkownik otrzymywał unikalny numer, potrzebny zaraz przy następnym stanowisku.</p>
<p>Sprzedawca obsługiwał system sprzedaży - kupujący wybierał miejsce, wpłacał należność i otrzymywał wypisany bilet. Relacje tworzone były automatycznie, system ułatwiał sprzedaż biletu parom.</p>
<p>Całościowo  umożliwił osiągnięcie tempa powyżej 2 biletów na minutę <img src='http://kwesoly.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Sam system nie wykorzystywał innowacyjnych pomysłów - po prostu wykorzystywał wielkie możliwości frameworka <img src='http://kwesoly.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Załączam skompresowane źródła, włącznie z użytym Symfony 1.4.1:<a href="http://download.kwesoly.net/2010/02/balsit0.8.zip"> balsit 0.8</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/web/system-sprzedazy-biletow-na-bal-elektryka-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCV 2.0 + Windows</title>
		<link>http://kwesoly.net/programowanie/cpp/opencv-2-0-windows/</link>
		<comments>http://kwesoly.net/programowanie/cpp/opencv-2-0-windows/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 19:51:34 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[kompilacja]]></category>
		<category><![CDATA[linker]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[opencv]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=414</guid>
		<description><![CDATA[Ze względu na kolejny projekt, w który się zaangażowałem, potrzebowałem działającej, sprawnej biblioteki do przetwarzania obrazu. Wybór padł na OpenCV, zaś strona projektu zaskoczyła nas wydaniem we wrześniu tego roku wersji 2.0. Niestety, próba kompilacji okazała się być podwójnie nieudana Zamieszczam więc krótki opis jak zmusić OpenCV do współpracy. Linkowanie bibliotek - ustawienia linkera Pierwszym [...]]]></description>
			<content:encoded><![CDATA[<p>Ze względu na kolejny projekt, w który się zaangażowałem, potrzebowałem działającej, sprawnej biblioteki do przetwarzania obrazu. Wybór padł na OpenCV, zaś strona projektu zaskoczyła nas wydaniem we wrześniu tego roku wersji 2.0. Niestety, próba kompilacji okazała się być podwójnie nieudana <img src='http://kwesoly.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Zamieszczam więc krótki opis jak zmusić OpenCV do współpracy.</p>
<h3>Linkowanie bibliotek - ustawienia linkera</h3>
<p>Pierwszym problemem z jakim się zetknęliśmy było linkowanie bibliotek - rzut oka do katalogu z bibliotekami utwierdził nas w przekonaniu, że tutorial, którego używamy jest przeznaczony dla OpenCV1.0 lub 1.1. Tak czy inaczej w ustawieniach linkera należy dodać uzupełnione w stosunku do poprzedniej wersji wywołania:</p>
<pre>-lopencv200 -lcxcore200 -lcvaux200 -lml200 -lcxts200 -lhighgui200</pre>
<p>Zaś jako ścieżkę bibliotek (-L) domyślnie:  C:\OpenCV2.0\lib</p>
<p>Taka modyfikacja wywołania pozwoli linkować nasze programy. Ważniejsze jest jednak rozwiązanie problemów związanych z samą kompilacją.</p>
<p><span id="more-414"></span></p>
<h3>Używanie headerów</h3>
<p>Kolejna rzecz, która przebiega sama w sobie bez niespodzianek, to dodanie katalogu z plikami *.h i *.hpp do wywołań kompilatora:</p>
<pre>-IC:\OpenCV2.0\include\opencv</pre>
<h3>Rozwiązanie problemu z kompilacją</h3>
<p>Niestety, pomimo iż biblioteka o tym jawnie nie wspomina, nie została ona dobrze przygotowana do pracy z obecną, stabilną wersją GCC. Aby uniknąć kłopotów przy kompilacji (kłopot==nie działa:)) Najlepiej wybrać nowszą wersję GCC. Pod systemem Windows jednym z lepszych wyborów jeśli chodzi o instalację kompilatora c++, narzędzi do budowania etc. jest pakiet MinGW. Do tej pory korzystałem z oficjalnego wydania MinGW, które "niestety" zawiera oficjalną wersję kompilatora GCC. Świetnie radził sobie on np. z kompilacją programów z biblioteką Qt. Będąc zmuszonym do rezygnacji z tego rozwiązania, a jednocześnie nie chcąc instalować ręcznie całej otoczki (make, binutils, etc.) skorzystałem z strony http://www.tdragon.net/recentgcc/.  Najlepiej wybrać najnowszą wersję w wersji Bundled - nie ma wtedy ryzyka, że któraś z paczek zniknęła z serwera. Po instalacji nowego "pseudo" MinGW (która jest bardzo bezproblemowa) kompilacje z użyciem OpenCV rusza bez problemu.</p>
<p>Warto również zwrócić uwagę, iż Qt 4.5.3 również świetnie działa z GCC 4.4.1, zaś nowsze, "niestabilne" wersje GCC są coraz częściej używane (np pakiet GNU ARM używa GCC serii 4).</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/cpp/opencv-2-0-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konwersje BIN/BCD w ASM 8051</title>
		<link>http://kwesoly.net/programowanie/konwersje-binbcd-w-asm-8051/</link>
		<comments>http://kwesoly.net/programowanie/konwersje-binbcd-w-asm-8051/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 23:06:03 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[8051]]></category>
		<category><![CDATA[assembler]]></category>
		<category><![CDATA[bcd]]></category>
		<category><![CDATA[bcd2bin]]></category>
		<category><![CDATA[Bin]]></category>
		<category><![CDATA[bin2bcd]]></category>
		<category><![CDATA[NKB]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=412</guid>
		<description><![CDATA[Kilka prostych procedur napisanych dla znajomych z innego kierunku: Listing: ;poniższy kod można podmienić na prezentujący inna z załączonych procedurę. &#160; mov R0,#0x14 ;przykladowa liczba do konwersji mov R1,#0x38 ;druga czesc liczby &#160; lcall BCD2BIN2BYTES ;procedura konwertujaca &#160; FINISH: ;petla zapobieajaca wykonywaniu dalszej części programu. &#160; &#160; LJMP FINISH Konwersja 2 bajtowa: Listing: BCD2BIN2BYTES: &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Kilka prostych procedur napisanych dla znajomych z innego kierunku:</p>
<div class="geshi no asm">
<div class="head">Listing:</div>
<ol>
<li class="li1">
<div class="de1"><span class="co1">;poniższy kod można podmienić na prezentujący inna z załączonych procedurę.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">mov</span> R0,#0x14 <span class="co1">;przykladowa liczba do konwersji</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">mov</span> R1,#0x38 <span class="co1">;druga czesc liczby</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">lcall BCD2BIN2BYTES <span class="co1">;procedura konwertujaca</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">FINISH: <span class="co1">;petla zapobieajaca wykonywaniu dalszej części programu.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw5">LJMP</span> FINISH</div>
</li>
</ol>
</div>
<p><span id="more-412"></span><br />
Konwersja 2 bajtowa:</p>
<div class="geshi no asm">
<div class="head">Listing:</div>
<ol>
<li class="li1">
<div class="de1">BCD2BIN2BYTES:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">;liczba jest w R0 i R1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">;bardziej znaczacy w R0, mniej w R1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">;wynik również tam umieścimy.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> A,R0</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; lcall BCD2BIN<span class="re1">1B</span>YTE <span class="co1">;konwertujemy pierwszy</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> B, #<span class="nu0">100</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">MUL</span> AB &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; wynik został pomnożony razy 100</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> R2, B</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> R3, A &nbsp; &nbsp; &nbsp;<span class="co1">; wynik mnożenia zachowany</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> A, R1</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; lcall BCD2BIN<span class="re1">1B</span>YTE <span class="co1">; konwersja mniej znaczącej części</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CLR <span class="kw5">C</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; dodawania z przeniesieniem</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ADDC A, R3</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> R3, A</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> A, R2</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ADDC A, #<span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> R0,A</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> A,R3</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> R1, A</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">RET</span></div>
</li>
</ol>
</div>
<div class="geshi no asm">
<div class="head">Listing:</div>
<ol>
<li class="li1">
<div class="de1">BIN2BCD<span class="re1">1B</span>YTE: <span class="co1">;konwersja BIN2BCD na jednym bajcie - pochodzi z datasheetu - proste i zrozumiałe</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> B, #<span class="nu0">10</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">DIV</span> AB</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; SWAP A</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ADD</span> A, B</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">RET</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">BCD2BIN<span class="re1">1B</span>YTE: <span class="co1">; i w druga stronę</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> R7, A</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ANL A,#0xF0 &nbsp; <span class="co1">; zostawiamy tylko cyfrę dziesiątek</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; SWAP A</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">mov</span> B, #<span class="nu0">10</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">MUL</span> AB</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; XCH A, R7 &nbsp; &nbsp; &nbsp; <span class="co1">; zamiana miejscami</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ANL A, #0x0F &nbsp;<span class="co1">; cyfra jedności</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ADD</span> A, R7</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">RET</span></div>
</li>
</ol>
</div>
<p>Komentarze wyjaśniają mniej typowe rzeczy, zaś działanie pozostałych sprowadza się praktycznie do opisu działania instrukcji. W razie niezrozumienia jakiegoś szczegółów można zapytać na mailu komentarzu.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/konwersje-binbcd-w-asm-8051/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symulacja działania mikrokontrolera opartego o rdzeń 8051</title>
		<link>http://kwesoly.net/programowanie/symulacja-mikrokontrolera-rdzen-8051/</link>
		<comments>http://kwesoly.net/programowanie/symulacja-mikrokontrolera-rdzen-8051/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 21:40:56 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[8051]]></category>
		<category><![CDATA[assembler]]></category>
		<category><![CDATA[mikrokontroler]]></category>
		<category><![CDATA[symulator]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=409</guid>
		<description><![CDATA[Do samodzielnych eksperymentów z wspomnianym uC (nie na sprzęcie w laboratorium czy własnej płytce) przyda się nam jeszcze symulator rdzenia 8051. Z wielu dostępnych symulatorów, w większości jednak starych lub nie w pełni funkcjonalnych wybrałem moim zdaniem najlepszy, napisany w Javie, pozwalający od razu przetestować współpracę w podstawowej konfiguracji sprzętowej (P1 podłączony do linijki diodowej/wyświetlacza [...]]]></description>
			<content:encoded><![CDATA[<p>Do samodzielnych eksperymentów z wspomnianym uC (nie na sprzęcie w laboratorium czy własnej płytce) przyda się nam jeszcze symulator rdzenia 8051. Z wielu dostępnych symulatorów, w większości jednak starych lub nie w pełni funkcjonalnych wybrałem moim zdaniem najlepszy, napisany w Javie, pozwalający od razu przetestować współpracę w podstawowej konfiguracji sprzętowej (P1 podłączony do linijki diodowej/wyświetlacza 7-segmentowego). Ponadto umożliwia on pisanie bezpośrednio w oknie kodu ASM, a ewentualne błędy wskazuje znacznie celniej niż stare programy asemblujące kod.</p>
<p>Wadą symulatora jest fakt, iż znalazłem go w formacie JAR, co czasem sprawia problemy z uruchomieniem (kilka osób zgłaszało iż  musiało zainstalować od nowa JRE).</p>
<p><a href="http://download.kwesoly.net/2009/11/edsim51.zip">Symulator rdzenia '51</a></p>
<p>Wkrótce zamieszczę proste programy napisane w tym symulatorze, będzie wtedy okazja dokładniej zerknąć w akceptowaną przez niego składnię.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/symulacja-mikrokontrolera-rdzen-8051/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Assembler 8051 &#8211; materiały do nauki, pierwsze sprawozdanie.</title>
		<link>http://kwesoly.net/programowanie/assembler-8051-materialy-nauka-sprawozdanie/</link>
		<comments>http://kwesoly.net/programowanie/assembler-8051-materialy-nauka-sprawozdanie/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 21:30:11 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[8051]]></category>
		<category><![CDATA[at89s51]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=404</guid>
		<description><![CDATA[W ramach przedmiotu Technika Mikroprocesorowa (czy coś podobnego:)) na zajęciach zaczęliśmy zabawę z uC opartym o rdzeń '51, produkowany przez firmę Atmel. Ze względu na małą ilość spójnych informacji na temat programowania i działania tego uC którą udało się znaleźć postanowiłem zebrać i opublikować informację umożliwiające "rozpoczęcie przygody" . Po pierwsze jako źródło informacji na [...]]]></description>
			<content:encoded><![CDATA[<p>W ramach przedmiotu Technika Mikroprocesorowa (czy coś podobnego:)) na zajęciach zaczęliśmy zabawę z uC opartym o rdzeń '51, produkowany przez firmę Atmel. Ze względu na małą ilość spójnych informacji na temat programowania i działania tego uC którą udało się znaleźć postanowiłem zebrać i opublikować informację umożliwiające "rozpoczęcie przygody" <img src='http://kwesoly.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Po pierwsze jako źródło informacji na temat samego rdzenia poza książkami (np. dobrą pozycją pana Rydzewskiego) polecam:<br />
<a href="http://www.atmel.com/dyn/resources/prod_documents/doc4316.pdf">Atmel 8051 Microcontrollers Hardware Manual (oryginalny plik na serwerze Atmela)</a><br />
<a href="http://download.kwesoly.net/2009/11/Atmel-8051-Microcontrollers-Hardware-Manual.pdf">Atmel 8051 Microcontrollers Hardware Manual (lokalna kopia na tej stronie)</a></p>
<p>Zaś więcej szczegółów na temat konkretnych mikrokontrolerów można znaleźć w Datasheetach producentów. Dla dostępnych w budynku b1, s. 315 płytek deweloperskich sa to układy AT89S51 Atmela:<br />
<a href="http://www.atmel.com/dyn/resources/prod_documents/doc2487.pdf">AT89S51 Datasheet (oryginalny plik na serwerze Atmela)</a><br />
<a href="http://download.kwesoly.net/2009/11/AT89S51-Datasheet.pdf">AT89S51 Datasheet (lokalna kopia na tej stronie)</a></p>
<p>Poniżej zamieszczam link do sprawozdania z  drugiego ćwiczenia (pierwsze polegało na mruganiu diodą w pętli głównej, niestety nie byłem na nim obecny). Zawiera ono pierwszy program, przygotowany koncepcyjnie/na symulatorze przeze mnie i Kubę Tutro (ale napisany na zajęciach), oraz drugi napisany już na zajęciach prezentujący działanie PWM w celu regulacji jasności świecenia diod. Oba programy pisałem na zajęciach wspólnie z Pawłem Górką, on również uzupełnił komentarze i przygotował sprawozdanie w formacie PDF.<a href="http://download.kwesoly.net/2009/11/gorka_wesolowski_sprawozdanie_lab1-2_8051.pdf"> </a></p>
<p><a href="http://download.kwesoly.net/2009/11/gorka_wesolowski_sprawozdanie_lab1-2_8051.pdf">Sprawozdanie z laboratorium 8051. Paweł Górka, Krzysztof Wesołowski</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/assembler-8051-materialy-nauka-sprawozdanie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Program prezentujący działanie algorytmów działających na grafach</title>
		<link>http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/</link>
		<comments>http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 22:01:06 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[badania operacyjne]]></category>
		<category><![CDATA[grafy]]></category>
		<category><![CDATA[prezentacja]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=390</guid>
		<description><![CDATA[Przy okazji podnoszenia jednej oceny powstał prosty program prezentujący 3 algorytmy operujące na grafach. Pozwala on wprowadzić dowolny graf, o rożnych wagach a następnie prezentuje jego rozwiązanie krok po kroku. Program powstawał  przy mniejszej lub większe niechęci przez wakacje. Pierwsza część programu to edycja i implementacja struktur grafowych.  Klasy tam zaimplementowane pozwalają zaprojektować graf, zapisać [...]]]></description>
			<content:encoded><![CDATA[
<a href='http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/attachment/grafy_algorytmy_screen2/' title='Algorytm Minty&#039;ego'><img width="150" height="150" src="http://download.kwesoly.net/2009/10/grafy_algorytmy_screen2-150x150.jpg" class="attachment-thumbnail" alt="Algorytm Minty&#039;ego" title="Algorytm Minty&#039;ego" /></a>
<a href='http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/attachment/grafy_algorytmy_screen1/' title='Tworzenie grafu'><img width="150" height="150" src="http://download.kwesoly.net/2009/10/grafy_algorytmy_screen1-150x150.jpg" class="attachment-thumbnail" alt="Tworzenie grafu" title="Tworzenie grafu" /></a>

<p>Przy okazji podnoszenia jednej oceny powstał prosty program prezentujący 3 algorytmy operujące na grafach. Pozwala on wprowadzić dowolny graf, o rożnych wagach a następnie prezentuje jego rozwiązanie krok po kroku.</p>
<p>Program powstawał  przy mniejszej lub większe niechęci przez wakacje. Pierwsza część programu to edycja i implementacja struktur grafowych.  Klasy tam zaimplementowane pozwalają zaprojektować graf, zapisać go/wczytać i uruchomić fragment prezentujący dany algorytm. Drugą częścią jest abstrakcyjna klasa AbstractSolver, ułatwiająca pisanie klas rozwiązujących o spójnym wyglądzie i funkcjonalności. Właśnie te 3 przykładowe algorytmy stanowią drugą cześć, stworzoną już nie przeze mnie ale przez Jakuba Tutro i Pawła Górkę.</p>
<p><span id="more-390"></span></p>
<p>W tym projekcie najbardziej zadowala mnie rozplanowanie jego działania, i zaprojektowanie klas,  które choć zapewne nie jest idealne, umożliwiło jasny podział pracy, zminimalizowało ilość kodu i zwiększyło elastyczność takiego rozwiązania.</p>
<p>Program powstawał przy równoczesnej pracy, dlatego do jej synchronizacji wykorzystałem darmowy serwis <a href="http://www.assembla.com/">http://www.assembla.com/</a>, a konkretnie udostępniony przez niego serwer SVN. Zainteresowani mogą pobrać projekt prosto z repozytorium: <a href="http://subversion.assembla.com/svn/graph-algorithms">http://subversion.assembla.com/svn/graph-algorithms</a>.</p>
<p>Dla nie potrafiących korzystać z SVN, lub tylko chcących zerknąć na efekt prac zamieszczam tutaj gotowy instalator z potrzebnymi plikami DLL (całość opiera się o biblioteki <a href="http://qt.nokia.com/">QT4.5</a>).</p>
<p>Instalator: <a href="http://download.kwesoly.net/2009/10/setupGrafyAlgorytmy.exe">Instalator programu Grafy-Algorytmy</a></p>
<p>Pliki: <a href="http://download.kwesoly.net/2009/10/grafy_release.zip">Pliki wykonywalne i skrypt instalatora</a></p>
<p>Źródła: <a href="http://download.kwesoly.net/2009/10/GrafyAlgorytmy_source.zip">Źródła programu Grafy-Algorytmy</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/cpp/program-grafy-minty-dijkstra-fleury/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Relacje 1:1 w Propel &#8211; unikanie błędu z primaryKey</title>
		<link>http://kwesoly.net/programowanie/web/relacje-w-propel-unikanie-bledu/</link>
		<comments>http://kwesoly.net/programowanie/web/relacje-w-propel-unikanie-bledu/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 02:05:15 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=388</guid>
		<description><![CDATA[Przeglądając trochę internetu w poszukiwaniu informacji jak zdefiniować relacje 1:1 za pomocą plików scheme.yml natrafiłem na wiele sugestii, mówiących aby nie tylko pole id, ale i drugie pole (będą właśnie w relacji 1:1 z polem id w innej tabeli) oznaczyć jako primary key. W prostej linii doprowadziło to do niezrozumiałego błędu: Warning: Illegal offset type [...]]]></description>
			<content:encoded><![CDATA[<p>Przeglądając trochę internetu w poszukiwaniu informacji jak zdefiniować relacje 1:1 za pomocą plików scheme.yml natrafiłem na wiele sugestii, mówiących aby nie tylko pole id, ale i drugie pole (będą właśnie w relacji 1:1 z polem id w innej tabeli) oznaczyć jako primary key. W prostej linii doprowadziło to do niezrozumiałego błędu:</p>
<pre>Warning: Illegal offset type in symfony\plugins\sfPropelPlugin\lib\widget\sfWidgetFormPropelChoice.class.php on line 103</pre>
<p>Rozwiązaniem generującym odpowiednie metody, zgodnym z informacją znalezioną np <a href="http://www.geekinterview.com/question_details/2491">tutaj</a>, było zrezygnowanie z <strong>primaryKey</strong>, i użycie klucza unikalnego.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/web/relacje-w-propel-unikanie-bledu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obsługa interfejsu I2C/TWI w mikrokontrolerach AVR na przykładzie DS1338</title>
		<link>http://kwesoly.net/programowanie/avr/obsluga-twi-i2c-ds1338-avr/</link>
		<comments>http://kwesoly.net/programowanie/avr/obsluga-twi-i2c-ds1338-avr/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 18:44:00 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[ds1338]]></category>
		<category><![CDATA[i2c]]></category>
		<category><![CDATA[RTC]]></category>
		<category><![CDATA[twi]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=385</guid>
		<description><![CDATA[Interfejs TWI/I2C To dwa określenia dotyczące tej samej magistrali. Jej twórcą była firma PHILIPS, która do teraz jest właścicielem znaku handlowego I2C. Dlatego też inne implementacje tego standardu są często określane w inny sposób - np.  Atmel nazywa ten interfejs TWI. Na połączenie składają się dwie linie, zegarowa (oznaczana najczęściej SCK/SCL) i danych (oznaczana SDA), [...]]]></description>
			<content:encoded><![CDATA[<h3>Interfejs TWI/I2C</h3>
<p>To dwa określenia dotyczące tej samej magistrali. Jej twórcą była firma PHILIPS, która do teraz jest właścicielem znaku handlowego I2C. Dlatego też inne implementacje tego standardu są często określane w inny sposób - np.  Atmel nazywa ten interfejs TWI. Na połączenie składają się dwie linie, zegarowa (oznaczana najczęściej SCK/SCL) i danych (oznaczana SDA), łącząca wszystkie urządzenia na danej magistrali. Więcej o samym sposobie działania i podłączania można przeczytać w internecie.</p>
<h3>Obsługa interfejsu I2C w mikrokontrolerach AVR</h3>
<p>Zakładam, że korzystamy z mikrokontrolera posiadającego sprzętowe wsparcie dla tego interfejsu. Pozwala nam to obsługiwać ten interfejs na poziomie bajtów, z prędkościami nieosiągalnymi przy emulacji za pomocą zmian stanów portów (bitbang). Przykład, który tutaj zamieszczam został sprawdzony na uC ATmega8, jednak powinien być w pełni przenośny na każdy mikrokontroler AVR ze sprzętowym wsparciem I2C.</p>
<p><span id="more-385"></span></p>
<p>Program obsługuje zegar czasu rzeczywistego <a href="http://datasheets.maxim-ic.com/en/ds/DS1338-DS1338Z.pdf">Maxim/Dallas,DS1338</a>. Ze względu na stosunkowo rzadkie odczyty zrezygnowałem z trudniejszej obsługi za pomocą przerwań - odczyty i zapisy blokują pracę mikrokontrolera. Obsługę podzielono na dwa fragmenty:</p>
<ul>
<li>twi_basics.c, twi_basics.h, zawierające funkcje odnoszące się bezpośrednio do rejestrów kontrolnych (TWCR) i danych (TWDR) oraz oczekujące na ukończenie operacji.</li>
<li>ds1338.c,ds1338.h, zawierające funkcje do bezpośredniej obsługi podłączonego zegara, odczyt/zapis czasu, wykorzystanie pozostałych 56bajtów NVRAM.</li>
</ul>
<p>Cała obsługa sprawdza wartości zwracane przez magistralę i informuje o wyniku operacji za pomocą kodów błędu zdefiniowanych w plikach nagłówkowych. Ułatwia to znajdowanie ewentualnych problemów,  nie eliminuje niestety wszystkich możliwych problemów.</p>
<p>Obsługę innych urządzeń można łatwo skonstruować korzystając z funkcji zawartych w twi_basics, dodając tylko interfejs do danego układu. Dla wielu urządzeń istniejąca biblioteka ds1338 będzie wymagała tylko niewielkich zmian, gdyż filozofia dostępu do danych jest identyczna.</p>
<p>Do samych plików dołączam przykład ilustrujący działaniem wystarczający do zrozumienia jej wykorzystania. Zachęcam do samodzielnego studiowania źródeł, zarówno tych jak i innych spotykanych w internecie, w celu lepszego zrozumienia problemu.</p>
<p>Załącznik:</p>
<p><a href="http://download.kwesoly.net/2009/09/ds1338_lib.zip">Biblioteka DS1338, oparta o TWI</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/avr/obsluga-twi-i2c-ds1338-avr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usuwanie nieużywanych funkcji z programu</title>
		<link>http://kwesoly.net/programowanie/avr/usuwanie-nieuzywanych-funkcji-z-programu/</link>
		<comments>http://kwesoly.net/programowanie/avr/usuwanie-nieuzywanych-funkcji-z-programu/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 18:37:05 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[język C]]></category>
		<category><![CDATA[kompilacja]]></category>
		<category><![CDATA[linkowanie]]></category>
		<category><![CDATA[optymalizacja]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=380</guid>
		<description><![CDATA[W trakcie tworzenia biblioteki do obsługi wyświetlacza 7 segmentowego (7 segmentów+kropka) doszedłem do wniosku,  że  najbardziej eleganckie rozwiązanie to stworzenie osobnego pliku C dla tej biblioteki, wraz z nagłówkami z prototypami funkcji jak i z konfiguracją. Niestety napisanie kilku funkcji ustawiających liczbę na wyświetlaczu spowodowało znaczny rozrost programu - nieużywane funkcje, często bardzo obszerne, trafiły [...]]]></description>
			<content:encoded><![CDATA[<p>W trakcie tworzenia biblioteki do obsługi wyświetlacza 7 segmentowego (7 segmentów+kropka) doszedłem do wniosku,  że  najbardziej eleganckie rozwiązanie to stworzenie osobnego pliku C dla tej biblioteki, wraz z nagłówkami z prototypami funkcji jak i z konfiguracją. Niestety napisanie kilku funkcji ustawiających liczbę na wyświetlaczu spowodowało znaczny rozrost programu - nieużywane funkcje, często bardzo obszerne, trafiły do pliku *.o a następnie do wygenerowanego HEXa zajmując miejsce, pomimo iż nie wszystkie były używane.</p>
<p>Po przetrząśnięciu kawałka internetu znalazłem rozwiązanie, którego efekty są naprawdę znaczące (usunięcie zbędnych funkcji potrafi zaoszczędzić dużo miejsca gdy korzystamy z bibliotek zawierających funkcje na każdą okazję), i w związku z tym warte powtórzenia w wielu innych programach - pozwoli to uniknąć ręcznego usuwania nieużywanego kodu z "biblioteki".</p>
<p><span id="more-380"></span></p>
<h3>Ustawienie kompilatora</h3>
<div id="attachment_381" class="wp-caption alignright" style="width: 310px"><a href="http://download.kwesoly.net/2009/08/project_properties-ffunctions.JPG"><img class="size-medium wp-image-381 " title="Okno Project Properties z dodanym poleceniem ffunctions-sections" src="http://download.kwesoly.net/2009/08/project_properties-ffunctions-300x198.jpg" alt="Okno Project Properties z dodanym poleceniem ffunctions-sections" width="300" height="198" /></a><p class="wp-caption-text">Okno Project Properties z dodanym poleceniem ffunctions-sections</p></div>
<p>Aby móc usuwać nieużywane funkcje, muszą one w pliku wynikowym kompilatora być odrębnymi częściami. Zachowanie takie wymusza dodatkowy argument w poleceniu kompilatora:</p>
<pre>-ffunction-sections</pre>
<p>Dodanie takiej komendy w projekcie przy użyciu Makefile:</p>
<pre>
<pre>CFLAGS += -ffunction-sections</pre>
</pre>
<p>Przy korzystaniu z <a href="http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/">Środowiska Eclipse dla AVR </a>należy z kolei polecenie dodać w ustawieniach projektu.</p>
<p>Z menu Eclipse wybieramy Project -&gt; Properties,<br />
następnie odnajdujemy C/C++ build -&gt; Settings.<br />
I przy wybranym configu Release, w zakładce Tool Settings wybieramy Optimizations z zakładki AVR Compiler. W polu Other Optimizations flag dopisujemy nasze "-ffunction-sections"</p>
<h3>Ustawienia linkera</h3>
<div id="attachment_382" class="wp-caption alignright" style="width: 310px"><a href="http://download.kwesoly.net/2009/08/project_properties-gc-sections.JPG"><img class="size-medium wp-image-382  " title="Okno Project Properties z dodanym poleceniem gc-sections" src="http://download.kwesoly.net/2009/08/project_properties-gc-sections-300x198.jpg" alt="Ustawienia projektu - włączenie gc-sections" width="300" height="198" /></a><p class="wp-caption-text">Okno Project Properties z dodanym poleceniem gc-sections</p></div>
<p>Poprzednio dodane polecenie umieści każdą funkcję w osobnej części pamięci - sekcji. Teraz pozostaje poinformowanie linkera, iż sekcje nie używane mają zostać usunięte - umożliwia to polecenie przekazane do linkera -gc-sections (gc od garbage collector). Tego również można dokonać poprzez plik Makefile lub ustawienia projektu.</p>
<p>Dla Makefile wystarczająca modyfikacja to</p>
<pre>-Wl,-gc-sections</pre>
<p>Z kolei w Eclipse będąc już w Project -&gt; Properties-&gt; C/C++ build -&gt; Settings -&gt;(Release) Wchodzimy w zakładkę AVR C Linker-&gt;General, i dodajemy polecenie "-Wl,-gc-sections"</p>
<p>U mnie taka modyfikacja ustawień pozwoliła na przykład usunąć jedyną funkcję używającą arytmetyki zmiennoprzecinkowej, zamieniając 2,5kB programu w 600bajtów.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/avr/usuwanie-nieuzywanych-funkcji-z-programu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prosta aplikacja układu FT232R firmy FTDI</title>
		<link>http://kwesoly.net/programowanie/avr/aplikacja-ukladu-ft232r-ftdi/</link>
		<comments>http://kwesoly.net/programowanie/avr/aplikacja-ukladu-ft232r-ftdi/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 21:00:49 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[com]]></category>
		<category><![CDATA[ft232rl]]></category>
		<category><![CDATA[rs232]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=361</guid>
		<description><![CDATA[Po co taki układ? Kiedy próbujemy stworzyć oprogramowanie na uC stajemy często przed problemem wymiany danych z naszym komputerem PC.  Sposobów na połączenie własnego układu z komputerem PC jest przynajmniej kilka: Port LPT Możliwość niezależnego manipulowania bitami sprawia że to jedno z najprostszych rozwiązań. Poza zwykłym równoległym przekazywaniem informacji można również emulować interfejsy szeregowe. Obecnie [...]]]></description>
			<content:encoded><![CDATA[<h3>Po co taki układ?</h3>
<p>Kiedy próbujemy stworzyć oprogramowanie na uC stajemy często przed problemem wymiany danych z naszym komputerem PC.  Sposobów na połączenie własnego układu z komputerem PC jest przynajmniej kilka:</p>
<ul>
<li>Port LPT<br />
Możliwość niezależnego manipulowania bitami sprawia że to jedno z najprostszych rozwiązań. Poza zwykłym równoległym przekazywaniem informacji można również emulować interfejsy szeregowe. Obecnie laptopy bardzo rzadko posiadają taki interfejs, a nawet jeśli, są to często modele droższe od powszechnie spotykanych.</li>
<li>Port COM</li>
<li> Powszechny interfejs szeregowy. Poza podstawowymi liniami służącymi do transmisji i odbioru danych zawiera też linie sterujące przepływem danych. Pod względem sposobu transmisji do komunikacji wystarczy połączenie naprzemiennie sygnałów Tx&lt;-&gt;Rx portu COM i mikrokontrolera. Niestety, w warstwie fizycznej całkiem inne poziomy napięć nie pozwalają na takie połączenie. Powstało wiele układów służących do konwersji napięć między poziomem uC a portu COM. Często więc na płytce montowało/montuje się po prostu MAX232 do konwersji napięć podpięty pod odpowiednie nóżki mikroprocesora, i łączony z portem COM komputera. Stety/niestety porty COM też należą już do laptopowej rzadkości. Rozwiązanie polegające na używaniu przejściówek USB&lt;-&gt;COM wraz z takimi układami jest często spotykane, pomimo wiążącego się z tym narzutu - dwukrotna konwersja napięć nie ma sensu.<br />
<span id="more-361"></span></li>
<li>Port USB<br />
Jeśli odrzucimy to czego w laptopie nie ma, i zrezygnujemy z przejściówek pozostaje nam po prostu użycie portu  USB, który zadomowił się w komputerach już na dobre.  Tutaj też mamy kilka możliwości:</p>
<ul>
<li>Emulacja interfejsu USB za pomocą uC.<br />
Niestety programowa realizacja interfejsu USB utrudnia wykonywanie innych zadań, dlatego maksymalna wydajność takiego rozwiązania nie jest oszałamiająca. Mikro kontroler musiałby zajmować się wyłącznie obsługą USB, lub zrezygnować z wykonywanych przez siebie czynności. Urządzenia tak działające często komunikują się programowo z USB i np. przesyłają dane dalej przez wspierane sprzętowo interfejsy (np. UART, SPI)</li>
<li>Wykorzystanie specjalizowanego układu<br />
Sama firma FTDI produkuje kilka układów umożliwiających komunikacje za pomocą UART, użytym rozwiązaniem jest najprostszy z nich FT232RL. Umożliwia on w pełni sprzętowe przejście USB&lt;-&gt;UART, wraz z dodatkowymi liniami (sterującymi przepływem, pochodzącymi z portu COM) oraz dodatkowymi 4 portami, które można zastosować jako dowolne wejścia wyjścia. Układ posiada również bardzo dobre wsparcie producenta: sterowniki pod większość systemów operacyjnych, biblioteki ułatwiające programowanie komunikacji czy też przykłady zastosować w nocie katalogowej (możliwe aplikacje układu). Poza przedstawionym tutaj zastosowaniem istnieje wiele wiele innych - wystarczy przejrzeć dokumentacje: na <a href="http://www.ftdichip.com/Documents/DataSheets/DS_FT232R.pdf">http://www.ftdichip.com/Documents/DataSheets/DS_FT232R.pdf</a></li>
</ul>
</li>
</ul>
<h3>Wykonany układ</h3>
<p>Opierając się właśnie na wspomnianych notach aplikacyjnych, i materiałach samemu przejrzanych jak i konsultacjach z bardziej doświadczonymi kolegami, zaprojektowałam układ będący interfejsem Komputer PC &lt;-&gt; mikrokontroler. Główne zalety wykonanego urządzenia:</p>
<ul>
<li>Sprzętowy, niezawodny i wydajny interfejs.</li>
<li>Współpraca z urządzeniami zasilanymi praktycznie dowolnym napięciem - za pomocą zworki do wyboru 3.3 jak i 5 volt, ewentualnie możliwość podpięcia własnego napięcia VCCIO do układu.</li>
<li>Dodatkowe 4 porty GPIO, które można kontrolować z poziomu aplikacji pisanych z wykorzystaniem bibliotek dostarczonych przez FTDI.</li>
<li>Dodatkowe wyprowadzenia zasilania, poza wspólną masą dodatkowo 2 linie 3.3V o łącznej wydajności prądowej 50mA i 6 linii 5V pochodzących z portu USB o wydajności ograniczonej komputerem/standardem USB - w moim przypadku komputer jest w stanie dostarczyć tyle prądu, limitem jest więc standardowe 500mA.</li>
<li>Sygnalizacja transmisji jak i poprawnego zasilania za pomocą diod LED.</li>
</ul>
<p>Poniżej kilka zdjęć wykonanego układu:</p>

<a href='http://kwesoly.net/programowanie/avr/aplikacja-ukladu-ft232r-ftdi/attachment/usb2uart_01/' title='usb2uart_01'><img width="150" height="150" src="http://download.kwesoly.net/2009/08/usb2uart_01-150x150.jpg" class="attachment-thumbnail" alt="usb2uart_01" title="usb2uart_01" /></a>
<a href='http://kwesoly.net/programowanie/avr/aplikacja-ukladu-ft232r-ftdi/attachment/usb2uart_02/' title='usb2uart_02'><img width="150" height="150" src="http://download.kwesoly.net/2009/08/usb2uart_02-150x150.jpg" class="attachment-thumbnail" alt="usb2uart_02" title="usb2uart_02" /></a>
<a href='http://kwesoly.net/programowanie/avr/aplikacja-ukladu-ft232r-ftdi/attachment/usb2uart_03/' title='usb2uart_03'><img width="150" height="150" src="http://download.kwesoly.net/2009/08/usb2uart_03-150x150.jpg" class="attachment-thumbnail" alt="usb2uart_03" title="usb2uart_03" /></a>

<p>Oraz schemat urządzenia:</p>
<p><a href="http://download.kwesoly.net/2009/08/usb2uart-schemat.pdf">usb2uart-schemat</a></p>
<p>Układ przynajmniej pod względem poprawności połączeń i transmisji UART przetestowany wraz z prezentowanym poprzednio mikrokontrolerem.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/avr/aplikacja-ukladu-ft232r-ftdi/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Prosta płytka prototypowa dla ATmega162</title>
		<link>http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/</link>
		<comments>http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 01:25:14 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[Atmega]]></category>
		<category><![CDATA[prototypowa]]></category>
		<category><![CDATA[zestaw testowy]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=353</guid>
		<description><![CDATA[Jakiś czas temu opisałem proces konfiguracji środowiska Eclipse + WinAVR + AVRStudio Debuger Jako, że tematyka tych małych i tanich procesorów wciąż jest dla mnie interesująca zamieszczam schemat i wzór płytki PCB oraz opisu dla małego urządzenia, które wykonałem w ostatnim czasie. Na początek kilka zdjęć finalnej wersji płytki: Płytka umożliwia proste budowanie układów dzięki [...]]]></description>
			<content:encoded><![CDATA[<p id="posttitle">Jakiś czas temu opisałem proces konfiguracji środowiska <a title="Stały link: Eclipse + WinAVR + AVRStudio Debuger" rel="bookmark" href="../programowanie/avr/eclipse-winavr-avrstudio-debuger/">Eclipse + WinAVR + AVRStudio Debuger</a></p>
<p>Jako, że tematyka tych małych i tanich procesorów wciąż jest dla mnie interesująca zamieszczam schemat i wzór płytki PCB oraz opisu dla małego urządzenia, które wykonałem w ostatnim czasie.</p>
<p>Na początek kilka zdjęć finalnej wersji płytki:</p>

<a href='http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/attachment/atmega162_01/' title='ATmega162_01'><img width="150" height="150" src="http://download.kwesoly.net/2009/07/ATmega162_01-150x150.jpg" class="attachment-thumbnail" alt="ATmega162_01" title="ATmega162_01" /></a>
<a href='http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/attachment/atmega162_02/' title='ATmega162_02'><img width="150" height="150" src="http://download.kwesoly.net/2009/07/ATmega162_02-150x150.jpg" class="attachment-thumbnail" alt="ATmega162_02" title="ATmega162_02" /></a>
<a href='http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/attachment/atmega162_03/' title='ATmega162_03'><img width="150" height="150" src="http://download.kwesoly.net/2009/07/ATmega162_03-150x150.jpg" class="attachment-thumbnail" alt="ATmega162_03" title="ATmega162_03" /></a>
<a href='http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/attachment/atmega162_04/' title='ATmega162_04'><img width="150" height="150" src="http://download.kwesoly.net/2009/07/ATmega162_04-150x150.jpg" class="attachment-thumbnail" alt="ATmega162_04" title="ATmega162_04" /></a>
<a href='http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/attachment/atmega162_05/' title='ATmega162_05'><img width="150" height="150" src="http://download.kwesoly.net/2009/07/ATmega162_05-150x150.jpg" class="attachment-thumbnail" alt="ATmega162_05" title="ATmega162_05" /></a>
<a href='http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/attachment/atmega162_06/' title='ATmega162_06'><img width="150" height="150" src="http://download.kwesoly.net/2009/07/ATmega162_06-150x150.jpg" class="attachment-thumbnail" alt="ATmega162_06" title="ATmega162_06" /></a>

<p><span id="more-353"></span></p>
<p>Płytka umożliwia proste budowanie układów dzięki wyprowadzeniu wszystkich złącz na goldpiny. W przeciwieństwie jednak to prostych modułów rozprowadzających wszystkie nóżki na pary goldpinów, tutaj zintegrowano również podstawowe, przydatne funkcjonalności:</p>
<ul>
<li>Zintegrowany kwarc 16 MHz, pozwalający korzystać z największej teoretycznie możliwej prędkości tego mikro kontrolera.<br />
Za pomocą fusebitów możemy ten zegar podzielić przez 8 lub też z niego zrezygnować na rzecz wewnętrznego generatora RC.</li>
<li>Zintegrowany kwarc 32768Hz, wpięty do pinów przeznaczonych na taki kwarc/służących jako zwykłe IO.<br />
Podwójny Dipswitch umożliwia jego odcięcie w przypadku chęci skorzystania raczej z portu IO.</li>
<li>Wyprowadzone złącze do ISP, 10 pinowa zgodne z standardem KANDA. Zamiast zwykłych goldpinów zastosowano Gniazdo, co ułatwia poprawne wpięcie programatora.</li>
<li>Wyprowadzono 10 pinowe złącze JTAG, zgodne z JTAG ICE.</li>
<li>Przycisk umożliwiający ręczne zresetowanie procesora.</li>
<li>I oczywiście zasilanie wraz z kondensatorami.</li>
</ul>
<p>Do wpisu załączam schemat, w razie potrzeby proszę o kontakt mailowy- podeślę  pozostałe pliki.</p>
<p><a href="http://download.kwesoly.net/2009/07/ATmega162-Devboard-schematic.pdf">Schemat płytki prototypowej</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/avr/prosta-plytka-prototypowa-dla-atmega162/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zintegrowany sterownik silników krokowych A3977</title>
		<link>http://kwesoly.net/programowanie/avr/zintegrowany-sterownik-silnikow-krokowych-a3977/</link>
		<comments>http://kwesoly.net/programowanie/avr/zintegrowany-sterownik-silnikow-krokowych-a3977/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 09:00:45 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[krokowy]]></category>
		<category><![CDATA[microstepping]]></category>
		<category><![CDATA[silnik]]></category>
		<category><![CDATA[sterowanie]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=342</guid>
		<description><![CDATA[W ramach chęci rozwinięcia ciekawych umiejętności i podniesienia oceny powstał niedawno artykuł/referat na temat wymienionego w tytule układu. Na jego podstawie Jakub Tutro zbudował sterownik, do którego wspólnie napisaliśmy program testowy. Zamieszam go, gdyż zawiera wiele ciekawych informacji na temat ogólnej idei sterowania takimi silnikami . Silniki_krokowe - pobierz]]></description>
			<content:encoded><![CDATA[<p>W ramach chęci rozwinięcia ciekawych umiejętności i podniesienia oceny powstał niedawno artykuł/referat na temat wymienionego w tytule układu. Na jego podstawie Jakub Tutro zbudował sterownik, do którego wspólnie napisaliśmy program testowy. Zamieszam go, gdyż zawiera wiele ciekawych informacji na temat ogólnej idei sterowania takimi silnikami .</p>
<p><a href="http://download.kwesoly.net/2009/06/silniki_krokowe.pdf">Silniki_krokowe - pobierz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/avr/zintegrowany-sterownik-silnikow-krokowych-a3977/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse + WinAVR + AVRStudio Debuger</title>
		<link>http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/</link>
		<comments>http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 19:11:02 +0000</pubDate>
		<dc:creator>Krzysiek Wesołowski</dc:creator>
				<category><![CDATA[AVR]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[winAVR]]></category>

		<guid isPermaLink="false">http://kwesoly.net/?p=313</guid>
		<description><![CDATA[Jako, że postanowiłem spróbować programowania w znanym mi języku, ale na całkiem innej platformie - procesorach  AVR, postaram się opisać niektóre fragmenty moich doświadczeń. Dziś jedno z pierwszych - konfiguracja tytułowego zestawu. Używanie takiej konfiguracji upraszcza pracę, pozwalając przerzucić odpowiedzialność za plik makefile na środowisko programistyczne, co jest z reguły wygodniejsze i efektywniejsze niż ręczna [...]]]></description>
			<content:encoded><![CDATA[<p>Jako, że postanowiłem spróbować programowania w znanym mi języku, ale na całkiem innej platformie - procesorach  AVR, postaram się opisać niektóre fragmenty moich doświadczeń. Dziś jedno z pierwszych - konfiguracja tytułowego zestawu. Używanie takiej konfiguracji upraszcza pracę, pozwalając przerzucić odpowiedzialność za plik makefile na środowisko programistyczne, co jest z reguły wygodniejsze i efektywniejsze niż ręczna edycja. Poza tym korzystamy  z wygodnego edytora, ze znanymi już funkcjami, skrótami klawiszowymi etc.</p>
<h3>Instalacja WinAVR</h3>
<p>Pierwszą częścią zestawu, niezbędną w pracy będzie kompilator WinAVR, dostępny pod adresem <a href="http://winavr.sourceforge.net/">http://winavr.sourceforge.net/</a>. Nie będę się rozpisywał na jego temat, gdyż przekracza to zakres tego wpisu, w dodatku jest bardzo szeroko opisane w internecie. Sama strona pobierania WinAVR na SourceForge.net znajduje się <a title="Pobierz WinAVR" href="http://sourceforge.net/project/showfiles.php?group_id=68108">tutaj</a>.</p>
<p>W trakcie instalacji najlepiej nie zmieniać domyślnej ścieżki, i pozwolić na dopisanie jej do zmiennej systemowej PATH, zwłaszcza jeżeli nie używamy innych kompilatorów korzystających z make (jeśli używamy, warto skorzystać np. ze skryptu wsadowego do odpalania środowisk tak, aby zmienną PATH modyfikować dynamicznie, i zawsze odpalać właściwy make, gdyż często różne wersje dołączane do aplikacji nie są ze sobą kompatybilne). Jeśli zamierzamy używać Eclipse, warto odznaczyć również instalacje Programmers Notepada.</p>
<p>Po instalacji warto uruchomić ponownie komputer tak, aby dopiski do zmiennej PATH zaczęły działać.</p>
<p><span id="more-313"></span></p>
<h3>Instalacja i konfiguracja Eclipse</h3>
<p>Podstawowym  środowiskiem edycyjnym będzie Eclipse, wraz z narzędziami do programowania w języku C/C++ rozprowadzany jako Eclipse CDT. Jego instalacja jest prosta, opisałem ją zresztą jakiś czas temu <a title="Instalacja Eclipse CDT" href="http://kwesoly.net/programowanie/cpp/eclipse-cdt/">tutaj</a>.</p>
<p>Po zainstalowaniu Eclipse, będziemy potrzebowali jeszcze dodatkowej wtyczki, która ułatwia tworzenie projektów, zarządzanie nimi, pisanie kodu jak i jego kompilacje.</p>
<p>Wtyczka ta jest dostępna pod adresem <a title="AVR-Eclipse" href="http://avr-eclipse.sourceforge.net">http://avr-eclipse.sourceforge.net</a>, konkretnie na stronie <a title="Strona pobierania AVR Eclipse" href="http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download">pobierania</a>. Najprostsza droga instalacji to skorzystanie z menedżera pakietów dostępnego w Eclipse, ją tez krótko opiszę.</p>
<ol>
<li>Uruchamiamy Eclipse, ewentualnie tworzymy już nowy Workspace na projekty AVR.</li>
<li>Wybieramy z menu Help-&gt;Software Updates.</li>
<li>W zakładce Available Software wybieramy Add Site...</li>
<li>Wpisujemy/wklejamy adres znaleziony na stronie pobierania, w moim wypadku to <em>http://avr-eclipse.sourceforge.net/updatesite/.</em></li>
<li>Na liście, która prawdopodobnie automatycznie się rozwinie, zaznaczamy oba pola, czyli w praktyce całą stronę wklejoną wcześniej.</li>
<li>Klikamy Install, i po przejściu przez prostą procedurę instalacji w stylu Next, Accept, Next i zamknięciu okienka Software Updates nastąpi instalacja zakończona propozycją ponownego uruchomienia środowiska Eclipse.</li>
</ol>
<p>Po zakończeniu powyższych czynności dysponujemy już zarówno kompilatorem, jak i środowiskiem edycyjnym.</p>
<h3>Instalacja AVRStudio</h3>
<p>Pomimo wielu prób stworzenia symulatora z możliwością debugowania programów napisanych na mikrokontrolery, wciąż najlepszym rozwiązaniem (ze znanych mi w tej chwili) pozostaje oryginalny debugger zintegrowany z AVRStudio, pozwalający na symulację i debugowanie programów na uC AVR.</p>
<p>Pobierania AVR Studio należy rozpocząć tutaj: <a href="http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725">http://www.atmel.com/dyn/Products/tools_card.asp?tool_id=2725</a>. Niestety, sam doświadczyłem niekompatybilności najnowszej wersji (4.15 przy poprzedniej instalacji), z moim system Windows XP sp3 PL, dlatego w razie problemów należy spróbować użyć innej wersji (4.14 zadziałała wtedy, 4.16 też już działa).</p>
<p>Samo pobieranie wymaga wyjątkowo denerwującej rejestracji- Atmel nie tworzy nam konta, tylko pyta o te same dane przy każdym pobieraniu. Dlatego nie warto skrupulatnie wypełniać rubryczek, zwłaszcza, że zawierają szczegółowe dane o naszej osobie.</p>
<p>Instalacja przebiega bezproblemowo, AVR Studio gotowy do pracy.</p>
<h3>Pierwszy projekt w Eclipse</h3>
<p>Utworzę teraz nowy projekt, oraz podpowiem jak go skonfigurować, aby możliwa była współpraca z ww debugerem. W tym celu uruchamiamy Eclipse, i wykonujemy nastepujące kroki:</p>
<ol>
<li>Z menu File-&gt;New wybieramy "C Project".</li>
<li>Uzupełniamy jego nazwę, i w Project Type wybieramy "AVR Cross Target Application".</li>
<li>Przechodzimy dalej (Automatycznie zaznaczył nam się jedyny dostępny Toolchain).</li>
<li>Na następnej stronie pozostawiamy zaznaczone obie konfiguracje, wchodzimy w Advanced Settings.</li>
<li>W zakładce AVR ustawiamy typ docelowego procesora, jego częstotliwość oraz ewentualnie konfigurujemy programator (opiszę to przy następnej okazji).</li>
<li>Wchodzimy w zakładkę "C/C++ build", w część Settings.</li>
<li>Widzimy teraz listę ustawień kompilatora, linkera etc, w dodatku możemy modyfikować ją dla obu konfiguracji kompilatora, wybierając Debug/Release u góry okna.</li>
<li>Aby debugować kod w AVR Studio potrzebujemy posiadać niezbędne informację w pliku elf, w tym celu w wyżej wymienionych ustawieniach, w sekcji Debugging, zarówno dla AVR Assembler jak i AVR Comiler ustawiamy Debug info format  na dwarf-2.</li>
<li>Akceptujemy wszystkie ustawienia klikając OK i przechodzimy do następnego etapu.</li>
<li>W następnym oknie ponownie wybieramy docelowy MCU oraz wpisujemy jego częstotliwość.</li>
</ol>
<p>Utworzony projekt jest pusty, dlatego musimy jeszcze dodać przynajmniej jeden plik źródłowy, klikając na File, New, C Source File i wypełniając go treścią. Ja wykorzystałem listing pochodzący z kursu programowania mikroprocesorów w C z czasopisma "Elektronika dla wszystkich":</p>
<pre>#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;

int main(void)
{
	DDRD=0x7c;
	for(;;)
	{
		PORTD=0x7c;
		_delay_loop_2(0xffff)
		PORTD=0;
		_delay_loop_2(0xffff);
	}
	return 0;
}</pre>
<p>Po zapisaniu pliku pozostaje zbudowanie pliku, za pomocą menu Project-&gt;Build.</p>
<p>W katalogu Debug, wewnątrz naszego projektu powstanie m.in. plik nazwaprojeku.elf, który można symulować wraz z podglądem źródeł w AVR Studio.</p>
]]></content:encoded>
			<wfw:commentRss>http://kwesoly.net/programowanie/avr/eclipse-winavr-avrstudio-debuger/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

