<?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>Elektronika i Programowanie &#187; eclipse</title>
	<atom:link href="http://tutro.net/tag/eclipse/feed/" rel="self" type="application/rss+xml" />
	<link>http://tutro.net</link>
	<description>Blog studenta Automatyki i Robotyki</description>
	<lastBuildDate>Wed, 21 Jul 2010 11:48:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Kompilacja OpenOCD i podpięcie do Eclipse CDT</title>
		<link>http://tutro.net/elektronika/kompilacja-openocd-i-podpiecie-do-eclipse-cdt/</link>
		<comments>http://tutro.net/elektronika/kompilacja-openocd-i-podpiecie-do-eclipse-cdt/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 00:39:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[debugger]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[JTAG]]></category>
		<category><![CDATA[mikrokontrolery]]></category>
		<category><![CDATA[mikroprocesory]]></category>
		<category><![CDATA[OpenOCD]]></category>

		<guid isPermaLink="false">http://tutro.net/?p=18</guid>
		<description><![CDATA[Z biegiem czasu gdy tworzy się coraz większe projekty, na coraz to lepsze i bardziej rozbudowane mikrokontrolery panowanie nad kodem staje się coraz trudniejsze. Często ciężko przewidzieć pewne rzeczy, a to prowadzi z kolei do błędów, które później bardzo ciężko znaleźć. Aby przyspieszyć tworzenie oprogramowania i skrócić tzw. &#8222;time to market&#8221; producenci wyposażają swoje układy [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/03/bug.png"><img class="alignleft size-full wp-image-39" title="bug" src="http://tutro.net/wp-content/uploads/2010/03/bug.png" alt="" width="128" height="128" /></a>Z biegiem czasu gdy tworzy się coraz większe projekty, na coraz to lepsze i bardziej rozbudowane mikrokontrolery panowanie nad kodem staje się coraz trudniejsze. Często ciężko przewidzieć pewne rzeczy, a to prowadzi z kolei do błędów, które później bardzo ciężko znaleźć. Aby przyspieszyć tworzenie oprogramowania i skrócić tzw. &#8222;time to market&#8221; producenci wyposażają swoje układy w interfejsy które pozwalają debugować program podczas wykonywania. Daje to niesamowite możliwości i bardzo ułatwia tworzenie bezbłędnego kodu. Obecnie prawie każdy mikrokontroler, który kosztuje więcej niż 10zł ma na pokładzie jakiś interfejs do debugowania. Najczęściej jest to popularny JTAG, ale coraz częściej pojawiają się też inne, np. Serial Wire Debug, które zaczynają z nim konkurować. Żeby moc debugować program przez JTAG potrzebujemy dwóch rzeczy: po pierwsze interfejsu JTAG podłączanego do komputera (przez LPT bądź USB), a po drugie oprogramowania. W tym artykule zajmę się tylko tą drugą częścią&#8230;</p>
<h1 style="text-align: justify;"><span id="more-18"></span>Dlaczego OpenOCD?!?</h1>
<p style="text-align: justify;">Na rynku istnieje wiele komercyjnych środowisk, niektóre nawet w darmowych wersjach. Jest tylko jeden problem&#8230; Mianowicie istnieją dwie możliwości&#8230; Pierwsza jest taka, że środowisko jest płatne i obsługuje większość JTAG&#8217;ów na rynku, a druga jest taka, że środowisko jest darmowe i obsługuje tylko jeden konkretny JTAG sprzedawany za ciężkie pieniądze przez twórców tego środowiska. Tak więc nie wygląda to zbyt kolorowo. Nie mniej jednak nie jest, aż tak źle. Tak samo, jak w przypadku kompilatorów i IDE (zapraszam do posta gościnnie napisanego przez mojego kolegę: <a title="Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3" href="../elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/" target="_self">Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3</a>) trzeba będzie się trochę natrudzić i nie wszystko będzie podane na tacy, ale można mieć całkiem sprawny aparat do debugowania całkowicie za darmo. Jak zapewne się już domyślacie mowa tutaj o OpenOCD. No to zaczynamy :)</p>
<h1 style="text-align: justify;">Cygwin</h1>
<p style="text-align: justify;">Podstawowy problem (a może raczej wyzwanie :P) z OpenOCD polega na tym, że trzeba je sobie skompilować :) Jako, że będziemy to robić pod windowsem, będziemy potrzebować cygwina, więc musimy sobie go najpierw ściągnąć (np. z oficjalnej strony: <a title="http://cygwin.com/" href="http://cygwin.com/" target="_blank">http://cygwin.com/</a>, a dokładnie <a title="stąd" href="http://cygwin.com/setup.exe">stąd</a>) i zainstalować. Instalacja jest dość prosta, a po kolei wygląda to tak:</p>
<ul style="text-align: justify;">
<li>uruchamiamy plik setup.exe</li>
<li>wybieramy instalację z internetu</li>
<li>wybieramy ścieżkę instalacji cygwina (najlepiej zostawić domyślną C:\cygwin), tutaj pragnę zwrócić uwagę na to, by przy instalowaniu wszelkiego rodzaju kompilatorów i narzędzi konsolowych raczej unikać ścieżek zawierających spacje, gdyż może to przysporzyć wielu problemów</li>
<li>wybieramy katalog do którego instalator ściągnie sobie pliki</li>
<li>wybieramy połączenie bezpośrednie, czyli &#8222;Direct Connection&#8221;</li>
<li>wybieramy serwer z którego chcemy ściągnąć cygwina</li>
<li>gdy otworzy nam się okno wyboru pakietów które chcemy zainstalować musimy dodatkowo zaznaczyć (warto skorzystać z &#8222;szukaczki&#8221;):
<ul>
<li>autoconf: Wrapper scripts for autoconf commands</li>
<li>automake: Wrapper scripts for automake and aclocals</li>
<li>gcc: C compiler upgrade helper</li>
<li>libtool: A shared library generation tool</li>
<li>make: The GNU version og the &#8216;make&#8217; utility</li>
</ul>
</li>
<li>klikamy &#8222;Dalej&#8221; i następnie &#8222;Install&#8221;</li>
</ul>
<h1 style="text-align: justify;">Licencje i takie tam&#8230;</h1>
<p style="text-align: justify;">Jak mamy już zainstalowanego cygwina to zanim się weźmiemy do konkretnej roboty to jeszcze chciałem napisać parę słów co i jak. W tym artykule chcę opisać kompilowanie OpenOCD ze sterownikami JTAG&#8217;ów opartych o układy firmy FTDI. Generalnie istnieją dwie drogi. Jako, że OpenOCD jest na licencji GPL to każdy rozpowszechniany program, który korzysta z OpenOCD musi mieć całkiem otwarte źródła. Aby spełnić to wymaganie do kompilacji musimy użyć sterowników o otwartym kodzie. Jedyne znane mi sterowniki o otwartym kodzie obsługujące układy FTDI, to LibUSB (wersja win32:<a title="http://libusb-win32.sourceforge.net/" href="http://libusb-win32.sourceforge.net/" target="_blank"> http://libusb-win32.sourceforge.net/</a>) w połączeniu z biblioteką libftdi (<a title="http://www.intra2net.com/en/developer/libftdi/" href="http://www.intra2net.com/en/developer/libftdi/" target="_blank">http://www.intra2net.com/en/developer/libftdi/</a>). Tak skompilowaną wersję można rozpowszechniać, bez żadnych problemów i możecie ją ściągnąć np z blogu Freddiego: <a title="http://www.freddiechopin.info/" href="http://www.freddiechopin.info/" target="_blank">http://www.freddiechopin.info/</a>). Druga opcja to użycie oficjalnych sterowników i biblioteki firmy FTDI, czyli ftd2xx. Jedyny problem z tą biblioteką jest to, że producent udostępnia ją tylko w wersji skompilowanej, nie pokazując źródeł. Co pociąga za sobą fakt, że tak skompilowane OpenOCD nie spełnia warunku, że cały kod produktu musi być otwarty i udostępniony. Tak więc nie można rozpowszechniać tak skompilowanego programu. Nie oznacza to natomiast, że nie można sobie skompilować OpenOCD z taką biblioteką. Dlatego też opiszę dokładnie jak to zrobić, tak by każdy mógł sobie skompilować kod we własnym zakresie. No to na tyle ględzenia i lecimy dalej.</p>
<h1 style="text-align: justify;">Instalujemy sterowniki do JTAG&#8217;a</h1>
<p style="text-align: justify;">
<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/02/foldery.png"><img class="size-full wp-image-22    alignright" style="margin-left: 5px; margin-right: 5px;" title="Drzewo katalogów" src="http://tutro.net/wp-content/uploads/2010/02/foldery.png" alt="Drzewo katalogów" width="214" height="151" /></a></p>
<p style="text-align: justify;">
<p style="text-align: justify;">Najpierw musimy ściągnąć i zainstalować sterowniki do urządzenia i dopiero później możemy kompilować bibliotekę. Trochę to dziwne, ale podczas konfiguracji biblioteki skrypty do tego stworzone testują jakoś tą bibliotekę i jeżeli nie ma w tej chwili zainstalowanych sterowników test się nie powiedzie i nie będzie można ukończyć kompilacji. Najdziwniejsze jest to, że przy kompilacji z bibliotekami libftdi nie ma żadnego testu tylko wszystko ładnie idzie :/ Sterowniki ściągamy z  ze strony producenta ukladów (<a title="http://www.ftdichip.com/" href="http://www.ftdichip.com/" target="_blank">http://www.ftdichip.com/</a>, dokładnie <a href="http://www.ftdichip.com/Drivers/D2XX.htm" target="_blank">stąd</a> &#8211; obecnie jest to wersja <a href="http://www.ftdichip.com/Drivers/CDM/CDM20602.zip" target="_blank">2.06.02</a>). Musimy je teraz wypakować, ale żeby łatwiej było nam się później (przy kompilacji) dogadać co do ścieżek to proponuje stworzyć katalog &#8222;C:\tmp&#8221; do niego wypakować zawartość archiwum, a następnie zmienić nazwę wypakowanego katalogu z &#8222;CDM 2.06.00 WHQL Certified&#8221; na &#8222;ftd2xx&#8221;. Skoro już wzięliśmy się za ściąganie to odrazu proponuję pobrać źródła OpenOCD (<a title="http://developer.berlios.de/project/showfiles.php?group_id=4148&amp;release_id=17249" href="http://developer.berlios.de/project/showfiles.php?group_id=4148&amp;release_id=17249">stąd</a>) w tym momencie najnowszą wersją jest: &#8222;<a title="http://prdownload.berlios.de/openocd/openocd-0.4.0-rc2.zip" href="http://prdownload.berlios.de/openocd/openocd-0.4.0.zip">openocd-0.4.0</a>&#8222;, jest to co prawda wersja RC, ale działa całkiem sprawnie, więc nie widzę powodów by korzystać ze starszej (jeżeli jednak ktoś bardzo chce, może pobrać starszą wersję &#8211; cała procedura kompilacji wygląda dokładnie tak samo). No więc ściągamy<a href="http://tutro.net/wp-content/uploads/2010/02/jtagkey1.png"><img class="size-medium wp-image-25    alignleft" style="margin-left: 5px; margin-right: 5px;" title="jtagkey.cfg" src="http://tutro.net/wp-content/uploads/2010/02/jtagkey1-300x161.png" alt="jtagkey.cfg" width="240" height="129" /></a>OpenOCD i rozpakowujemy do naszego folderu &#8222;C:\tmp&#8221;. Dla jasności obok przedstawiam jak powinno wyglądać drzewo katalogów. Potrzebujemy jeszcze jednego małego programiku, do wygenerowania plików inf sterowników. Programik nazywa się <a title="http://www.ftdichip.com/Resources/Utilities/FT_INF%20v1.0.zip" href="http://www.ftdichip.com/Resources/Utilities/FT_INF%20v1.0.zip" target="_blank">FT_INF</a> i możemy go pobrać ze stronki FTDI (<a title="http://www.ftdichip.com/Resources/Utilities.htm" href="http://www.ftdichip.com/Resources/Utilities.htm" target="_blank">http://www.ftdichip.com/Resources/Utilities.htm</a>). Programik pobieramy, rozpakowujemy gdziekolwiek, instalujemy i uruchamiamy. Naszym oczom ukazuje się tajemnicze okno w którym nie wiemy co wpisać :P Ale spokojnie, zaraz będziemy wiedzieli. Jedyne co musimy wiedzieć to jakiego JTAG&#8217;a mamy, jeżeli wiemy to szukamy w katalogu &#8222;C:\tmp\openocd-0.4.0-rc2\tcl\interface&#8221; pliku *.cfg odpowiedniego dla naszego JTAG&#8217;a. W moim przypadku to &#8222;jtagkey.cfg&#8221; (Posiadam JTAG&#8217;a projektu <a title="http://www.freddiechopin.info/" href="http://www.freddiechopin.info/">Freddiego Choppina</a>, opartego o Amontec JTAGkey). Otwieramy ten plik i patrzymy co  jest w nim popisane. U mnie wygląda to tak jak na rysunku. Teraz wystarczy przepisać odpowiednie informacje do okienka programu FT_INF. Jak to wygląda u mnie, możecie zobaczyć na screenie. Układ (pole chip) należy wybrać zgodnie ze screenem, Następnie wpisać odpowiednie dane w sekcji &#8222;Vendor ID / Product ID&#8221; zgodnie z plikiem *.cfg. Później klikamy &#8222;&gt;&gt;&#8221; aby dodać nasze urządzenie do list. Musimy jeszcze wskazać pliki &#8222;ftdibus.sys&#8221; oraz &#8222;ftser2k.sys&#8221; które znajdują się w katalogu ze sterownikami, a dokładnie: &#8222;C:\tmp\ftd2xx\i386&#8243; (lub &#8222;C:\tmp\ftd2xx\amd64&#8243; w zależności od architektury).<a href="http://tutro.net/wp-content/uploads/2010/02/FT_INF.png"><img class="size-medium wp-image-26   alignright" style="margin-left: 5px; margin-right: 5px;" title="Okno programu FT_INF" src="http://tutro.net/wp-content/uploads/2010/02/FT_INF-300x201.png" alt="" width="210" height="141" /></a></p>
<p style="text-align: justify;">Ustawiamy także folder &#8222;Output&#8221; najlepiej na &#8222;C:\tmp\ftd2xx&#8221; i klikamy &#8222;Generate Files&#8221;. Program spyta czy nadpisać pliki *.ini, oczywiście się zgadzamy. Po tych operacjach mamy już gotowe sterowniki do swojego JTAG&#8217;a w katalogu &#8222;C:\tmp\ftd2xx&#8221;. Tak, więc podłączamy JTAG&#8217;a i instalujemy stworzone przed chwilą sterowniki. Jeżeli wszystko pójdzie dobrze możemy kontynuować. Kolejnym krokiem będzie już kompilacja.</p>
<h1 style="text-align: justify;">Czas na kompilację</h1>
<p style="text-align: justify;">Ten etap wbrew pozorom jest chyba najprostszy :) Odpalamy więc konsole cygwina (przy instalacji na pewno wepchał nam jakiś skrót do menu start) i przechodzimy do naszego katalogu, a dokładnie do katalogu z OpenOCD wpisując komendę:</p>
<pre style="text-align: justify;">﻿﻿﻿cd /cygdrive/c/tmp/openocd-0.4.0-rc2</pre>
<p style="text-align: justify;">po czym wywołujemy plik konfigurujący komendą:</p>
<pre style="text-align: justify;">./configure --enable-maintainer-mode --disable-werror --disable-shared
--enable-ft2232_ftd2xx --with-ftd2xx-win32-zipdir=/cygdrive/c/tmp/ftd2xx</pre>
<p style="text-align: justify;">chwile to potrwa, więc musimy być cierpliwi. Jeżeli w czasie konfigurowania dostaniemy komunikat taki jak na screenie,</p>
<p style="text-align: justify;">
<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/02/error.png"><img class="size-full wp-image-27 aligncenter" title="Błąd podczas konfiguracji" src="http://tutro.net/wp-content/uploads/2010/02/error.png" alt="" width="644" height="95" /></a></p>
<p style="text-align: justify;">
<p style="text-align: justify;">oznacza to, że nie zainstalowaliśmy dobrze sterowników przed rozpoczęciem procesu konfigurowania (to muszą być dokładnie te same sterowniki &#8211; ta sama wersja biblioteki &#8211; te które instalujemy i te które używamy do kompilacji) Natomiast jeżeli wszystko poszło jak należy odpalamy komendę:</p>
<pre style="text-align: justify;">make</pre>
<p style="text-align: justify;">i znów czekamy :) &#8230; aż się skompiluje. Jeżeli wszystko się uda to w katalogu &#8222;C:\tmp\openocd-0.4.0-rc2\src&#8221; znajdziemy plik &#8222;openocd.exe&#8221;. Teraz wystarczy zebrać wszystko razem i mamy gotowe skompilowane OpenOCD. No więc do dzieła. Tworzymy sobie gdzieś katalog &#8222;OpenOCD0.4.0rc2&#8243;, w nim tworzymy katalog &#8222;bin&#8221; do którego kopiujemy plik &#8222;openocd.exe&#8221;, oraz pliki &#8222;cygwin1.dll&#8221;, oraz „cyggcc_s-1.dll” z katalogu &#8222;bin&#8221; cygwina (najczęściej C:\cygwin\bin), aby uniezależnić się od cygwina. Dodatkowo do katalogu &#8222;OpenOCD0.4.0rc2&#8243; kopiujemy całą zawartość folderu &#8222;C:\tmp\openocd-0.4.0-rc2\tcl&#8221;. To wszystko. Katalog &#8222;OpenOCD0.4.0rc2&#8243; zawiera teraz wszystko co jest potrzebne do działania OpenOCD. Wystarczy go przenieść w dowolne miejsce na dysku.</p>
<h1 style="text-align: justify;">A teraz podpinamy do Eclipse</h1>
<p style="text-align: justify;">Zanim zaczniemy proponuję postawić sobie Eclipse&#8217;a i CodeSourcery zgodnie z opisem we wcześniejszym wpisie (<a title="Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3" href="http://tutro.net/elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/" target="_self">Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3</a>). Jeżeli mamy już postawione IDE z podpiętym kompilatorem, to możemy zabierać się za kolejny ważny element Toolchain&#8217;u, czyli Debugger.</p>
<p style="text-align: justify;">Pierwszym krokiem jest instalacja odpowiednich wtyczek do Eclipse&#8217;a pozwalających używać debuggera sprzętowego i OpenOCD. Pierwsza z nich to Eclipse C/C++ GDB Hardware Debugging. Aby go zainstalować wybieramy Help-&gt;Install New Software.Możemy go pobrać z oficjalnego update site&#8217;u Eclipse&#8217;a. Aby to zrobić wpisujemy w pole &#8222;Work with&#8221; http://download.eclipse.org/tools/cdt/releases/galileo i zaznaczamy plugin, aby go zainstalować (znajduje się on w kategorii &#8222;CDT Optional Features&#8221;). Następnie postępujemy zgodnie ze wskazówkami, co praktycznie sprowadza się do klikania &#8222;Next&#8221;. Kolejny plugin to Zylin Embedded CDT .Update site tego plugina to:<em> http://opensource.zylin.com/zylincdt</em>. Zaznaczamy plugin i kontynuujemy instalacje. Oczywiście godzimy się na niepodpisane oprogramowanie i restartujemy eclipse zgodnie z sugestią.</p>
<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/03/external_tools_1.png"><img class="size-full wp-image-34 alignleft" title="External Tools  Configuration" src="http://tutro.net/wp-content/uploads/2010/03/external_tools_1.png" alt="" width="253" height="161" /></a>Gdy mamy zainstalowane obie wtyczki możemy przystąpić do podpinania OpenOCD. Otwieramy sobie jakiś projekt (proponuję przykładowy z wpisu <a title="Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3" href="../elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/" target="_self">Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3</a>), lub tworzymy nowy. Następnie klikamy w menu &#8222;Run-&gt;External Tools-&gt;External Tools Configuration&#8230;&#8221;. Wybieramy &#8222;New launch configuration&#8221;, by dodać nowe narzędzie. Następnie musimy wpisać nazwę narzędzia (np. OpenOCD), ścieżkę do pliku openocd.exe, oraz parametry z jakimi zostanie odpalony program. Jako parametry musimy przede wszystkim podać pliki konfiguracyjne, odpowiednie dla mikrokontrolera z którym się łączony, oraz JTAG&#8217;a. Wpisane przeze mnie parametry przedstawiam na screen&#8217;ie. Na pozostałych zakładkach nie musimy nic zmieniać. Gotowe :) Teraz podłączamy JTAG&#8217;a do komputera i do debugowanego układu i odpalamy narzędzie np. poprzez menu &#8222;Run-&gt;Configuration Tools&#8221;. Jeżeli wszystko się powiedzie powinniśmy w konsoli zobaczyć komunikat podobny jak na screen&#8217;ie.<a href="http://tutro.net/wp-content/uploads/2010/03/console_output.png"><img class="size-full wp-image-35 alignright" title="Console output" src="http://tutro.net/wp-content/uploads/2010/03/console_output.png" alt="" width="316" height="126" /></a></p>
<p style="text-align: justify;">Jeżeli OpenOCD już działa możemy się zabrać za stworzenie odpowiedniej konfiguracji do debugowania. Klikamy &#8222;Run-&gt;Debug configurations&#8230;&#8221;. Tworzymy nową konfigurację, podobnie jak poprzednio (ja nadałem jej nazwę gbd(flash)). Następnie ustawiamy odpowiednie parametry. Na zakładce &#8222;Main&#8221; wybieramy projekt, który chcemy debugować klikając &#8222;Browse&#8230;&#8221; obok pola &#8222;Project&#8221;. Przechodzimy do zakładki &#8222;Debugger&#8221;, gdzie musimy podać ścieżkę do gdb pochodzącego z Code Sourcery, oraz zmienić numer portu na 3333. Później ustawiamy odpowiednie opcje na zakładce &#8222;Startup&#8221; zgodnie ze screen&#8217;em.</p>
<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/03/debug_main.png"><img class="size-medium wp-image-37 alignleft" title="debug_main" src="http://tutro.net/wp-content/uploads/2010/03/debug_main-300x191.png" alt="" width="168" height="107" /></a><a href="http://tutro.net/wp-content/uploads/2010/03/debug_debugger.png"><img class="size-medium wp-image-36 alignleft" title="debug_debugger" src="http://tutro.net/wp-content/uploads/2010/03/debug_debugger-300x191.png" alt="" width="168" height="107" /></a><a href="http://tutro.net/wp-content/uploads/2010/03/debug_startup.png"><img class="size-medium wp-image-38 alignleft" title="debug_startup" src="http://tutro.net/wp-content/uploads/2010/03/debug_startup-300x191.png" alt="" width="168" height="107" /></a></p>
<p style="text-align: justify;">Następnie tworzymy identyczną konfigurację tylko dopisujemy jeszcze komendę load na zakładce &#8222;Startup&#8221; w polu poniżej opcji &#8222;Halt&#8221;. Ta konfiguracja pozwoli nam załadować program do pamięci mikrokontrolera.</p>
<p style="text-align: justify;">Aby debugować program musimy najpierw włączyć OpenOCD, robimy to jednorazowo. Później wybieramy odpowiednia konfigurację debugowania &#8211; samo debugowanie, lub debugowania z ładowaniem programu do pamięci. Samego debugowania w Eclipse nie będę opisywał, gdyż można znaleźć wiele informacji na ten temat w internecie.</p>
<h4 style="text-align: justify;">Źródła:</h4>
<ul style="text-align: justify;">
<li><a title="http://www.plugcomputer.org/plugwiki/index.php/Main_Page" href="http://www.plugcomputer.org/plugwiki/index.php/Main_Page" target="_blank">http://www.plugcomputer.org/plugwiki/index.php/Main_Page</a></li>
<li><a title="http://forum.sparkfun.com/viewtopic.php?t=11221&amp;postdays=0&amp;postorder=asc&amp;start=0&amp;sid=89cf3e590ac8185041bdbcc7ec2732e4" href="http://forum.sparkfun.com/viewtopic.php?t=11221&amp;postdays=0&amp;postorder=asc&amp;start=0&amp;sid=89cf3e590ac8185041bdbcc7ec2732e4" target="_blank">http://forum.sparkfun.com/viewtopic.php?t=11221&amp;postdays=0&amp;postorder=asc&amp;start=0&amp;sid=89cf3e590ac8185041bdbcc7ec2732e4</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tutro.net/elektronika/kompilacja-openocd-i-podpiecie-do-eclipse-cdt/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Integracja Eclipse CDT z CodeSourcery dla ARM Cortex-M3</title>
		<link>http://tutro.net/elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/</link>
		<comments>http://tutro.net/elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 03:17:58 +0000</pubDate>
		<dc:creator>kwesoly</dc:creator>
				<category><![CDATA[Elektronika]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[code sourcery]]></category>
		<category><![CDATA[Cortex]]></category>
		<category><![CDATA[Cortex-M3]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://tutro.net/?p=13</guid>
		<description><![CDATA[Dzisiaj gościnny wpis mojego dobrego kolegi &#8211; Krzyśka. Dzięki wielkie za chęci i poświęcony czas. Jestem przekonany, że artykuł ten zaoszczędzi wielu nieprzespanych nocy wszystkim amatorom  Cortex&#8217;ów. Wprowadzenie Celem dzisiejszego wpisu jest prześledzenie i opisanie kroków potrzebnych do konfiguracji Środowiska Eclipse do współpracy z pakietem CodeSourcery Lite. Efektem tego połączenia jest w pełni darmowe (open-source) [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/02/eclipse1.jpg"><img class="alignleft size-full wp-image-33" title="eclipse" src="http://tutro.net/wp-content/uploads/2010/02/eclipse1.jpg" alt="" width="143" height="83" /></a>Dzisiaj gościnny wpis mojego dobrego kolegi &#8211; <a title="http://kwesoly.net" href="http://kwesoly.net" target="_blank">Krzyśka</a>. Dzięki wielkie za chęci i poświęcony czas. Jestem przekonany, że artykuł ten zaoszczędzi wielu nieprzespanych nocy wszystkim amatorom  Cortex&#8217;ów.</p>
<h3 style="text-align: justify;">Wprowadzenie</h3>
<p style="text-align: justify;">Celem dzisiejszego wpisu jest prześledzenie i opisanie kroków  potrzebnych do konfiguracji Środowiska Eclipse do współpracy z pakietem  CodeSourcery Lite. Efektem tego połączenia jest w pełni darmowe  (open-source) środowisko programistyczne.</p>
<p style="text-align: justify;"><span id="more-13"></span></p>
<h3 style="text-align: justify;">Instalacja Code Sourcery Lite</h3>
<p style="text-align: justify;">Na stronie http://www.codesourcery.com/ znajdujemy wersję Lite  pakietu.  Ponieważ nawigacja w poszukiwaniu pakietu w wersji darmowej  jest jak zwykle &#8222;super łatwa&#8221; podaję bardziej bezpośredni link do  pobierania:  http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite</p>
<p style="text-align: justify;">Po pobraniu i uruchomieniu aplikacji (w moim przypadku  arm-2009q3-68-arm-none-eabi.exe) . W przypadku pakietu Lite wybór wersji  (Typical/Custom etc.) jest bez znaczenia. Warto przy wybieraniu ścieżki  unikać spacji &#8211; proponowane Program Files sprawia problemy w najmniej  przewidywalnym momencie. Instalator proponuje nam również dodanie  swojego katalogu binarek do zmiennej PATH &#8211; warto mu na to pozwolić,  gdyż i tak konieczna będzie jego obecność w tej zmiennej. Alternatywa  jest ręczna modyfikacja PATH za pomocą ustawień komputera, lub  stworzenie pliku bat który modyfikuje PATH i uruchamia nasze środowisko.  Biorąc pod uwagę iż pakiet CodeSourcery składa się z plików nie  wprowadzających konfliktów nazw (np. cs-make, arm-none-eabi-gcc)  zostawienie tego zadania instalatorowi to najlepsze wyjście. Program  tworzy niezliczoną ilość ikon, więc najlepiej skierować te zapędy w  stronę menu start :)</p>
<h3 style="text-align: justify;">Instalacja Eclipse</h3>
<p style="text-align: justify;">Kolejny krok to pobranie Eclipse IDE ze zintegrowanymi narzędziami do  programowania w C/C++. Dokładniejszy opis instalacji tego programu  (m.in. instalacja wymaganej Javy, dotyczący użycia MinGW, a nie  CodeSourcery) w środowisku Windows można znaleźć np. w tym wpisie: <a title="Eclipse CDT – środowisko C/C++" rel="bookmark" href="http://kwesoly.net/programowanie/cpp/eclipse-cdt/" target="_blank">Eclipse  CDT – środowisko  C/C++</a> (nie należy się nim w tym przypadku dokładnie kierować,  aczkolwiek pozwala poznać podstawowe informacje na temat konfiguracji  wspomnianego IDE). W tym przypadku interesuje nas tylko środowisko, więc  po prostu pobieramy i rozpakowujemy w wybrane miejsce. Po rozpakowaniu  eclipse znalazł się w C:\eclipse, a skrót do eclipse.exe utworzyłem dla  wygody na Pulpicie. Po uruchomieniu zostaniemy poproszeni o wybór  Workspace &#8211; tradycyjnie przypominam o unikaniu spacji.</p>
<h3 style="text-align: justify;">Wtyczka zarządzająca projektami</h3>
<p style="text-align: justify;">Za pomocą wymienionych wyżej narzędzi można już tworzyć projekty &#8211;  jednak ręczna edycja plików makefile nie jest najwygodniejszym  rozwiązaniem. Dlatego kolejnym etapem jest instalacja wtyczki która  będzie je automatycznie tworzyć i zarządzać projektem.</p>
<p style="text-align: justify;">Z pośród niewielu istniejących rozwiązań wybrałem GNU ARM Eclipse  plugin. Aby go zainstalować wybieramy Help-&gt;Install New Software.  Update site tego plugina to:  http://gnuarmeclipse.sourceforge.net/updates, taki adres wklejamy w  &#8222;Work with&#8221;. Należy zwrócić uwagę na odznaczenie &#8222;Group items by  category&#8221;, ponieważ nasz plugin nie ma przypisanej kategorii. Zaznaczamy  plugin  kontynuujemy instalacje. Oczywiście godzimy się na niepodpisane  oprogramowanie i restartujemy eclipse zgodnie z sugestią.</p>
<h3 style="text-align: justify;">Tworzenie pierwszego projektu</h3>
<p style="text-align: justify;">Projekty dla platformy ARM są typowymi projektami C/C++. Wybieramy  więc File-&gt;New-&gt;C++ Project. Po wpisaniu dowolnej nazwy wybieramy  typ projektu &#8211; ARM Cross Target Application-&gt;Empty Project. W polu  Toolchains wybieramy nasze Sourcery G++ Lite. Kolejnym etapem jest  wybranie dwóch możliwych wersji w których nasz program będzie  kompilowany &#8211; debug, przystosowanej do pracy z JTAG i debugowania na  platformie docelowej, i release, działającej z pełną wydajnością ale  pozbawionej powyższych możliwości.</p>
<p style="text-align: justify;">Kolejnym etapem jest zebra</p>
<p style="text-align: justify;">nie podstawowych elementów potrzebnych do kompilacji i linkowania. W zależności od użytego mikrokontrolera mogą występować różnice w poniższych plikach. Te zostały przygotowane dla uC <em>STM32F103RB.</em></p>
<ul style="text-align: justify;">
<li> skryptu linkera (pliku o rozszerzeniu *.ld, zawierającym informacje  jak &#8222;poskładać&#8221; kolejne pliki *.o z kompilatora w nasz plik wynikowy &#8211;  czyli elf /hex)<br />
plik ten zawiera informacje o rozmieszczeniu danych w pamięci, oraz  przede wszystkim informacje o samej pamięci &#8211; początek, koniec pamięci  RAM, ROM etc.<br />
Obszerną dokumentacje możemy znaleźć w plikach zainstalowanych z  CodeSourcery (./share/doc/arm-arm-none-eabi/pdf/ld.pdf)</li>
<li> pliku startup (czyli pliku który po skompilowaniu będzie  uruchamiany po zresetowaniu procesora. Jego zawartość to Reset_Handler,  zajmujący się inicjalizacją zmiennych, kopiowaniem danych FLASH-&gt;RAM  dla zmiennych zainicjalizowanych, oraz uruchomieniem konstruktorów  obiektów globalnych (tylko C++), funkcji main, a na koniec destruktorów  obiektów globalnych(tylko C++)).<br />
Z uwagi na złożoność asemblera procesorów Cortex-M3 warto skorzystać z  gotowego pliku &#8211; np. zamieszczonego tutaj, stworzonego przez Freddiego  Chopina.</li>
<li>Informacje o położeniu głównego stosu i o wektorach przerwań<br />
Mikrokontroler  Cortex-M3 zaraz po uruchomieniu ładuje do rejestru MSP (Main Stack Pointer) wartość spod adresu  0&#215;00000000.  Kolejna niezbędna informacja to adres funkcji inicjalizującej &#8211; Reset_Handler pochodzącej z naszego startup&#8217;u. Adres ten musi znaleźć się pod adresem 0&#215;00000004. Pozostałe adresy w tym wektorze to procedury obsługi przerwań. W naszym przypadku wykorzystaliśmy plik vectors.c, również stworzony  przez Freddiego. Poprawiono tylko nazwy metod &#8211; teraz są w pełni  zgodne (-; z standardem CMSIS.</li>
</ul>
<p style="text-align: justify;">Przydatne są rownież biblioteki &#8211; przede wszystkim CMSIS zawierający define&#8217;y rejestrów naszego mikrokontrolera, oraz biblioteka peryferiów STM32F10x_StdPeriph_Lib</p>
<p style="text-align: justify;">Wszystkie powyższe pliki można pobrać klikając tutaj &#8211; <a href="http://tutro.net/wp-content/uploads/2010/02/ProjectBasicFiles_Cortex-M3-STM32.zip">Podstawowe pliki  projektu ARM Cortex-M3 STM32</a></p>
<h3 style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/02/empty_stm32_project.png"><img class="size-thumbnail wp-image-16 alignleft" title="Pusty projekt na  STM32" src="http://tutro.net/wp-content/uploads/2010/02/empty_stm32_project-150x150.png" alt="" width="150" height="150" /></a></h3>
<p style="text-align: justify;">W tym momencie zakładam, że w Eclipse wyświetla nam się projekt C++, pliki po pobraniu zostały rozpakowane i przeciągnięte do naszego projektu. W tej chwili okno mojego projektu wygląda tak jak na obrazkach po lewej. Oczywiście samo dodanie plików do projektu to zbyt mało aby móc zacząć pracować nad samym programem. W celu czysto doświadczalnym w tej chwili stwórzmy plik main.cpp (File-&gt;New-&gt;Source File, zwróćmy uwagę aby umieścić ten plik w głównym katalogu projektu). Jedynym plikiem związanym z naszymi bibliotekami jaki będziemy include&#8217;ować jest plik stm32f10x_conf.h, znajdujący się w głównym katalogu projektu. Za jego pośrednictwem uzyskamy dostęp do całej reszty biblioteki pobranej ze <a title="Strona z STM32F10x_StdPeriph_Lib" href="http://www.st.com/mcu/familiesdocs-110.html#Firmware">strony ST</a>. Podsumowując, stworzony plik main cpp wygląda teraz tak:</p>
<pre style="text-align: justify;">/*
 * Podstawowy plik wykorzystujący biblioteki dla STM32
 */
#include
#include 

int main() {

	return 0;
}</pre>
<p style="text-align: justify;"><a href="http://tutro.net/wp-content/uploads/2010/02/empty_stm32_project2.png"><img class="size-thumbnail wp-image-17 alignleft" title="Pusty projekt na  STM32 (Pokazana zawartość)" src="http://tutro.net/wp-content/uploads/2010/02/empty_stm32_project2-150x150.png" alt="" width="150" height="150" /></a>Jego kompilacja generuje błędy, związane z includowaniem plików nie podając ich pełnych ścieżek. Na szczęście nazwy plików są na tyle jednoznaczne i unikalne ze można je bez obaw dodać do domyślnie w danym projekcie przeszukiwanych ścieżek (odpowiednik przełącznika -I przy kompilacji). Ponieważ przyszłe projekty chcemy stworzyć poprzez proste skopiowanie bieżącego &#8222;szablonu&#8221;, warto podać ścieżki w takiej formie aby nie nastręczało to trudności. W tym celu często będziemy korzystać z ręcznie wpisanych ścieżek, gdyż te uzyskane poprzez wybranie odpowiednich katalogów zawierają nazwę projektu.</p>
<p style="text-align: justify;">Aby edytować wspomniane ścieżki oraz zmieniać ustawienia kompilatora/linkera należy kliknąć w Project-&gt;Properties, następnie wybrać C/C++ Build  -&gt; Settings. Na wstępie z bieżącej konfiguracji Debug warto  przełączyć się w [ All configurations ], pozwoli to nie dublować opisanej niżej pracy.</p>
<ul style="text-align: justify;">
<li>Ustawienia preprocesora C. W zakładce ARM Sourcery Windows GCC C Compiler-&gt;Preprocessor dodajemy symbole (plus przy opcjach -D): USE_STDPERIPH_DRIVER (jeśli chcemy używać bibliotek stm32) oraz STM32F10X_MD (obowiązkowo, definiujemy rodzaj mikrokontrolera &#8211; Medium Density Line w tym wypadku). Ustawienia które tu podajemy umożliwiaja nie edytowanie bibliotecznego pliku stm32f10x.h.</li>
<li>Ustawienia kompilatora C. W zakładce ARM Sourcery Windows GCC C Compiler-&gt;Directories dodajemy (każdą osobno) następujace ścieżki:<br />
&#8222;${CWD}/../&#8221;, &#8222;${CWD}/../Libraries/CMSIS/Core/CM3&#8243; oraz &#8222;${CWD}/../Libraries/STM32F10x_StdPeriph_Driver/inc&#8221;. Zmienna CWD czyli Current Working Directory to przy kompilacji zawsze katalog Debug/Release projektu, więc taka konstrukcja pozwala zawsze skorzystać z właściwego katalogu.<br />
Z kolei w zakładce ARM Sourcery Windows GCC C Compiler-&gt;Optimization zaznaczamy Function sections (-ffunction-sections) i Data Sections  (-fdata-sections). Moja wersja wtyczki posiada błąd &#8211; zamiast Data Sections powtórzono Function Sections.</li>
<li>Powyższe kroki aplikujemy również dla kompilatora C++ (analogiczne zakładki w kategorii ARM Sourcery Windows GCC C++ Compiler)</li>
<li>Skrypt linkera. Plik ten (stm32f103rb_rom.ld) znajduje się w katalogu Setup. Aby był używany  Po przełączeniu wybieramy ARM Sourcery Windows GCC C++ Linker -&gt; General i w pole &#8222;Script file -T&#8221; wpisujemy wpisujemy &#8222;..\Setup\stm32f103rb_rom.ld&#8221;. Dodatkowo zaznaczamy &#8222;Remove unused sections (-XLinker &#8211;gc-sections)&#8221; (pozwoli to usunąć zbędne sekcje które powstają z każdej kompilowanej a nie używanej funkcji).</li>
</ul>
<p style="text-align: justify;">Po zastosowaniu powyższych ustawień będzie można budować obie wersje projektu. Tworzenie przy kompilacji sekcji dla każdej funkcji, i usuwanie zbędnych przy linkowaniu gwarantuje nam rozsądną wielkość pliku wynikowego, także w trybie Debug &#8211; dzięki temu bez problemu przeprowadzimy testy za pomocą JTAGa na docelowym układzie.</p>
<p style="text-align: justify;">Po zastosowaniu powyższych ustawień budowanie projektu (Ctrl+B) powinno przebiec bez zakłóceń.</p>
<p style="text-align: justify;">Pliki projektu wraz z ustawieniami, do użycia np. na innym komputerze można wyeksportować. Wybieramy File-&gt;Export.  Następnie zaznaczamy General-&gt;Archive File i przechodzimy dalej. Zgodnie z własnym uznaniem wybieramy nazwę i rodzaj tworzonego archiwum, po czym kończymy eksport.</p>
<h3 style="text-align: justify;">Podsumowanie</h3>
<p style="text-align: justify;">Stworzyliśmy szablon projektu, integrując pliki dostarczone przez STMicroelectronic, z plikami z strony <a href="http://www.freddiechopin.info">www.freddiechopin.info</a>. Takie połączenie to solidna podstawa do budowania dowolnej wielkości aplikacji an platformę STM32. Gotowy szablon można pobrać stąd: <a href="http://tutro.net/wp-content/uploads/2010/02/stm32f103RB_template.zip">Szablon projektu dla Cortex-M3 STM32 F103RB</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1531px; width: 1px; height: 1px; text-align: justify;">&#8222;${CWD}/../</div>
]]></content:encoded>
			<wfw:commentRss>http://tutro.net/elektronika/integracja-eclipse-cdt-z-codesourcery-dla-arm-cortex-m3/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

