Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS

cool_kuba 07 Jun 2013 11:40 5628 26
  • #1
    cool_kuba
    Level 12  
    Mam skonfigurowane środowisko Eclipse mniej więcej tak jak tu i wszystko działa dobrze. Jednak czytałem że OpenOCD rozumie już różne RTOS-y między innymi FreeRTOS Przez co przy debugowaniu można przeglądać uruchomione taski i takie bajery. w manualu na stronie 66 jest napisane że powinienem podać -rtos rtos type (W moim przypadku FreeRTOS) w $target_name configure. configparams. Tyle że nie mam pojęcia gdzie to wpisać w Eclipsie. Próbowałem wpisać to w wielu miejscach jednak nie chce działać.
    Korzystał ktoś z takiego udogodnienia?
    Lub może wiecie gdzie mam wpisać tą opcję?
  • #2
    Freddie Chopin
    MCUs specialist
    Sprawa jest niestety bardziej skomplikowana - uruchomienie tejże opcji w Eclipse wg mnie jest prawie niemożliwe [; Samo podanie parametru do OpenOCD to najmniejszy problem, wtyczka GDB Hardware Debugging niestety jest BARDZO oporna w tej kwestii... Przynajmniej taki kiedyś było, a sprawdzałem to jakoś w tym roku...

    Zerknij np. tutaj
    http://www.open-etech.com/Tech/OpenOCD/index.php?page=section2

    Generalnie opcję da się podać do OpenOCD bez grzebania w plikach konfiguracyjnych, np. tak:
    ... -c "$_TARGETNAME configure -rtos auto" ...

    4\/3!!
  • #3
    cool_kuba
    Level 12  
    Freddie Chopin wrote:

    Próbowałem tak jak tu radzą czyli edytować plik .cfg (w moim wypadku stm32f1x_stlink.cfg) niestety powoduje to błędy przy próbie uruchomienia debuggera:
    Quote:
    Open On-Chip Debugger 0.7.0 (2013-05-05-10:41)
    Licensed under GNU GPL v2
    For bug reports, read
    http://openocd.sourceforge.net/doc/doxygen/bugs.html
    Runtime Error: C:/ProgramyARM/Openocd-0.7.0/bin/../scripts/target/stm32f1x_stlink.cfg:4: can't read "_TARGETNAME": no such variable
    in procedure 'script'
    at file "embedded:startup.tcl", line 58
    at file "C:/ProgramyARM/Openocd-0.7.0/bin/../scripts/target/stm32f1x_stlink.cfg", line 4

    nie bardzo podoba się mu _TARGETNAME. Tyle że osoba pisząca ten poradnik używa innego RTOS oraz innego programatora.
    Freddie Chopin wrote:

    Generalnie opcję da się podać do OpenOCD bez grzebania w plikach konfiguracyjnych, np. tak:
    ... -c "$_TARGETNAME configure -rtos auto" ...

    Proszę powiedz gdzie to wpisać ja próbowałem wpisać tak jak Ty piszesz oraz -rots FreeRTOS w dwóch miejscach:
    [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS
    W obu przypadkach wszystko działa tyle że nic się nie zmienia (nadal widzę tylko aktywną funkcję). Żadnego śladu innych zadań
    [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS

    EDIT:
    Pomyślałem i spróbowałem wkleić z kropkami do external Tools configuration:
    [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS
    I również nie widzę innych zadań ;>
  • #4
    Freddie Chopin
    MCUs specialist
    cool_kuba wrote:
    W obu przypadkach wszystko działa

    To pierwsze. Ewentualnie bez entera

    cool_kuba wrote:
    tyle że nic się nie zmienia (nadal widzę tylko aktywną funkcję). Żadnego śladu innych zadań

    Jak już pisałem:
    Freddie Chopin wrote:
    Sprawa jest niestety bardziej skomplikowana - uruchomienie tejże opcji w Eclipse wg mnie jest prawie niemożliwe [; Samo podanie parametru do OpenOCD to najmniejszy problem, wtyczka GDB Hardware Debugging niestety jest BARDZO oporna w tej kwestii... Przynajmniej taki kiedyś było, a sprawdzałem to jakoś w tym roku...

    Podtrzymuję to [;

    4\/3!!
  • #5
    cool_kuba
    Level 12  
    Freddie Chopin wrote:

    Podtrzymuję to [;

    Szkoda bo tutaj
    [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS
    tak ładnie komuś działa. W takim razie poczekam jeszcze trochę może akurat napisze ktoś kto wie jak to uruchomić ;)
    Niemniej jednak dziękuję za informacje. :)
  • #7
    cool_kuba
    Level 12  
    Freddie Chopin wrote:
    Zwróć uwagę, że tam komuś działa, ale nie we wtyczce GDB Hardware Debugging, tylko w Zylin.

    4\/3!!

    No kurcza ale to jest z tego linka co Podałeś i pisze że konfiguruje OpenOCD. No ale racja screen mówi co innego to ja już nie wiem ;)
  • #9
    alagner
    Level 26  
    To ja mam takie pytanie - są jakieś przeciwwskazania do stosowania Zylina zamiast GDB Hardware Debug?
  • #10
    Freddie Chopin
    MCUs specialist
    alagner wrote:
    To ja mam takie pytanie - są jakieś przeciwwskazania do stosowania Zylina zamiast GDB Hardware Debug?

    Sprawdź [; w GDB Hardware Debugging - przynajmniej kiedyś - więcej rzeczy konfigurujesz przy pomocy GUI, w Zylinie zaś trzeba było je wpisywać "z palca". Jestem też prawie pewny, że coś tam działało trochę gorzej, ale już nie pamiętam co...

    Co do samego debuggowania RTOSów - w GDB Hardware Debugging jest to możliwe, ale bardzo trudne - mnie nigdy nie udało się zrobić tego w powtarzalny sposób, choć kilka razy zadziałało (widziałem wątki)...

    4\/3!!
  • #11
    cool_kuba
    Level 12  
    Freddie Chopin wrote:


    Co do samego debuggowania RTOSów - w GDB Hardware Debugging jest to możliwe, ale bardzo trudne - mnie nigdy nie udało się zrobić tego w powtarzalny sposób, choć kilka razy zadziałało (widziałem wątki)...



    Szkoda w takim razie nie zostaje nic tylko czekać aż tę sprawę jakoś rozwiążą w kolejnych wersjach lub znajdzie się ktoś kto wie o co kaman w aktualnym wsparciu RTOS-ów ;)
    EDIT:
    Znalazłem tutorial jak skonfigurować OpenOCD dla ChibiOS/RT I tam ktoś wytłumaczył jak to przynajmniej włączyć:
    Quote:
    You can enable the RTOS by appending -c ”{TARGET_NAME}.cpu configure -rtos auto;” where target name stands for your CPU. i.e. stm32f4x. It is also typically displayed on openocd connection to your target.

    niestety oczywiście nie działa mi to. Wklejam to do External Tools Configuration i zamaist TARGET_NAME próbowałem wpisać stm32f1x oraz stm32f1x_stlink ale niestety za każdym razem dostaję błąd:
    Quote:
    RTOS recognition in OpenOCD to External Tools Configurations / Main / Arguments
    -c "${stm32f1x_stlink} configure -rtos auto"
    or
    -c "${stm32f1x} configure -rtos auto"
    as advised in the forum but it gives the error:
    Reference to undefined variable stm32f1x_stlink

    (lub to samo tylko stm32f1x)
    Macie jakiś pomysł co robię źle. Bo jednak wydaje mi się że nie tyle ta obsługa nie działa co ja jej po prostu nie włączam. .
  • #12
    alagner
    Level 26  
    ja odpalam tak:
    -f interface/jtag-lock-pick_tiny_2.cfg -f target/stm32f1x.cfg -c "adapter_khz 1000; reset_config trst_and_srst separate; $_TARGETNAME configure -rtos auto"

    A w Zylinie w init commands mam to:
    target remote localhost:3333
    monitor reset halt
    symbol-file out/project.elf
    thbreak main
    continue

    i działa. Aczkolwiek nie wiem na ile to jest prawidłowe, póki co to wstępna wersja do zabawy ;)

    Pzdr.

    Dodano po 5 [godziny] 14 [minuty]:

    Sorry za posta pod postem, ale chyba udało mi się ustawić tutaj jako-taką powtarzalność dla GDB Hardware Debugging, mianowicie:

    Launcher ustawiamy na DSF
    Do komend gdb dopisujemy
    Code:
    monitor poll
    ,

    czyli całość komend dla GDB wygląda tak:
    Code:
    monitor reset halt
    
    monitor poll


    Dodano po 10 [minuty]:

    I jeszcze jedno:
    OpenOCD rzuca takimi errorami:

    Code:

    Error: JTAG-DP STICKY ERROR
    Error: MEM_AP_CSW 0x23000050, MEM_AP_TAR 0x51200032
    Error reading stack frame from FreeRTOS thread

    ale nie dzieje się nic złego...
  • #13
    alagner
    Level 26  
    Choroba, to faktycznie nie jest powtarzalne... Dla ST32F4Discovery rzeczywiście "No FreeRTOS symbols found" ale nie ma też w/w "Sticky" błędów od OpenOCD, ciekawe czy to ma znaczenie...
  • #14
    cool_kuba
    Level 12  
    Jakiego programu używasz do debugowania Zylin czy OpenOCD bo jakby dwie rzeczy opisałeś.

    alagner wrote:

    A w Zylinie w init commands mam to:

    alagner wrote:

    OpenOCD rzuca takimi errorami:


    Ale i tak masz dobrze bo przynajmniej Ci się uruchamia (errory związane z RTOS jak się pojawiają). Ja na razie nie wiem jak to włączyć dla swojego stlink-a ;) bo co nie wpisuję to albo nic się nie dzieje albo jakieś errory z tym targetname mi wyskakują.
  • #15
    alagner
    Level 26  
    I Zylin I GDB Hardware Debug korzystają z OpenOCD jako serwera GDB.
    OpenOCD odpalam jako:

    openocd.exe -f interface/jtag-lock-pick_tiny_2.cfg -f target/stm32f1x.cfg -c "adapter_khz 1000; reset_config trst_and_srst separate; $_TARGETNAME configure -rtos auto"

    W gdb hardware debugging:

    DSF Launcher, komendy inicjujące: monitor reset halt, monitor poll, reszta jak w przykładach Freddiego.
    Na STM32F107 to działa, na STM32F4 - nie.

    W Zylinie - patrz post wyżej. Pod F4 też są cuda. Nie wiem na ile to kwestia STLinka, na ile samego procka, będę walczyć dalej wkrótce ;)
  • #16
    cool_kuba
    Level 12  
    Dzięki za wyjaśnienie. Jakbyś spróbuję w takim razie też zainstalować ten program i zobaczę co się u mnie stanie. Jakbyś zrozumiał na czym polega trik żeby to to działało zawsze to podziel się ;) plis
  • #17
    May
    Level 11  
    Cześć,
    Koledzy poradźcie.
    Czy uzywając gdb z pakietu linaro, przez wtyczkę GDB HW Degugging, zawsze przy rozpoczynaniu sesji musze bezpośrednio wskazać symbole poleceniem "symbol-file ..."? Sytuacja jest taka że mam już wgrany program i rozpoczynam nową sesje debugowania.
  • #18
    Freddie Chopin
    MCUs specialist
    May wrote:
    Czy uzywając gdb z pakietu linaro, przez wtyczkę GDB HW Degugging, zawsze przy rozpoczynaniu sesji musze bezpośrednio wskazać symbole poleceniem "symbol-file ..."? Sytuacja jest taka że mam już wgrany program i rozpoczynam nową sesje debugowania.

    Symbole są tylko dla debuggera - nie powodują one żadnych operacji na pamięci mikrokontrolera. Jeśli tylko usuniesz tą wcześniejszą pozycję (image? nie pamiętam teraz i nie mam jak sprawdzić), to nic nie zostanie zaprogramowane - debugger będzie "działał" z tym co jest w układzie (musi się to oczywiście zgadzać z plikiem elf na komputerze).

    4\/3!!
  • #20
    imarszi
    Level 14  
    U mnie na STM32F4 i "GDB Hardware Debuging" mam komunikat z OpenOCD "No FreeRtos synbol found" wszystko działa normalnie bez żadnej dodatkowej funkcjonalności rtos.
    Zylin jest bardziej gadatliwy:
    Warn : RTOS FreeRTOS not detected. (GDB could not find symbol 'uxTopUsedPriority '), takiej zmiennej w projekcie nie mam mam za to 'uxTopReadyPriority'.
    Error: FreeRTOS maximum used priority is unreasonably big, not proceeding: 537001984. i całe debugowanie jakoś dziwnie działa, a w zasadzie w ogóle nie działa.

    To nie jest czasem tak że OpenOCD jest przystosowany do konkretnej wersji FreeRTOS i z innymi nie działa ?
  • #22
    dancios
    Level 10  
    moglby ktos wystawic na gicie svn dzialajaca wersje freertos stm32f4xx w miare nowa co sie kompiluje i dziala pod eclipem bo 7 dzien walcze by zmusic do pracy. Pod atoliciem/keilem dem
    a dzialalaly ale atollic ma limit kodu a keil nieprzystosowany do wspolczesnych realiow IDE.
  • #23
    alagner
    Level 26  
    A próbowałeś z wersją z Atollica, może uda się łatwo przerobić? Bo w sumie to też gcc i Eclipse...
  • #24
    May
    Level 11  
    Cześć
    Mam jeszcze jedno pytanie dotyczace debugowania FreeRTOSa. Uzywam Ubuntu 12.04, Eclipse Juno, Zylin 4.18.1, openocd 0.7.0 i aktualnego gdb od linaro.
    Czy używając wtyczki "Zylin" (native), w momencie gdy analizowany task osiągnie breakpoint to domyslnie w okienku "Debug" (tam gdzie widać taski, "external tools" etc.) rozwija sie wam call stack innego tasku? Dodam jeszcze że w okienku edytora kursor wskakuje w miejsce kodu powiązane z RTOSem. U mnie tak to wygląda i potem musze "rozwijać" po kolei taski z listy żeby znaleść miejsce na którym wypadł breakpoint. Niesamowicie to jest uciążliwe. Czy ktos podpowie rozwiązanie?
  • #25
    imarszi
    Level 14  
    @dancios
    Mogę ci na mejla wysłać projekt z FreeRTOS 7.5.2 . Ale tam jest straszny bałagan i ja żadnym specem o FreeRTOS nie jestem i mogą być błedy, ale działa kompiluje się, są jakieś dwa zadania testowe, kilejka. Projekt dla STM32F4Discovery , eclipse , linaro na makefile bazującym na przykładach Freddiego.
    P.S. używam bibliotek od STM
  • #26
    blowman
    Level 11  
    Mi zadziałało coś takiego:
    [STM32][Eclipse] Konfiguracja OpenOCD 0.7.0 do współpracy z FreeRTOS
    Code: text
    Log in, to see the code


    a openocd uruchamiam tak:
    Code: text
    Log in, to see the code

    Mam tylko maly problem z st-linkv2. Zeby openocd działalo stabilnie musze jednorazowo po zasileniu procka uruchomić STM32 ST-LINK Utility i połączyc się z nim. Potem ST-Link mogę wyłączyć.

    Pamiętajcie o dodaniu w pliku FreeRTOSConfig.h:
    Code: c
    Log in, to see the code


    Jeśli ktoś jest zainteresowany semihostingiem to dajcie znać i zrobię nowy wątek. Semihosting można uzywać jako np. konsoli do drukowania przez printf.
  • #27
    Freddie Chopin
    MCUs specialist
    Dla nowych wersji FreeRTOSa trzeba przedefiniować (np. poprzed globalną definicję w Makefile) zmienną globalną "uxTopReadyPriority" na "uxTopUsedPriority". Wciąż chodzi to nieco koślawo (po pierwszym odpaleniu OpenOCD muszę kilkukrotnie uruchomić GDB żeby cały zestaw "załapał"), ale już jest lepiej chyba [;

    4\/3!!