<?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; code sourcery</title>
	<atom:link href="http://tutro.net/tag/code-sourcery/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>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>18</slash:comments>
		</item>
	</channel>
</rss>

