Skocz do zawartości
Zaloguj się, aby obserwować  
Elvis

[Kurs] Kurs programowania ARM cz.02 - kompilator

Pomocna odpowiedź

Poprzednia lekcja

Lekcja 2 - Kompilator

Następna lekcja

Do kompilacji programów będziemy wykorzystywać zestaw programów dostępny pod nazwą WinARM. Bezpośredni link do wersji 20060606 wykorzystywanej w kursie znajduje się tutaj:

http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/WinARM-20060606.zip (95MB).

WinARM podobnie jak WinAVR bazuje na darmowym (licencja GNU) kompilatorze GCC. Kursy dotyczące gcc przydadzą się również w przypadku WinARM, więc osoby zainteresowane pogłębianiem wiedzy o działaniu kompilatora zachęcam do poszukiwania informacji o gcc dostępnych w internecie.

Instalacja

Archiwum WinARM-20060606.zip zawiera folder WinARM. W przykładach zakładam, że rozpakowujemy archiwum w katalogu głównym dysku C, czyli powstaje folder C:\WinARM, a w nim wszystkie dostarczone programy.

Zanim przystąpimy do pracy musimy skonfigurować zmienne systemowe (ścieżki dostępu). Opis będzie dotyczył Windows XP, jednak w nowszych systemach konfiguracja powinna przebiegać podobnie. Najpierw sprawdzamy, czy na komputerze jest już zainstalowany program „make”. Jeśli jest może to powodować problemy z kompilacją. Warto przed instalacją sprawdzić, czy program już jest, żeby w razie problemów łatwiej było ustalić ich przyczynę.

W celu sprawdzenia obecności programu uruchamiamy okienko wiersza poleceń klikając

Start->Wszystkie programy->Akcesoria->Wiersz polecenia

W okienku wpisujemy „make” i naciskamy enter. Powinien pojawić się komunikat „Nazwa 'make' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy”. Jeśli „make” jest już zainstalowany zobaczymy komunikat podobny do następującego:

Jeśli make nie ma na komputerze dalsza instalacja powinna przebiegać bez problemu. Jeśli jest, czasem mogą pojawić się problemy z kompilacją. Zamykamy okienko wiersza poleceń. Aby system mógł odnaleźć nasz kompilator, do ścieżki systemowej musimy dodać fragment:

;C:\WinARM\utils\bin;C:\WinARM\bin

Otwieramy panel sterowania (menu Start->panel sterowania), a w nim wybieramy ikonkę „System”. W oknie właściwości systemu wybieramy zakładkę „Zaawansowane” i klikamy przycisk „zmienne systemowe”.

W nowo otwartym okienku odnajdujemy zmienną PATH:

Wybieramy ją i klikamy Edytuj.

Następnie do wartości zmiennej dopisujemy: ;C:\WinARM\utils\bin;C:\WinARM\bin

Ważne jest, aby nie pominąć średnika (😉 między kolejnymi fragmentami.

Zamykamy wszystkie okienka i uruchamiamy ponownie wiersz poleceń (jeśli poprzednio zostawiliśmy otwarty, musimy go zamknąć i otworzyć ponownie). Najpierw wpisujemy: make - powinien pojawić się komunkat:

„make: *** No targets specified and no makefile found. Stop.”

Następnie wpisujemy:

arm-elf-c++

powinniśmy otrzymać komunikat „arm-elf-c++: no input files”.

Teraz mamy gotowy do działania kompilator dla procesorów ARM.

Edytor

Do edycji plików będziemy wykorzystywali dostarczony z WinARM edytor „Programers notepad 2”. Jeśli mamy w systemie już zainstalowany ten program, i tak warto skorzystać z dostarczonego w pakiecie, ponieważ ma on skonfigurowane opcje przydatne podczas kompilacji (dodane skróty do uruchamiania kompilatora). Otwieramy folder: C:\WinARM\pn

Znajduje się w nim plik pn.exe. Będziemy często z niego korzystać więc, warto utworzyć skrót na pulpicie do tego programu.

Po uruchomieniu pojawia się okno podobne do następującego:

Pierwszy projekt

Program może być tworzony z wielu plików. Taki zestaw plików określamy jako projekt. Oba terminy będą używane zamiennie. Pobieramy plik Program01.zip (link na dole artykułu), rozpakowujemy do wybranego przez nas folderu i otwieramy wybierając opcję File->Open Project(s)...

Okno powinno wyglądać następująco:

W lewej części widoczne jest okno „Projects” w nim widzimy nasz projekt (nazwany Program01) oraz pliki składowe projektu:

  • program01.c - nasz pierwszy program w C
  • lpc2114.h - plik nagłówkowy z definicjami wykorzystywanymi w naszych programach
  • Makefile - plik z instrukcją jak kompilować nasz program
  • LPC2114-ROM.ld - informacja o rozmieszczeniu danych w pamięci procesora
  • crt0.S - plik z kodem w asemblerze, wykonuje działania systemowe

Nas głównie interesuje pierwszy plik (program01.c), czasem będziemy zaglądać do pliku lpc2114.h (ale nie modyfikować go), plik Makefile jest interesujący głównie gdy tworzymy nowy projekt.

Kompilacja i programowanie

Przed kompilacją otwieramy plik program01.c (to ważne!).

Następnie wybieramy z menu Tools wybrać opcję „[WinARM_C] make all” (można też nacisnąć Ctrl+F7). W oknie Output (widocznym na dole ekranu) pojawią się komunikaty kompilatora. Jeśli wszystko przebiegnie prawidłowo na końcu będzie:

Errors: none
-------- end --------


> Process Exit Code: 0
> Time Taken: 00:02

Co oznacza, że nasz program został poprawnie skompilowany. Czas wgrać nasz program do procesora i zobaczyć jak działa.

Do programowania będziemy używać łącza RS232 oraz oprogramowania dostarczonego z WinARM. Kabel RS232 podłączamy do gniazda COM0 płytki ZL1ARM. Otwieramy plik Makefile i odszukujemy fragment:

LPC21ISP = lpc21isp_beta
LPC21ISP_PORT = com1
LPC21ISP_BAUD = 115200
LPC21ISP_XTAL = 12000

Tutaj jest podana konfiguracja portu. Jeśli zamiast COM1 wykorzystujemy inny port, należy go zmienić. Jak sprawdzić który port COM mamy podłączony do komputera? W Panelu Sterowania wybieramy System, a następnie zakładkę Sprzęt. Klikamy przycisk „Manager urządzeń” i szukamy opcji „Porty (COM i LPT). U mnie dostępny jest port COM1.

Gdy ustawimy parametry portu w pliku Makefile, zapisujemy plik i poleceniem „[WinARM_C] make programm” (lub naciskając ctrl+F5) programujemy układ. Pierwszy program jest bardzo prosty - na zamianę zapala i gasi diody LED0 i LED1.

W następnej lekcji zobaczymy, jak działa nasz program.

Czas, który minie do ponownej lekcji proponujemy na zakup (jeśli oczywiście ktoś chce) oraz zapoznanie się z płytką ZL1ARM dostępną w Kamami. Może sami bawiąc się kodem zauważycie, które polecenia powodują konkretne zachowanie modułu?

Przypominamy, że jeśli przy składaniu zamówienia podacie hasło DIODA, dostaniecie 10% rabatu oraz programator gratis!

Problemy i niejasności dotyczące tej części prosimy zadawać w tym temacie.

Autor kursu:

Elvis

Pomoc przy edycji materiałów wideo, formatowaniu i publikacji:

Treker

Program01.zip

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
C:\Documents and Settings\Marek>make

make: *** No targets specified and no makefile found. Stop.

C:\Documents and Settings\Marek>arm-elf-c++

Nazwa 'arm-elf-c++' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrz

ne,
program wykonywalny lub plik wsadowy.

> "C:\WinARM\utils\bin\make" all

-------- begin --------

process_begin: CreateProcess((null), arm-elf-gcc --version, ...) failed.

make (e=2): Nie można odnaleźć określonego pliku.

C:\WinARM\utils\bin\make: *** [gccversion] Error 2

> Process Exit Code: 2

> Time Taken: 00:00

Można coś z tym zrobić?

Udostępnij ten post


Link to post
Share on other sites

Prawdopodobnie miałeś "make" zainstalowany na komputerze przed instalacją WinARM.

Odinstaluje ten program, albo zmień kolejność wyszukiwania w ścieżce dostępu.

Udostępnij ten post


Link to post
Share on other sites

zmieniłem path (miałem make od CBuildera oraz jeszcze WinAVR), to co podałem pokazało się już po. Komputer był uruchomiony ponownie.

Udostępnij ten post


Link to post
Share on other sites

Chyba brakuje ścieżki do kompilatora w zmiennej PATH:

C:\WinARM\utils\bin;C:\WinARM\bin

Udostępnij ten post


Link to post
Share on other sites

C:\WinARM\utils\bin;C\WinARM\bin;d:\program files\miktex 2.7\miktex\bin;%systemroot%\system32;%systemroot%;%systemroot%\system32\wbem;C:\Program Files\MATLAB71\bin\win32;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\Samsung\Samsung PC Studio 3\;C:\Program Files\OpenOCD\0.4.0\bin

to jest mój PATH. Pozostaje tylko miktex (aczkolwiek błąd wskazuje na problem z arm-elf-c++), ale jego nie usunę. Zresztą samo usuwanie innych wpisów czy programów uważam za głupi pomysł - chcąc programować ARMy nie mogę sie bawić w inne programowanie? A co jeśli bym chciał zrobić program w CBuilderze, który by sie komunikował przez COM z ARMem? Musi istnieć jakieś normalne rozwiązanie, w przeciwnym razie WinARM nie nadaje się jako program do nauki i programowania.

Udostępnij ten post


Link to post
Share on other sites

Spokojnie, nie ma obawy, da się mieć kilka kompilatorów. Ja mam C++Builder6, VisualStudio, AVR Studio i jeszcze kilka na raz.

Problem polega na tym, że nie wszystkie mogą być domyślnymi. Większość (jak np. C++ Builder) nie potrzebują ścieżki do plików - IDE poradzi sobie bez nich. Instalator dodaje je, żeby można było kompilować z linii poleceń.

Ważne pytanie, jakich windowsów używasz?

[ Dodano: 23 Lip 10 07:01 ]

Spróbuj z wiersza poleceń uruchomić:

arm-elf-gcc --version

Jak nie zadziała to jeszcze:

c:\winarm\bin\arm-elf-gcc --version

Udostępnij ten post


Link to post
Share on other sites

Dobra, znalazłem błąd, w instrukcji jest błąd pod 5. obrazkiem:

"Następnie do wartości zmiennej dopisujemy: ;C:\WinARM\utils\bin;C\WinARM\bin"

po C brakuje dwukropka, nie zauważyłem przy kopiowaniu. Co nie zmienia faktu, że gryzło się z Borlandem wcześniej 😉 Dzięki za nakierunkowanie.

Biednemu wiatr zawsze wieje w oczy:

> "make.exe" program

You may have to bring the target in bootloader-mode now.

lpc21isp_beta -control program01.hex com5 115200 12000

lpc21isp version 1.37

File program01.hex:

loaded...

converted to binary format...

image size : 460

Synchronizing.................................................................................................... no answer on '?'

make.exe: *** [program] Error 4097

> Process Exit Code: 2

> Time Taken: 01:38

próbowałem nic nie wciskać, wciskać RESET, wciskać RESET i INT1, nic. Dopiero jak zmieniłem BAUD na 38400 to zadziałało. Rada dla innych: jeśli będziecie mieć problem z synchronizacją, zmniejszcie prędkość transmisji.

Dzięki Elvis 🙂

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

W artykule ścieżka już poprawiona.

Udostępnij ten post


Link to post
Share on other sites

Rozpakowałem program tak jak w instrukcji, dodałem ścieżki przeszukiwania, itp.

No i sprawdziłem w cmd czy chodzą polecenia make i arm-elf-c++ i chodzą, ale gdy chcę skompilować program01 podany w przykładzie dostaję takie komunikaty:

> "make.exe" all
MAKE Version 5.2  Copyright (c) 1987, 1998 Inprise Corp.
Error makefile 170: Command syntax error
Error makefile 172: Command syntax error
Error makefile 174: Command syntax error
Error makefile 326: Colon expected
Error makefile 342: Command syntax error
Error makefile 343: Command syntax error
Error makefile 344: Command syntax error
Error makefile 348: Command syntax error
Error makefile 349: Command syntax error
Error makefile 350: Command syntax error
Error makefile 354: Command syntax error
Error makefile 355: Command syntax error
Error makefile 356: Command syntax error
Error makefile 367: Command syntax error
Error makefile 368: Command syntax error
Error makefile 369: Command syntax error
Error makefile 414: Command syntax error
*** 17 errors during make ***

> Process Exit Code: 1
> Time Taken: 00:00

Co z tym zrobić?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...