Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ARM toolchain - tutorial - jak to połączyć?

Freddie Chopin 17 Maj 2009 17:52 125252 374
  • #1 17 Maj 2009 17:52
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Na swojej stronie ( http://www.freddiechopin.info/ ) w dziale Artykuły > ARM umieściłem artykuł pt. "ARM toolchain - tutorial" w którym starałem się zawrzeć kompletny (mam nadzieję) ładania sobie środowiska do ARMów. Zawarte są tam informacje o tym jak połączyć gcc (użyto CodeSourcery) i OpenOCD w Eclipse aby móc szybko i wygodnie tworzyć soft dla procesorów z rdzeniem ARM.

    Jest to oczywiście pierwsza wersja, niewątpliwie niektóre rzeczy można opisać jaśniej lub zilustrować zrzutem ekranowym, więc czekam na komentarze i sugestie (tutaj, pod artykułem w komentarzach lub przez forumlarz kontaktowy na stronie).

    faithfully yours <:

    4\/3!!

    Moderowany przez And!:

    Temat podlinkowany w postach przyklejonych.

    1 29
  • CControls
  • #2 18 Maj 2009 12:51
    sinuh3
    Poziom 17  

    Jeszcze nie czytałem ale już Ci dziękuję serdecznie. Siedzę już od tygodnia nad zrobieniem sobie dobrego środowiska.

    Dodano po 57 [minuty]:

    Ok. Robię krok po kroku to co napisałeś i:

    Cytat:
    C/C++ Build - w zakładce Builder Settings należy odznaczyć opcję Use default build command i do nowo odblokowanego pola tekstowego w zamian make wpisać cs-make - tak właśnie zwie się make.exe pochodzący z pakietu CodeSourcery.


    Tutaj przydałby się obrazek, bo jak większość userów w poniedziałek rano szukałem tej zakładki po lewej stronie.
    Cytat:
    zamian make wpisać cs-make - tak właśnie

    Tutaj miałem chwilową niejasność czy to powinno być 'cs-make' czy 'cs-make-'

    Natomiast tutaj:
    C/C++ Build > Discovery Options w polu tekstowym opisanym jako Compiler invocation command zamiast gcc należy umieścić ścieżkę dostępu do gcc z pakietu CodeSourcery. W przypadku instalacji standardowej będzie to C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\arm-none-eabi-gcc.exe .
    nie wiem gdzie to mam wpisać.
    ARM toolchain - tutorial - jak to połączyć?


    A tutaj dodałbym, że nie elf-parser, tylko GNU-elf-parser bo znowu źle zaznaczyłem i szukałem gdzie te ścieżki można wpisywać;)

    Cytat:
    C/C++ Build > Settings w zakładce Binary Parsers zaznaczyć należy GNU Elf Parser, a następnie - po kliknięciu tej opcji - w polach tekstowych poniżej należy podać ścieżkę do odpowiednich plików pochodzących z pakietu CodeSourcery - w przypadku standardowej instalacji pliki te znajdują się w folderze C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\ ( C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\arm-none-eabi-addr2line.exe , C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\arm-none-eabi-c++filt.exe ).


    Dodano po 2 [godziny] 13 [minuty]:

    To poniżej też nie działa. Pod podanym adresem nie ma żadnych repozytoriów.


    Cytat:
    Drugi z potrzebnych komponentów - Zylin Embedded CDT - wymaga kilku kliknięć więcej. Ponieważ wtyczka ta nie jest częścią standardowo dostępnej palety, należy dodać stronę macierzystą wtyczki do dostępnych źródeł aktualizacji. Aby tego dokonać, w zakładce Available Software należy wybrać opcję Add Site... i wprowadzić adres http://www.zylin.com/zylincdt . Po kliknięciu OK z drzewa będzie można wybrać http://www.zylin.com/zylincdt > Uncategorized > Zylin Embedded CDT. Po kliknięci w Install wtyczka zostania pobrana i zainstalowana.

    1
  • CControls
  • #3 18 Maj 2009 17:29
    Freddie Chopin
    Specjalista - Mikrokontrolery

    sinuh3 napisał:
    Cytat:
    C/C++ Build - w zakładce Builder Settings należy odznaczyć opcję Use default build command i do nowo odblokowanego pola tekstowego w zamian make wpisać cs-make - tak właśnie zwie się make.exe pochodzący z pakietu CodeSourcery.

    Tutaj przydałby się obrazek, bo jak większość userów w poniedziałek rano szukałem tej zakładki po lewej stronie.

    Obrazki kiedyś na pewno dodam [;

    Cytat:
    Cytat:
    zamian make wpisać cs-make - tak właśnie

    Tutaj miałem chwilową niejasność czy to powinno być 'cs-make' czy 'cs-make-'

    Niech będzie, poprawiłem na trochę inne zdanie.

    Cytat:
    Natomiast tutaj:
    C/C++ Build > Discovery Options w polu tekstowym opisanym jako Compiler invocation command zamiast gcc należy umieścić ścieżkę dostępu do gcc z pakietu CodeSourcery. W przypadku instalacji standardowej będzie to C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\arm-none-eabi-gcc.exe .
    nie wiem gdzie to mam wpisać.
    ARM toolchain - tutorial - jak to połączyć?

    Zainstalowałem dopiero dziś najnowsze Eclipse i faktycznie nie ma tam takiej opcji. Poprawiłem.

    Cytat:
    A tutaj dodałbym, że nie elf-parser, tylko GNU-elf-parser bo znowu źle zaznaczyłem i szukałem gdzie te ścieżki można wpisywać;)
    Cytat:
    C/C++ Build > Settings w zakładce Binary Parsers zaznaczyć należy GNU Elf Parser, a następnie - po kliknięciu tej opcji - w polach tekstowych poniżej należy podać ścieżkę do odpowiednich plików pochodzących z pakietu CodeSourcery - w przypadku standardowej instalacji pliki te znajdują się w folderze C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\ ( C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\arm-none-eabi-addr2line.exe , C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin\arm-none-eabi-c++filt.exe ).

    Opcja nazywa się GNU Elf Parser i tak właśnie jest opisana w artykule - nie przesadzajmy, to tekst dla ludzi myślących (;
    Zresztą - dodam chyba do tego pare obrazków, może nawet dziś.

    Cytat:
    To poniżej też nie działa. Pod podanym adresem nie ma żadnych repozytoriów.
    Cytat:
    Drugi z potrzebnych komponentów - Zylin Embedded CDT - wymaga kilku kliknięć więcej. Ponieważ wtyczka ta nie jest częścią standardowo dostępnej palety, należy dodać stronę macierzystą wtyczki do dostępnych źródeł aktualizacji. Aby tego dokonać, w zakładce Available Software należy wybrać opcję Add Site... i wprowadzić adres http://www.zylin.com/zylincdt . Po kliknięciu OK z drzewa będzie można wybrać http://www.zylin.com/zylincdt > Uncategorized > Zylin Embedded CDT. Po kliknięci w Install wtyczka zostania pobrana i zainstalowana.

    No właśnie, czasem niestety stronka z której są do pobrania pliki trochę przymiera /; Próbuj pod adresem http://opensource.zylin.com/zylincdt - teraz to chyba nowy oficjalny adres i tam należy kierować swoje kroki.

    4\/3!!

    1
  • #4 18 Maj 2009 22:58
    sinuh3
    Poziom 17  

    Czy dobrze mi się wydaje, żeby eclipse dobrze działał zainstalowany powinien być Cygwin?

    1
  • #5 18 Maj 2009 23:00
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jest całkowicie zbędny dla każdego z elementów takiego toolchaina. Skąd taki pomysł?

    4\/3!!

    1
  • #6 18 Maj 2009 23:38
    sinuh3
    Poziom 17  

    Kiedyś bawiłem się kombinacją eclipse+cygwin+chyba cygnus + cośtam.
    Teraz dla testu po zainstalowaniu nowych wersji eclipse'a i codesourcery zmieniłem ścieżkę do cygwina, żeby sprawdzić czy bez niego pójdzie i podczas kompilacji mam o taki komunikat:

    Cytat:
    arm-elf-gcc.exe
    Uruchomienie tej aplikacji nie powiodło się, ponieważ nie znaleziono cygintl-3.dll. Ponowne zainstalowanie aplikacji może naprawić ten problem.


    a eclipse wypisuje:

    Cytat:

    **** Build of configuration Default for project Pierwszy ****

    cs-make all
    arm-elf-gcc -M -Wa,-mapcs-32 -mcpu=arm7tdmi -gstabs boot.S > boot.dep.$$; \
    sed 's,\(boot\)\.o[ :]*,\1.o boot.dep : ,g' < boot.dep.$$ > boot.dep; \
    rm -f boot.dep.$$
    arm-elf-gcc -M -Wall -std=gnu99 -Os -mcpu=arm7tdmi -gstabs main.c > main.dep.$$; \
    sed 's,\(main\)\.o[ :]*,\1.o main.dep : ,g' < main.dep.$$ > main.dep; \
    rm -f main.dep.$$
    arm-elf-gcc -M -Wall -std=gnu99 -Os -mcpu=arm7tdmi -gstabs lcd.c > lcd.dep.$$; \
    sed 's,\(lcd\)\.o[ :]*,\1.o lcd.dep : ,g' < lcd.dep.$$ > lcd.dep; \
    rm -f lcd.dep.$$
    Compiling C...
    arm-elf-gcc -c -Wall -std=gnu99 -Os -mcpu=arm7tdmi -gstabs -Wa,-adhlns=lcd.lst lcd.c -o lcd.o
    cs-make: *** [lcd.o] Error -1073741515




    Coś mam ze ścieżkami nieteges?

    Dodano po 9 [minuty]:

    Już wiem tyle, że w makefile'u mam bugi, bo wziąłem go bez pojęcia ze starego projektu.

    Dodano po 10 [minuty]:

    no właśnie:
    Cytat:
    CC = arm-none-eabi-gcc
    CXX = arm-none-eabi-c++
    AR = arm-none-eabi-ar
    CP = arm-none-eabi-objcopy
    OBJDUMP = arm-none-eabi-objdump


    I działa.

    0
  • #7 19 Maj 2009 07:18
    Freddie Chopin
    Specjalista - Mikrokontrolery

    No właśnie [;

    Bez makefile'a, który korzysta WPROST z plików codesourcery, cała ta zabawa jest nic nie warta (;

    4\/3!!

    1
  • #8 27 Maj 2009 11:39
    wladziu22
    Poziom 17  

    Cytat:
    Bez makefile'a, który korzysta WPROST z plików codesourcery, cała ta zabawa jest nic nie warta (;


    Freddie proszę wrzuć tutaj na forum swój plik makefile, który używasz w projekcie (eclipse + oocd + CodeSource).

    1
  • #9 27 Maj 2009 20:49
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jak już pisałem w komentarzach do artykułu - jutro powinien być gotowy przykładowy projekt dla LPC2103, a wraz z nim wszystkie potrzebne pliki, w tym Makefile. Taki sam przykładzik powstaje też dla STM32.

    4\/3!!

    1
  • #10 28 Maj 2009 00:45
    sinuh3
    Poziom 17  

    ...jakby była wola w narodzie, to mogę także podrzucić jakiś miniprojekt na LPC2148 z obsługą LCD. Kawał dobrej roboty z tym toolchainem Freddie.

    1
  • #11 01 Cze 2009 20:35
    wladziu22
    Poziom 17  

    Cytat:
    jutro powinien być gotowy przykładowy projekt dla LPC2103, a wraz z nim wszystkie potrzebne pliki, w tym Makefile.


    Hey Freddie....jak tam postępy z projektem pod lpc2103?

    1
  • #12 01 Cze 2009 20:47
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Tak wiem [;

    Zaraz będzie <: Niestety coraz gorzej u mnie z czasem...

    4\/3!!

    1
  • #13 01 Cze 2009 20:54
    wladziu22
    Poziom 17  

    Ok..czekam.

    A co do czasu.... jeszcze trochę i kobieta mnie zostawi, ponieważ więcej czasu spędzam nad ARM-em (próba uruchomienia lockpick+lpc2103+openocd+eclipse) niż poświęcam jej samej ;-)
    życie...

    1
  • #14 01 Cze 2009 21:22
    Freddie Chopin
    Specjalista - Mikrokontrolery

    OK than...

    Na mojej stronce ( www.freddiechopin.info ) w Download > ARM > Przykłady zamieściłem pierwszy przykładowy kompletny projekt dla LPC2103.

    W paczce znajduje się makefile, skrypt linkera, startup, tablica wektorów i wiele innych fajnych plików <: . W kodzie włączane jest Fast GPIO, MAM, PLL, no i jest miganie diodką. Do tego udało mi się wygenerować przenośne skróty do debuggowania, czyli External Tool z OpenOCD oraz 2x Debug Configuration - jedno które ładuje kod do pamięci, drugie które bazuje na kodzie wrzuconym wcześniej. Do plików wygenerowana dokumentacja w Doxygen w katalogu doc/, która pomoże zrozumieć, o co biega [;

    Całość trzeba rozpakować gdzieś, a następnie zaimportować do swojego Workspace poprzez File > Import > General > Existing Projects into Workspace, a następnie wybrać katalog w którym są wszystkie pliczki (lpc2103_blink_led), rozpakowany z paczki, pamiętając o zaptaszkowaniu opcji "Copy projects into workspace" na dole kolejnego okienka.

    Jak ktoś przetestuje, to dajcie od razu znać z czym jest/może być problem, to naprawimy najszybciej jak się da (;

    Na razie nie piszę newsa na stronie, dodam go jak pliki będą sprawdzone i jak stworzę też taki projekcik dla STM32.

    4\/3!!

    1
  • #15 02 Cze 2009 09:07
    wladziu22
    Poziom 17  

    Dziękuję za projekt i poświęcony czas.

    Zacząłem testować. Moje uwagi na początek:
    - należy wskazać w projekcie ścieżkę do plików addr2line.exe oraz c++filt.exe
    - w katalogu projektu należny stworzyć katalog "out", bo sam nie utworzy się i kompilacja nie przejdzie.
    - za pierwszym razem jak zaimportowałem "workspace" konfiguracje DEBUG i RUN były już dodane, a za drugim razem musiałem dodać te konfiguracje poprzez rozwinięcie listy kolo ikony Debug i wybraniu->"Organize Favorites"->Add..->zaptaszkować przygotowane konfiguracje. Tak samo należy postępować z listą kolo ikony "Run".
    - no i coś mi jeszcze tam krzyczy ale nie mam pojęcia co o co mu chodzi dokładnie. Mam świeżą instalacje XP jak i eclipse+CS+Opeocd0.1.0

    cs-make clean:

    Code:
    **** Clean-only build of configuration Default for project lpc2103_blink_led ****
    

    cs-make clean
    rm -fR ./out/
    process_begin: CreateProcess(NULL, rm -fR ./out/, ...) failed.
    make (e=2): Nie mo¿na odnaleŸæ okreœlonego pliku.

    cs-make: [clean] Error 2 (ignored)


    cs-make all
    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    System nie mo¾e odnale«† okre?lonej ?cie¾ki.
    'Size of modules:'
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o
          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
    ' '
    'Size of target .elf file:'
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf

    1
  • #16 02 Cze 2009 09:49
    Freddie Chopin
    Specjalista - Mikrokontrolery

    wladziu22 napisał:
    - należy wskazać w projekcie ścieżkę do plików addr2line.exe oraz c++filt.exe

    Jak już sam zauważyłeś wcześniej - podana ścieżka i tak jest ignorowana, więc to chyba nie jest konieczne.

    Cytat:
    - w katalogu projektu należny stworzyć katalog "out", bo sam nie utworzy się i kompilacja nie przejdzie.
    - no i coś mi jeszcze tam krzyczy ale nie mam pojęcia co o co mu chodzi dokładnie. Mam świeżą instalacje XP jak i eclipse+CS+Opeocd0.1.0

    Jesteś drugą osobą, która ma taki problem... Nie wiem z czego on wynika... U mnie nigdy nie ma z tym problemu (testowane na 3 kompach i 3 systemach) - make potrafi stworzyć katalog, potrafi też go usunąć (to co jest robione w clean).

    Aby to tymczasowo ominąć trzeba zmienić 2 rzeczy w make:

    Code:

    make_output_dir :
       $(shell mkdir $(OUTPUT_FOLDER) 2>/dev/null)


    na

    Code:

    make_output_dir :
       mkdir out


    oraz

    Code:

    clean:
       -rm -fR $(OUTPUT_FOLDER)


    na

    Code:

    clean:
       cs-rm -fR out


    Niestety po tej przeróbce przed wykonaniem "build all" konieczne jest "clean" - inaczej komenda tworzenia folderu wywali błąd, że folder jest już stworzony... Jakby ktoś wiedział jak to rozwiązać porządnie, to będę bardzo wdzięczny, bo ja nie mam pojęcia /;

    Swoją drogą znalazłem lekki błąd, bo w CodeSourcery rm.exe nazywa się cs-rm.exe [; Wrzucę po południu poprawioną wersję, więc kto już sciągnął to niech sciągnie raz jeszcze gdy wersja pliku będzie już dzisiejsza.

    Cytat:
    - za pierwszym razem jak zaimportowałem "workspace" konfiguracje DEBUG i RUN były już dodane, a za drugim razem musiałem dodać te konfiguracje poprzez rozwinięcie listy kolo ikony Debug i wybraniu->"Organize Favorites"->Add..->zaptaszkować przygotowane konfiguracje. Tak samo należy postępować z listą kolo ikony "Run".

    To chyba jest nie do przejścia - konfiguracje zawsze są dostępne, tyle że poprzez stosowne okno konfiguracji - dopiero gdy uruchomione zostaną choć raz to dostępny jest skrót.

    1
  • #17 02 Cze 2009 11:07
    wladziu22
    Poziom 17  

    Zastąpienie odpowiednich dwóch linii pomoglo czyślic i na nowo tworzyc katalog "out" wraz z plikami wynikowymi. Poniżej efekt:

    cs-make clean :

    Code:
    **** Clean-only build of configuration Default for project lpc2103_blink_led ****
    

    cs-make clean
    cs-rm -fR out


    cs-make all
    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    mkdir out
    'Assembling file: default_handler.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
    ' '
    'Assembling file: startup.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/startup.lst  -MD -MP -MF ./out/startup.d -I .  startup.s -o out/startup.o
    ' '
    'Assembling file: vectors.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/vectors.lst  -MD -MP -MF ./out/vectors.d -I .  vectors.s -o out/vectors.o
    ' '
    'Compiling file: main.c'
    arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/main.lst  -MD -MP -MF ./out/main.d -I .  main.c -o out/main.o
    ' '
    'Linking target: lpc2103_blink_led.elf'
    arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./out/lpc2103_blink_led.map,--cref,--no-warn-mismatch,--gc-sections  out/default_handler.o out/startup.o out/vectors.o out/main.o -lm -o out/lpc2103_blink_led.elf
    ' '
    'Creating extended listing: lpc2103_blink_led.lss'
    arm-none-eabi-objdump -S out/lpc2103_blink_led.elf > out/lpc2103_blink_led.lss
    ' '
    'Creating memory dump: lpc2103_blink_led.dmp'
    arm-none-eabi-objdump -x --syms out/lpc2103_blink_led.elf > out/lpc2103_blink_led.dmp
    ' '
    'Creating IHEX image: lpc2103_blink_led.hex'
    arm-none-eabi-objcopy -O ihex out/lpc2103_blink_led.elf out/lpc2103_blink_led.hex
    ' '
    'Creating binary image: lpc2103_blink_led.bin'
    arm-none-eabi-objcopy -O binary out/lpc2103_blink_led.elf out/lpc2103_blink_led.bin
    ' '
    'Size of modules:'
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o




          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
    ' '
    'Size of target .elf file:'
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf


    Dodano po 7 [minuty]:

    Cytat:
    To chyba jest nie do przejścia - konfiguracje zawsze są dostępne, tyle że poprzez stosowne okno konfiguracji - dopiero gdy uruchomione zostaną choć raz to dostępny jest skrót.

    Ja korzystam zawsze z tej rozwijanej listy kolo ikonki "robaczka" :) lub "play". Poważnie...jak miałem jeszcze stary system i configi....zrobiłem dokładnie tak jak piszesz...import->workspace..etc. to wszystkie ustawienia byly na pierwszym miejscu w tej rozwijanej malej liście. A gdy dzis na nowo przywróciłem obraz systemu i na nowo zainstalowałem openocd+toolchain+eclipse i importowałem workspace to nie było ich tam. Dlatego napisałem to co napisałem powyżej. Taki małe info jakby ktoś miał podobnie i zdziwił się :)

    1
  • #18 02 Cze 2009 11:26
    Freddie Chopin
    Specjalista - Mikrokontrolery

    wladziu22 napisał:
    Zastąpienie odpowiednich dwóch linii pomoglo czyślic i na nowo tworzyc katalog "out" wraz z plikami wynikowymi.

    Pamiętaj, że to jedynie rozwiązanie tymczasowe, bo to nieszczególnie wygodne aby robić make clean przed każdym make all... No i do tego dochodzi jeszcze brak wygodnej konfiguracji katalogu wyjściowego

    Odpowiedz na PMa, to jakoś rozwiążemy ten problem uniwersalnie.

    Swoją drogą, to właśnie doszedłem do tego czemu u mnie zawsze działa, a u ciebie i kumpla nie. U mnie zawsze zainstalowany jest WinAVR i właśnie tam jest pare potrzebnych plików.

    Tak więc tymczasowe rozwiązanie nr 2 to instalacja pakietu WinAVR.

    W najbliższym czasie dojdę do tego co tak naprawdę jest potrzebne i co tak naprawdę nie działa.

    4\/3!!

    1
  • #19 02 Cze 2009 12:33
    wladziu22
    Poziom 17  

    A teraz pojawił się kolejny problem po tych zmianach co do katalogu "out".
    Po połączeniu się z targetem "Run"->openocd...
    A potem "Debug"->gdb(flash)+load
    Otrzymuje:

    zaraz po wybraniu "gdb(flash)+load" w okienku console:

    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    mkdir out
    Podkatalog lub plik out ju¾ istnieje.
    cs-make: *** [make_output_dir] Error 1


    i pojawia się info.box komunikat:
    Code:

    error exist in a required project. continue launch? YES/NO


    ..... ładuje się i mam możliwość pracy krokowej oraz dioda miga.

    Moza ja coś źle robię? Teraz zrobilem tak:
    wpierw: łącze się z targetem Run->openocd
    następnie ładuję: "gdb(flash)".
    następnie po załadowaniu "gdb(flash)" (nie ma komend w oknie disassembly) wyłączam debaging i ładuje: "gdb(flash)+load".
    Zarówno przypadku ładowania "gdb(flas)" jak i "gdb(flas)+load" pojawiają się błędy o których napisałem na wyżej.

    Czy ten program zostaje juz we flash? Pytam bo dioda miga mi jedynie w debagingu.

    Dodano po 18 [minuty]:

    Cytat:
    Odpowiedz na PMa, to jakoś rozwiążemy ten problem uniwersalnie.
    odp poszła na PM.

    Cytat:
    U mnie zawsze zainstalowany jest WinAVR i właśnie tam jest parę potrzebnych plików.

    możliwe, że instalacja pomoże. O AVRach już zdążyłem zapomnieć ;-)

    1
  • #20 02 Cze 2009 12:50
    Freddie Chopin
    Specjalista - Mikrokontrolery

    wladziu22 napisał:
    A teraz pojawił się kolejny problem po tych zmianach co do katalogu "out".
    Po połączeniu się z targetem "Run"->openocd...
    A potem "Debug"->gdb(flash)+load

    No właśnie [; Przed uruchomieniem debuggingu jeśli projekt nie jest "z-build-owany" to Eclipse robi to sam. Niestety z obecnymi ustawieniami nie jest możliwe zrobienie tego, gdy katalog taki już istnieje. Wyczyść projekt przed debuggowaniem (make clean) albo jeśli zrobisz build all ręcznie, to też będzie ok. Jeśli projekt skompilowany był wcześniej, ale zresetowałeś Eclipse, to też konieczna jest ponowna kompilacja.

    Cytat:
    następnie po załadowaniu "gdb(flash)"

    gdb (flash) debugguje przy uzyciu programu który załadowany był wcześniej. Pierwszy powinien być uruchamiany gdb (flash) + load, które wgra stosowny kod do procka.

    Cytat:
    Czy ten program zostaje juz we flash? Pytam bo dioda miga mi jedynie w debagingu.

    Jeśli uruchomione jest OpenOCD, to gdy raz zatrzymasz rdzeń, to on później sam nie ruszy. Zamknij wszystko, odłącz JTAGa i zresetuj całość, a diodka będzie migać dalej sama.

    4\/3!!

    1
  • #21 02 Cze 2009 14:47
    wladziu22
    Poziom 17  

    Wpierw potwierdzę to co napisałeś o WinAVR. Zainstalowałem najnowszą wersję. Restart kompa. Zrobiłem clean-a w eclipsie. Wrociłaem do początkowych ustawień makefila. Zrobiłem build-a. Otrzymałem:

    Code:

    **** Build of configuration Default for project lpc2103_blink_led ****

    cs-make all
    Assembling file: default_handler.s
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
     
    Assembling file: startup.s
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/startup.lst  -MD -MP -MF ./out/startup.d -I .  startup.s -o out/startup.o
     
    Assembling file: vectors.s
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/vectors.lst  -MD -MP -MF ./out/vectors.d -I .  vectors.s -o out/vectors.o
     
    Compiling file: main.c
    arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/main.lst  -MD -MP -MF ./out/main.d -I .  main.c -o out/main.o
     
    Linking target: lpc2103_blink_led.elf
    arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./out/lpc2103_blink_led.map,--cref,--no-warn-mismatch,--gc-sections  out/default_handler.o out/startup.o out/vectors.o out/main.o -lm -o out/lpc2103_blink_led.elf
     
    Creating extended listing: lpc2103_blink_led.lss
    arm-none-eabi-objdump -S out/lpc2103_blink_led.elf > out/lpc2103_blink_led.lss
     
    Creating memory dump: lpc2103_blink_led.dmp
    arm-none-eabi-objdump -x --syms out/lpc2103_blink_led.elf > out/lpc2103_blink_led.dmp
     
    Creating IHEX image: lpc2103_blink_led.hex
    arm-none-eabi-objcopy -O ihex out/lpc2103_blink_led.elf out/lpc2103_blink_led.hex
     
    Creating binary image: lpc2103_blink_led.bin
    arm-none-eabi-objcopy -O binary out/lpc2103_blink_led.elf out/lpc2103_blink_led.bin
     
    Size of modules:
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o
          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
     
    Size of target .elf file:
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf
     


    Dodano po 12 [minuty]:

    Cytat:

    No właśnie [; Przed uruchomieniem debuggingu jeśli projekt nie jest "z-build-owany" to Eclipse robi to sam. Niestety z obecnymi ustawieniami nie jest możliwe zrobienie tego, gdy katalog taki już istnieje. Wyczyść projekt przed debuggowaniem (make clean) albo jeśli zrobisz build all ręcznie, to też będzie ok. Jeśli projekt skompilowany był wcześniej, ale zresetowałeś Eclipse, to też konieczna jest ponowna kompilacja.


    Przed każdym otwarciem sesji openocd oraz załadowaniem gdb(flash)+load/grb(flash), clean-owalem oraz build all -owalem projekt.

    Dodano po 8 [minuty]:

    Cytat:
    Jeśli uruchomione jest OpenOCD, to gdy raz zatrzymasz rdzeń, to on później sam nie ruszy. Zamknij wszystko, odłącz JTAGa i zresetuj całość, a diodka będzie migać dalej sama.

    Otwieram sesje openocd, ładuję "gdb(flash)+load", przerywam debugging ikona "Terminate". Przerywam sesje openocd ikona "Terminate", wyłączam eclipse, odłączam JTAG od złącza JTAG procesora, wyłączam i włączam napięcie zasilające i dioda nie mruga :(
    Dodam, że korzystając z IAR-a i HJTAG (już to opisywałem i pytałem w którymś z moich postów), że po fleszowaniu program nie działa.

    Dodano po 1 [godziny] 17 [minuty]:

    Może i to jest przyczyna, że pomimo zastosowaniu się do kolejności jaką podajesz 1) openocd 2) gdb(flash)_load 3) gdb(flash), na ostatnim kroku nie widzę komend w zakładce disassembly. Mimo to jest "Thread[1] (Running)".
    Jak kliknę na "Thread[1] (Running)" i dam "Pause" to pojawiają mi się hmmm..nie wiem ja to nazwać...dwa podwątki? (2 niebieskie ikony "trzy niebieskie paski") Przy pierwszej pisze:
    Code:
    2 <symbol is not avaible> 0x7fffe278
    Przy drugiej pisze:
    Code:
    1 <symbol is not avaible> 0x7fffe2e6
    Obok w disassembly widzę kod asemblerowy wskazujacy na powyższe adresy, ale źródło kodu w języku C nie jest dostępne. Pisze " No source available "" "
    Po przerwaniu "Thread[1] (Running)" otrzymuje w konsoli info:
    Code:
    Program received signal SIGINT, Interrupt.
    
    0x7fffe278 in ?? ()
    kill


    Dodano po 2 [minuty]:

    Mimo wszystko cieszy mnie to, że w końcu mogę uwolnić się od portu LPT :) chociaż na jakiś czas.

    1
  • #22 02 Cze 2009 15:29
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Masz źle skonfigurowany sprzęt, ponieważ włącza ci się bootloader i właśnie dlatego program bez JTAGa nie działa, właśnie dlatego działa tylko jeśli w sesji go załadujesz.

    Adresy od 0x7FFFD000 do 0x7FFFFFFF są zarezerwowane dla booloadera, który odpala się jeśli jakiś tam pin po resecie ma konkretny stan.

    Manual, 19.5:

    Cytat:

    The boot loader code is executed every time the part is powered on or reset. The loader
    can execute the ISP command handler or the user application code. A a LOW level after
    reset at the P0.14 pin is considered as an external hardware request to start the ISP
    command handler.
    Assuming that proper signal is present on XTAL1 pin when the rising
    edge on RESET pin is generated, it may take up to 3 ms before P0.14 is sampled and the
    decision on whether to continue with user code or ISP handler is made. If P0.14 is
    sampled LOW and the watchdog overflow flag is set, the external hardware request to
    start the ISP command handler is ignored. If there is no request for the ISP command
    handler execution (P0.14 is sampled HIGH after reset), a search is made for a valid user
    program. If a valid user program is found then the execution control is transferred to it. If a
    valid user program is not found, the auto-baud routine is invoked.


    Tak więc P0.14 podciągnij do VCC i będzie działać.

    4\/3!!

    1
  • #23 02 Cze 2009 18:39
    wladziu22
    Poziom 17  

    Jest mi wstyd się przyznać, że nie miałem podciągnięte P0.14 pod VCC, ani nie zrobiłem zworki :| Zrobiłem zworkę jedynie do DBGSEL, który o ile dobrze przetłumaczyłem z manuala, ma być stan wysoki gdy chcemy używać JTAGa(debuggera). Stan niski natomiast gdy nie chcemy używać, debuggingu ale możemy nadal wykorzystywać złącze JTAG do programowania flash/RAM. Jeśli źle napisałem proszę aby ktoś poprawił mnie, aby inni nie czytali błędnego wyjaśnienia.

    Dodano po 14 [minuty]:

    Zapomniałem o najważniejszym...Dziękuję za pomoc!

    1
  • #24 02 Cze 2009 18:51
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Stan niski na DBGSEL spowoduje, że piny JTAGa będą po prostu zwykłymi pinami GPIO, więc nie będzie możliwa żadna czynność z użyciem JTAGa, chyba że w programie zostanie to przestawione przy użyciu odpowiednich rejestrów (PINSELx)

    Anyway - pin P0.14 jest od Bootloadera i też musi być jakoś podciągnięty. W każdym LPC są conajmniej dwa takie piny - od Bootloadera i od JTAGa, każdy trzeba sciągnąć do odpowiedniego poziomu po resecie, aby działało tak jak chcemy. Czasem jest jeszcze pin od TRACE (ETM), który mnie również wyprowadził z równowagi kiedyś - to była śmieszna historia, ale nie mam teraz czasu opisywać <:

    No i nie masz się czego wstydzić - ten błąd jest niesamowicie częsty, mało kto o tym pamięta (;

    Anyway - zidentyfikowałem pliki, które są konieczne do działania mojego makefile'a [;

    Są to:
    echo.exe
    mkdir.exe
    msys-1.0.dll
    sh.exe

    Pliczki te można znaleźć w pakiecie WinAVR w katalogu
    c:\WinAVR-...\utils\bin\
    Lub w pakiecie MSYS (shell do MinGW)
    c:\msys\1.0\bin\

    Z niewiadomych dla mnie przyczyn plików tych nie można umieścić w katalogu z resztą toolchaina, bo wtedy zaczynają się dziać dziwne rzeczy...

    Dziś nie mam już czasu, ale jutro zrobię instalatorek dla tych kilku plików, żeby nie było problemu... No chyba że instalator to przesada i wystarczy zip a każdy doda sobie je do PATH ręcznie... Zobaczymy...

    Wprowdziłem do Makefile pare poprawek, które sprawią, że w tym momencie może on działać bez tych plików, ale katalog "out" trzeba mu stworzyć ręcznie (z pliczkami wymienionymi powyżej tworzy się automatycznie), no i pojawiają się te apostrofy przy wszystkich wywołaniach echo. Nie jest jużpotrzebne kasowanie folderu przed kompilacją, więc polecam zmianę.

    Do tego możliwa jest kompilacja "w miejscu", czyli nie do jakiegoś folderu, tylko bezpośrednio do głównego folderu projektu. Wystarczy zmienić
    OUTPUT_DIR = ./out/
    na
    OUTPUT_DIR =

    Całą paczkę z projektem wrzucam w tej chwili, więc polecam zmianę.

    4\/3!!

    1
  • #25 03 Cze 2009 08:05
    wladziu22
    Poziom 17  

    Hey.

    Odinstalowałem dziś WinAVR w celu sprawdzenia tego co piszesz.
    Restart kompa. Usunąłem projekt z eclipse. Zaimportowałem nowa wersje z Twojej strony www.

    Gdy robię clean-a lub build-a, bez wcześniejszych zmian w kodzie np w pliku main.c to otrzymuje:

    Code:
    **** Clean-only build of configuration Default for project lpc2103_blink_led ****
    

    cs-make clean
    'Removing all generated output files from output directory: ./out/'
    cs-rm -f ./out/lpc2103_blink_led.bin ./out/default_handler.d ./out/main.d ./out/startup.d ./out/vectors.d ./out/lpc2103_blink_led.dmp ./out/lpc2103_blink_led.elf ./out/lpc2103_blink_led.hex ./out/lpc2103_blink_led.lss ./out/default_handler.lst ./out/main.lst ./out/startup.lst ./out/vectors.lst ./out/lpc2103_blink_led.map ./out/default_handler.o ./out/main.o ./out/startup.o ./out/vectors.o

    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    System nie mo¾e odnale«† okre?lonej ?cie¾ki.
    'Assembling file: default_handler.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
    ' '
    'Assembling file: startup.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/startup.lst  -MD -MP -MF ./out/startup.d -I .  startup.s -o out/startup.o
    ' '
    'Assembling file: vectors.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/vectors.lst  -MD -MP -MF ./out/vectors.d -I .  vectors.s -o out/vectors.o
    ' '
    'Compiling file: main.c'
    arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/main.lst  -MD -MP -MF ./out/main.d -I .  main.c -o out/main.o
    ' '
    'Linking target: lpc2103_blink_led.elf'
    arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./out/lpc2103_blink_led.map,--cref,--no-warn-mismatch,--gc-sections  out/default_handler.o out/startup.o out/vectors.o out/main.o -lm -o out/lpc2103_blink_led.elf
    ' '
    'Creating extended listing: lpc2103_blink_led.lss'
    arm-none-eabi-objdump -S out/lpc2103_blink_led.elf > out/lpc2103_blink_led.lss
    ' '
    'Creating memory dump: lpc2103_blink_led.dmp'
    arm-none-eabi-objdump -x --syms out/lpc2103_blink_led.elf > out/lpc2103_blink_led.dmp
    ' '
    'Creating IHEX image: lpc2103_blink_led.hex'
    arm-none-eabi-objcopy -O ihex out/lpc2103_blink_led.elf out/lpc2103_blink_led.hex
    ' '
    'Creating binary image: lpc2103_blink_led.bin'
    arm-none-eabi-objcopy -O binary out/lpc2103_blink_led.elf out/lpc2103_blink_led.bin
    ' '
    'Size of modules:'
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o
          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
    ' '
    'Size of target .elf file:'
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf


    Natomiast gdy wprowadzę zmianę np w kodzie w pliku main.c, to otrzymam:
    Code:
    **** Clean-only build of configuration Default for project lpc2103_blink_led ****
    

    cs-make clean
    'Removing all generated output files from output directory: ./out/'
    cs-rm -f

    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    'Compiling file: main.c'
    arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/main.lst  -MD -MP -MF ./out/main.d -I .  main.c -o out/main.o
    ' '
    'Linking target: lpc2103_blink_led.elf'
    arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./out/lpc2103_blink_led.map,--cref,--no-warn-mismatch,--gc-sections  out/default_handler.o out/startup.o out/vectors.o out/main.o -lm -o out/lpc2103_blink_led.elf
    ' '
    'Creating extended listing: lpc2103_blink_led.lss'
    arm-none-eabi-objdump -S out/lpc2103_blink_led.elf > out/lpc2103_blink_led.lss
    ' '
    'Creating memory dump: lpc2103_blink_led.dmp'
    arm-none-eabi-objdump -x --syms out/lpc2103_blink_led.elf > out/lpc2103_blink_led.dmp
    ' '
    'Creating IHEX image: lpc2103_blink_led.hex'
    arm-none-eabi-objcopy -O ihex out/lpc2103_blink_led.elf out/lpc2103_blink_led.hex
    ' '
    'Creating binary image: lpc2103_blink_led.bin'
    arm-none-eabi-objcopy -O binary out/lpc2103_blink_led.elf out/lpc2103_blink_led.bin
    ' '
    System nie mo¾e odnale«† okre?lonej ?cie¾ki.
    'Size of modules:'
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o
          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
    ' '
    'Size of target .elf file:'
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf
    ' '


    Po clean-ie i usunięciu katalogu "out" faktycznie nie tworzy na nowo katalogu. Przy probie build-a otrzymuje:
    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    System nie mo¾e odnale«† okre?lonej ?cie¾ki.
    'Assembling file: default_handler.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
    <built-in>:0: fatal error: opening dependency file ./out/default_handler.d: No such file or directory
    compilation terminated.
    cs-make: *** [out/default_handler.o] Error 1


    Potwierdzę również, że zmiana
    Code:
    OUTPUT_DIR = ./out/
    
    na
    OUTPUT_DIR =
    jest również dobrym rozwiązanie dla osób którym nie przeszkadza mnóstwo plików w katalogu projektu :)


    Pozdrawiam!

    1
  • #26 03 Cze 2009 08:31
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Teraz można projekt tylko przebudowywać (czyli nie trzeba wykonywać make clean), make skompiluje tylko te pliki, które muszą być zmienione, co zresztą widać w twoim drugim przykładzie, gdyż kompilowany jest tylko main.c, a reszta nie jest już ruszana. Konieczność robienia make clean występuje jedynie wtedy, gdy zmiany dotyczą plików których make nie rozpozna - takich jak skrypt linkera lub... Makefile (;

    4\/3!!

    1
  • #27 03 Cze 2009 13:23
    wladziu22
    Poziom 17  

    Freddie...działa Ci "Restart" w trybie debuggingu (ikona kolo "Resume" i "Terminate")?
    Mi wywala info box: " 'Restart' has encountered a problem. Exception(s) occurred attempting to restart".

    1
  • #28 06 Cze 2009 17:29
    Freddie Chopin
    Specjalista - Mikrokontrolery

    To nigdy nie działało dla ARMów [; Żeby zrobić reset trzeba zakończyć jedną sesję GDB i rozpocząć nową, tyle że za drugim razem nie trzeba ładować kodu do flasha (jeśli debugowanie jest we flashu).
    _______________________

    Zrobiłem paczkę z kilkoma najważniejszymi plikami - echo, make, mkdir, rm oraz sh. Instalator który stworzyłem dodaje stosowne ścieżki do PATH. Paczka do pobrania ze stronki ( http://www.freddiechopin.info/ ) - Download > Programy > Coreutils . Pliki zakosiłem z najnowszego WinAVR (; Jeśli ktoś skusi się na użycie, to będę wdzięczny za info, że wszystko działa jak trzeba.

    Dodatkowo wprowadziłem jeszcze drobniutką modyfikację do Makefile, tak aby przy próbie wykonania clean na czystym katalogu pisał, że nie ma co usuwać, zamiast tego rm -fr _wielkie_nic_ , bo głupio to wyglądało [; . Nowa paczka (090604) również wrzucona, jak ktoś chce, to może sobie podmienić.
    __________________________

    Wrzuciłem projekt dla STM32 (dokładniej dla STM32F103RB) - lokacja taka sama [; Czekam na testy, uwagi, opinie - jeśli coś jest źle, to poprawiamy od razu.

    Wprowadziłem też kolejny zestaw niewielkich modyfikacji do paczki dla LPC2103, więc jeśli ktoś używa, to polecam pobranie najnowszej wersji [;

    Nikt nie zassał jeszcze paczki z Coreutils, więc wciąż nie wiem jak sprawdza się to u innych osób...

    Powiedzmy, że jeśli nie będzie żadnych uwag przez najbliższe dwa dni, to napiszę osobny temat o tych przykładach i może napiszę sobie na stronie newsa [; Tymsamym przykłady przejdą z fazy Verification do Production (; hehe

    Czy jest tutaj ktoś, kto byłby chętny na zmodyfikowanie tych projektów dla jakiegoś procka Atmela, ST (STR7xx, STR9xx) oraz Analog Devices? Jeśli tak, to proszę o kontakt celem uzgodnienia szczegółów - ja niestety nie posiadam takowych układów, więc nie jestem w stanie stworzyć i przetestować przykładów dla nich, a fajnie by było, gdyby na stronce były przykłady dla wielu różnych układów... Anyone? Nakład roboty jest niewielki - zmiana adresów w skryptach linkera, procedury do PLLa, inicjalizacji całości i migania diodka, więc kilka linijek kodu. Ze swojej strony wymagam od niego jedynie aby "wpisywał się w standard" pozostałych plików. Mogę zaoferować generowanie plików nagłówkowych do wybanych modułów procesora, aby przykłady były spójne. Na pewno pomogę jeszcze na inne sposoby.

    4\/3!!

    1
  • #29 13 Cze 2009 13:36
    wladziu22
    Poziom 17  

    Trochę bylem zajęty innymi sprawami od mojego ostatniego postu i nie pojawiałem się na elektrodzie. Dziś mam trochę wolnego czasu i postanowiłem przetestować Twoje wypociny.

    Zaimportowałem nowy projekt, który udostępniasz (LPC2103). (Nie mam zainstalowanego WINAVR). Poniżej próba kompilacji w eclipse "bez" i "z" stworzonym ręcznie katalogiem "out":

    Bez katalogu "out"

    Code:
    **** Clean-only build of configuration Default for project lpc2103_blink_led ****
    

    cs-make clean
    'Removing all generated output files from output directory: ./out/'
    'Nothing to remove...'


    Code:

    **** Build of configuration Default for project lpc2103_blink_led ****

    cs-make all
    System nie moľe odnale«† okre?lonej ?cieľki.
    'Assembling file: default_handler.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
    <built-in>:0: fatal error: opening dependency file ./out/default_handler.d: No such file or directory
    compilation terminated.
    cs-make: *** [out/default_handler.o] Error 1


    z stworzonym ręcznie katalogiem "out"
    Code:
    **** Build of configuration Default for project lpc2103_blink_led ****
    

    cs-make all
    System nie moľe odnale«† okre?lonej ?cieľki.
    'Assembling file: default_handler.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
    ' '
    'Assembling file: startup.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/startup.lst  -MD -MP -MF ./out/startup.d -I .  startup.s -o out/startup.o
    ' '
    'Assembling file: vectors.s'
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/vectors.lst  -MD -MP -MF ./out/vectors.d -I .  vectors.s -o out/vectors.o
    ' '
    'Compiling file: main.c'
    arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/main.lst  -MD -MP -MF ./out/main.d -I .  main.c -o out/main.o
    ' '
    'Linking target: lpc2103_blink_led.elf'
    arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./out/lpc2103_blink_led.map,--cref,--no-warn-mismatch,--gc-sections  out/default_handler.o out/startup.o out/vectors.o out/main.o  -o out/lpc2103_blink_led.elf
    ' '
    'Creating extended listing: lpc2103_blink_led.lss'
    arm-none-eabi-objdump -S out/lpc2103_blink_led.elf > out/lpc2103_blink_led.lss
    ' '
    'Creating memory dump: lpc2103_blink_led.dmp'
    arm-none-eabi-objdump -x --syms out/lpc2103_blink_led.elf > out/lpc2103_blink_led.dmp
    ' '
    'Creating IHEX image: lpc2103_blink_led.hex'
    arm-none-eabi-objcopy -O ihex out/lpc2103_blink_led.elf out/lpc2103_blink_led.hex
    ' '
    'Creating binary image: lpc2103_blink_led.bin'
    arm-none-eabi-objcopy -O binary out/lpc2103_blink_led.elf out/lpc2103_blink_led.bin
    ' '
    'Size of modules:'
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o
          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
    ' '
    'Size of target .elf file:'
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf
    ' '


    Code:

    **** Clean-only build of configuration Default for project lpc2103_blink_led ****

    cs-make clean
    'Removing all generated output files from output directory: ./out/'
    cs-rm -f ./out/lpc2103_blink_led.bin ./out/default_handler.d ./out/main.d ./out/startup.d ./out/vectors.d ./out/lpc2103_blink_led.dmp ./out/lpc2103_blink_led.elf ./out/lpc2103_blink_led.hex ./out/lpc2103_blink_led.lss ./out/default_handler.lst ./out/main.lst ./out/startup.lst ./out/vectors.lst ./out/lpc2103_blink_led.map ./out/default_handler.o ./out/main.o ./out/startup.o ./out/vectors.o


    Następnie usunąłem zrobiłem "clean-a" i usunąłem katalog "out" z projektu.
    Zainstalowałem paczkę plików: Coreutils-090604 i poniżej to co uzyskałem:

    Build:
    Code:

    **** Build of configuration Default for project lpc2103_blink_led ****

    cs-make all
    Assembling file: default_handler.s
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/default_handler.lst  -MD -MP -MF ./out/default_handler.d -I .  default_handler.s -o out/default_handler.o
     
    Assembling file: startup.s
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/startup.lst  -MD -MP -MF ./out/startup.d -I .  startup.s -o out/startup.o
     
    Assembling file: vectors.s
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=./out/vectors.lst  -MD -MP -MF ./out/vectors.d -I .  vectors.s -o out/vectors.o
     
    Compiling file: main.c
    arm-none-eabi-gcc -c -mcpu=arm7tdmi-s -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -g -ggdb3 -fverbose-asm -Wa,-ahlms=./out/main.lst  -MD -MP -MF ./out/main.d -I .  main.c -o out/main.o
     
    Linking target: lpc2103_blink_led.elf
    arm-none-eabi-gcc -mcpu=arm7tdmi-s -nostartfiles -Tlpc2103_rom.ld -g -Wl,-Map=./out/lpc2103_blink_led.map,--cref,--no-warn-mismatch,--gc-sections  out/default_handler.o out/startup.o out/vectors.o out/main.o  -o out/lpc2103_blink_led.elf
     
    Creating extended listing: lpc2103_blink_led.lss
    arm-none-eabi-objdump -S out/lpc2103_blink_led.elf > out/lpc2103_blink_led.lss
     
    Creating memory dump: lpc2103_blink_led.dmp
    arm-none-eabi-objdump -x --syms out/lpc2103_blink_led.elf > out/lpc2103_blink_led.dmp
     
    Creating IHEX image: lpc2103_blink_led.hex
    arm-none-eabi-objcopy -O ihex out/lpc2103_blink_led.elf out/lpc2103_blink_led.hex
     
    Creating binary image: lpc2103_blink_led.bin
    arm-none-eabi-objcopy -O binary out/lpc2103_blink_led.elf out/lpc2103_blink_led.bin
     
    Size of modules:
    arm-none-eabi-size -B -t --common ./out/default_handler.o ./out/startup.o ./out/vectors.o ./out/main.o
       text      data       bss       dec       hex   filename
          4         0         0         4         4   ./out/default_handler.o
        172         0         0       172        ac   ./out/startup.o
          0         0         0         0         0   ./out/vectors.o
        724         0         0       724       2d4   ./out/main.o
        900         0         0       900       384   (TOTALS)
     
    Size of target .elf file:
    arm-none-eabi-size -B ./out/lpc2103_blink_led.elf
       text      data       bss       dec       hex   filename
       1236         0       512      1748       6d4   ./out/lpc2103_blink_led.elf
     


    clean:
    Code:

    **** Clean-only build of configuration Default for project lpc2103_blink_led ****

    cs-make clean
    Removing all generated output files from output directory: ./out/
    cs-rm -f ./out/lpc2103_blink_led.bin ./out/default_handler.d ./out/main.d ./out/startup.d ./out/vectors.d ./out/lpc2103_blink_led.dmp ./out/lpc2103_blink_led.elf ./out/lpc2103_blink_led.hex ./out/lpc2103_blink_led.lss ./out/default_handler.lst ./out/main.lst ./out/startup.lst ./out/vectors.lst ./out/lpc2103_blink_led.map ./out/default_handler.o ./out/main.o ./out/startup.o ./out/vectors.o


    i kolejny "clean" po poprzednim "clean-ie"
    Code:
    **** Clean-only build of configuration Default for project lpc2103_blink_led ****
    

    cs-make clean
    Removing all generated output files from output directory: ./out/
    Nothing to remove...


    Dodano po 21 [minuty]:

    Co do innych procesorów..mam na stanie ADuC7026 wiec mogę pomóc w tworzeniu przykładu dla tego procka (o ile to jeszcze aktualne). Procesor ten używałem w połączeniu z H-Jtag i IAR for ARM. Jakby co pisz na priv.

    Dodano po 30 [minuty]:

    Oprócz tego co napisałem powyżej mam pytanie...czy jest możliwość podglądania wszystkich rejestrów procesora tak jak to jest w IAR-e? Np. chciałbym widzieć co się dzieje z bitami w rejestrze np.: U0SCR, U0SCR, U0SCR itp. Wiem ze jest zakładka: Registers gdzie widać jedynie/aż wszystkie rej. główne poczynając od r1, a kończąc na cpsr. Jednak to co feruje IAR jest dosyć wygodne i jestem ciekawy czy e eclipsie tez tak można. Czy w ogóle Jtak lock-pick na to pozwala?

    1
  • #30 13 Cze 2009 14:01
    Freddie Chopin
    Specjalista - Mikrokontrolery

    wladziu22 napisał:
    postanowiłem przetestować Twoje wypociny.

    Ale brzydko to nazwałeś [;

    Cytat:
    czy jest możliwość podglądania wszystkich rejestrów procesora tak jak to jest w IAR-e? Np. chciałbym widzieć co się dzieje z bitami w rejestrze np.: U0SCR, U0SCR, U0SCR itp. Wiem ze jest zakładka: Registers gdzie widać jedynie/aż wszystkie rej. główne poczynając od r1, a kończąc na cpsr. Jednak to co feruje IAR jest dosyć wygodne i jestem ciekawy czy e eclipsie tez tak można. Czy w ogóle Jtak lock-pick na to pozwala?

    Możliwość jest, niemniej jednak nie jest tak wygodnie jak w IAR czy innych komercyjnych pakietach... Sam interfejs JTAG nie ma tu żadnego znaczenia.

    Zasadniczo w Eclipse można to zrobić na trzy sposoby, każdy niewygodny [;

    Pierwszy - masowy podgląd pamięci.
    W perspektywie "Debug" na dole powinna być zakładka Memory (jak nie ma, to Window > Show View). W niej trzeba dodać sobie nowy Memory Monitor i skonfigurować go na konkretny adres. Wadą tego rozwiązania (największą) jest to, że jak mamy liczbę 0x12345678, to niestety Eclipse nie skuma, że procek może być Little Endian, nigdzie się tego nie da przestawić, a będzie widać niestety 78563412. Pozatym jeśli obszar który chce się oglądać jest w pobliżu obszaru który nie istnieje, to procek lubi rzucić wyjątkiem dotyczącym odczytu nieistniejących zasobów (Eclipse odczytuje zawsze trochę w przód i trochę w tył), co czasem zupełnie uniemożliwia zobaczenie czegokolwiek.

    Drugi - Expressions.
    W perspektywie debug zakładka Expressions powinna być tam gdzie Registers, Variables itp. (jak nie to wiadomo co [; ). Teraz zaczyna się kosmos [; Trzeba tam dodać nowe Watch Expression i wpisać tam np. *(int*)0x20000000 - takie wyrażenie wyświetli zawartość adresu 0x2000000. Warto gdzieś w opcjach Eclipse'a przestawić, żeby pokazywał wszystkie liczby w HEX (jak ktoś lubi of course).

    Trzeci (nietestowany) - trzeba w pamięci procka stworzyć zmienną globalną volatile która będzie wskaźnikiem na jakiś adres. Wtedy można sobie podglądac poprzez Variables.

    Ponoć trwają gdzieś tam prace nad pluginem, który pozwalałby dodawać jakies Watchpoiny, nadawać im nazwy i wybierać tryb wyświetlania, ale na razie ten plugin (sprawdzałem go) jest totalnie niestabilny.

    4\/3!!

    1