Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

STM32 - LwIP - dodanie do projektu w Eclipse

tehaceole 09 Mar 2013 21:09 4908 17
  • #1 09 Mar 2013 21:09
    tehaceole
    Poziom 28  

    Witam Kolegów
    Zakładam ten wątek, ponieważ po dwudniowej nierównej walce zmuszony byłem się poddać.

    Usiłuję wziąć na warsztat przykłady z książki "Mikrokontrolery STM32 w sieci Ethernet" Marcina Peczarskiego. Sprzętowo dysponuję modułem MMstm32F107 z Propoxu. W czym problem? A więc tak:
    - bez problemu uruchomiłem na tym module swój program pisany na procesor STM32F100RB (prosty test peryferiów, IO, wyświetlacza itp.)
    - wiedząc, że poprawnie wgryzam się w układ przystąpiłem do adaptacji projektów z książki
    I tu zaczynają się schody. Zgodnie z konwencją stosowaną przez autora, do każdego nowego projektu po prostu dodawane są kolejne pliki nagłówkowe / źródłowe. Żeby nie mieszać, postanowiłem rozpocząc zabawę od pierwszej lekcji, tj. standardowego migania ledem. Utworzyłem nowy projekt, skonfigurowałem wszystko co trzeba, dodałem niezbędne pliki (źródła, rozbiegówka, skrypt linkera) i na posiadanej konfiguracji:
    - Eclipse Indigo (Build id: 20120216-1857)
    - OpenOCD 0.6.1
    - arm-none-eabi-gcc-4_6
    - JTAG-lock-pick Tiny 2 Freddiego Chopina
    pierwsze miganie diodą wg koncepcji projektu przedstawionej przez Pana Peczarskiego ruszyło bez zająknięcia.

    Kłopoty zaczęły się, gdy postanowiłem spróbować dodania do projektu katalogu z biblioteką stosu LwIP. Choćbym nie wiem jak kombinował z dodawaniem w Eclipse katalogów (Project Properties / C/C++ Build / Settings/ ARM Sourcery Windows GCC C Compiler / Directories) to efekt cały czas jest ten sam: próba kompilacji wywala błędy z nieodnalezieniem różnych plików biblioteki...

    Ponieważ kilku osobom tutaj udało się uruchomić tę bibliotekę, może ktoś byłby tak miły i podzieliłby się ze mną swoimi spostrzeżeniami? Po pierwsze: po obejrzeniu tego wideotutorialu w oczy rzuciło mi się, że z paczki z biblioteką należy wyciągnąć tylko zawartość folderu src i ją dodać do własnego projektu. Mam rację?

    Ponieważ książka jest napisana baaardzo przyjaznym językiem - założyłem, że z uruchomieniem przykładów nie będzie większego problemu. Tylko nie wziąłem pod uwagę tego, że wyłożę się na dodawaniu do projektu biblioteki LwIP. A bez jej poprawnej inegracji z projektem mogę tylko pomarzyć o ugryzieniu dalszych przykładów.
    Może ktoś zechciałby podesłać mi jakiś najprostszy projekt z tą biblioteką stworzony w Eclipse?

  • #2 09 Mar 2013 23:24
    alagner
    Poziom 25  

    Zasadnicze pytanie brzmi: czy korzystasz z eclipsowego pluginu pod ARMy, czy działasz wg tego co pisze u siebie Freddie Chopin, czyli Makefile? Bo może wystarczy dopisać do do Makefile'a SRC_DIR i INC_DIRS?

  • #3 09 Mar 2013 23:57
    tehaceole
    Poziom 28  

    Makefile generowany automatycznie przez eclipse.

  • Pomocny post
    #4 11 Mar 2013 00:17
    browarinho
    Poziom 10  

    Do projektu dodajesz zawartość folderu src lwip. Wywalasz z niego pliki dotyczące ipv6. Dodajesz folder port odpowiedni dla twojego hardware. Dodajesz ścieżki src/include i src/include/ipv4 w Eclipsie do bibliotek. Możliwe, że niektóre pliki z folderu port będziesz musiał pozmieniać samemu (sys_arch do freertosa i ethernetif). Przy okazji pamiętaj, że w plikach udostępnianych przez ST w appnotach i ich słynnych bibliotekach czai się trochę błędów.

  • #5 11 Mar 2013 07:51
    tehaceole
    Poziom 28  

    browarinho - dziękuję! Po południu sprawdzę jak to śmiga wg Twojego opisu.

    browarinho napisał:
    ys_arch do freertosa i ethernetif
    Biblioteka będzie odpalana bez systemu RT.

    browarinho napisał:
    Przy okazji pamiętaj, że w plikach udostępnianych przez ST w appnotach i ich słynnych bibliotekach czai się trochę błędów

    Generalnie staram się tam gdzie potrafię implementować bezposrednią obsługę za pomocą CMSIS. Jednak póki co jestem zbyt początkujący w temacie ARM żeby móc tu szaleć :)

    Możesz coś więcej napisać o katalogu PORT? Wg książki takiego katalogu nie ma (w bibliotece LwIP też go nie widzę), natoamiast cała konfiguracja biblioteki odbywa się z użyciem nagłówka lwipopts.h (to masz na myśli?).

  • Pomocny post
    #6 11 Mar 2013 20:00
    browarinho
    Poziom 10  

    W sumie możliwe, że nie wszędzie jest taka sama konwencja nazywania folderów. W każdym razie chodzi mi o zestaw plików umożliwiający współpracę z konkretnym prockiem i ewentualnie systemem operacyjnym. W używanej przez Ciebię książce na pewno były tam pliki cc.h i cortex-m3.h czy jakoś tak. Polecam też ściągnąć appnoty stma albo jakieś przykładowe projekty z neta i zobaczyć tam strukturę folderów.

  • #7 11 Mar 2013 20:36
    tehaceole
    Poziom 28  

    browarinho jesteś wielki! :) Dodałem LwIP zgodnie z Twoim opisem i... projekt dał się skompilować!!! :) No to teraz mogę się już na spokojnie wziąć za przerabianie przykładów z książki. Masz u mnie piwko (Koszalin jest mały więc możemy wpaść na siebie).

    browarinho napisał:
    na pewno były tam pliki cc.h i cortex-m3.h czy jakoś tak
    Tak.
    browarinho napisał:
    appnoty stma
    Przez ostatnie 3 tygodnei zgromadziłem już tyle materiałów od stm, że rzetelne ich przestudiowanie to i nawet z pół roku mogłoby zająć... hehehe :)
    browarinho napisał:
    przykładowe projekty z neta i zobaczyć tam strukturę folderów.
    Z tym się zgadzam w 100%. Niestety nie do końca przypada mi do gustu struktura katalogów / nazewnictwa plików zastosowana przez autora książki. Więc docelowo będę chciał ogarnąć to po swojemu. Ale to dopiero jak zdołam się po tym wszystkim w miarę płynnie poruszać...

  • #8 15 Mar 2013 23:33
    browarinho
    Poziom 10  

    Cieszę się, że tak bezproblemowo udało ci się przebrnąć przez kompilację lwip i moje wskazówki okazały się pomocne. Sam się swego czasu musiałem się z tym męczyć przez parę dni. Jak się zapoznasz z przykładami z książki to możesz pomyśleć nad przesiadką na freertosa i wykorzystaniem netconn api i socket api z lwip.

    tehaceole napisał:
    Masz u mnie piwko (Koszalin jest mały więc możemy wpaść na siebie).


    Ostatnio bywam w Koszalinie tylko od święta, ale kto wie :D

  • #9 16 Mar 2013 11:21
    opamp
    Użytkownik obserwowany

    Możesz przybliżyć jak dokładnie zmienić nazwy pików?

  • Pomocny post
    #10 18 Mar 2013 13:33
    IS
    Poziom 15  

    Pamiętaj aby ściągnąc od BTC/Kamami nowsze źródła. A potem połączyć to z nowym LwIP (1.4.1). Kilka poprawek jednak zrobili w kodzie.

  • #11 19 Mar 2013 09:42
    tehaceole
    Poziom 28  

    Ja Koledzy chwilowo się nie udzielam w wątku, gdyż dokończyć muszę inny temat.

    Mam najnowsze źródła z BTC. Kurka kapryśnie to wszystko się zachowuje w Eclipse (wiem, wiem, to tylko moja niewiedza). Wcześniej udało mi się skompilować projekt (ze starszymi bibliotekami) tak jak mówił browarinho. Niestety po ściągnięciu nowych źródeł wszystko mi się posypało znów. W weekend planuję nad tym gruntownie przysiąść bo zaczęło mnie to irytować.

    Generlnie płytka propoxu dała znaki życia bo miga diodą (4 mignięcia) sygnalizując jakiś błąd. Muszę przeanalizować kody z książki bo już pobieżnie sprawdzając schematy wychodzi mi, że w btc wykorzystanych jest więcej sygnałów do PHY niż w propoxie. Nie wiem na chwilę obecną czy ma to jakiś wpływ na działanie programu.

  • Pomocny post
    #12 19 Mar 2013 11:21
    IS
    Poziom 15  

    Jak chcesz to mam działający kod dla Propoxu i Kamami. Ale to tylko na PRIV bo nie mogę publikować. Bez RTOS udało mi się odpalić na LwIP 1.4.1 www+snmp+telnet+UDP.. Właściwie płytka Propoxu leży u mnie bezczynnie. Na płytce od Kamami (ZL26) brakuje kwarcu od RTC! Obie płytki są wzorowane na płytkach ST. W pewnym momencie odpuściłem przykłady książkowe. Ciekawe przykładowe kody są w paczce od Lwip (conntrib) i od Stelarisa.

  • #13 08 Kwi 2013 18:16
    tehaceole
    Poziom 28  

    Bardzo serdecznie dziękuję wszystkim Kolegom za zaangażowanie i okazaną pomoc. Szczególnie mocno zaś chcę podziękować Koledze IS, który poświęcił mnóstwo czasu żeby pomóc mi na PW.
    Stos udało mi się odpalić. Zasadniczo wszystko ruszyło. Jednak pojawił się niepokojący objaw. Zrobiłem sobie stronę, w której umieszczona jest ramka iframe dynamicznie odświeżana przez JS. Dokładnie to odświeżanie następuje co sekundę - w ramce wyświetlam czas jaki upłynął od włączenia zasilania. I tu jest wszystko OK. Strona działa, ramka się odświeża.
    Problem jednak pojawił się, gdy chciałem sprawdzić "idiotoodporność" - włączyłem Chrome i na stałe wdusiłem ctrl+R. Co się stało? Stos zamiast odrzucać połączenia których nie może obsłużyć zawiesza się. Myślę sobie: zobaczę jak działa pod systemem operacyjnym. Udało mi się odpalić freeRTOS (zaskoczony jestem, że poszło z nim tak śmiesznie prosto).

    Mam w tej chwili pod freeRTOS odpalone 4 zadania: 2 odpowiadają za miganie diodami, 1 odpowiada za liczniki LwiP (te, które normalnie działają pod przerwaniem od systick), natomiast ostatnie uruchamia cały stos wraz z wcześniejszą konfiguracją sprzętu itp. Niestety jest dokładnie tak samo jak bez systemu - procesor się zawiesza. Jest to dla mnie o tyle dziwne, że do tej pory wydawało mi się, że korzystanie z systemu zabezpieczy nas na wypadek zwiechy jakiegoś zadania.
    Jak tylko ogarnę temat debugowania (coś nie mogę poprawnie uruchomić debugowania na tym procesorze korzystając z jtag lock pick) to sprawdzę gdzie ląduje mój program w monencie tej zwiechy. Tymczasem może ktoś ma jakiś pomysł?
    Poniżej skrypt linkera jakiego używam (Z książki M. Peczarskiego):

    Kod: C
    Zaloguj się, aby zobaczyć kod

    W załączniku plik lwipopts.h

    Ponieważ problem występuje zarówno z jak i bez freeRTOS, zatem porwóciłem do wersji projektu bez systemu operacyjnego, aby móc jednoznacznie go rozwiązać.

  • Pomocny post
    #14 08 Kwi 2013 21:25
    browarinho
    Poziom 10  

    To jest błąd w sterowniku ST, który jest niesamowicie trudny do wykrycia na debugu. Znajdź w swoim sterowniku od stm (jak dobrze pamiętam, w pliku ethernetif.c) fragment:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i te dwie linijki w pętli for zamień miejscami.

    Ten błąd był opisywany na listach mailingowych lwip. Zwykle nic złego się nie dzieje, ale jak program długo działa, albo spamujesz zapytaniami to szansa na to, że sterownik ethernetu się wyłoży niebezpiecznie wzrasta.

  • #15 09 Kwi 2013 18:09
    tehaceole
    Poziom 28  

    browarinho głupia sprawa... Ale nie mogę znaleźć tego fragmentu. Otworzyłem wszystkie pliki .c i .h z projektów przykładowych do książki (LwIP wersja 1.3.2 oraz 1.4.0) w notepad++ i w żadnym nie znaleziono choćby namiastki tego fragmentu, który podałeś. Wujek Googel wypluł jakiś wynik, ale dla F4...

  • #16 09 Kwi 2013 18:16
    IS
    Poziom 15  

    Ja też szukałem u siebie w różnych wersjach (także lwip 1.4.1) i nie mam takiego fragmentu kodu. Mógłby Kolega coś więcej napisać o tym problemie. Może jakieś linki?

  • #17 09 Kwi 2013 19:29
    browarinho
    Poziom 10  

    Faktycznie, to nie jest kod z lwip tylko samego sterownika eth i w dodatku na F2-F4 a nie F1. Z tego co pamiętam, sterowniki ethernetu są takie same w F1, F2 i F4, ale F2 i F4 mają nowsze biblioteki (co wcale nie oznacza, że lepsze). W każdym razie problem może być ten sam:

    Flaga OWN dla bufora Rx ustawiana jest przed zmianą deskryptora i jeżeli mamy pecha to może nam się wyłożyć DMA.

    Kiedyś znalazłem taki fajny link, gdzie ktoś to debugował i opisywał jak statusy DMA się zmieniają i później dochodził do jakiegoś warunku, który nigdy nie zostawał spełniony. Tylko coś nie mogę tego znaleźć. Jedyne co znalazłem to:

    http://lists.gnu.org/archive/html/lwip-users/2012-05/msg00071.html

    Podobny błąd często powstawał kiedy się zatrzymało program na breakpoincie.

    Sorry, że takie nieprecyzyjne informacje podaję, ale nie mam dostępu do kodu.

  • #18 11 Kwi 2013 12:09
    tehaceole
    Poziom 28  

    Koledzy! Działa!!!

    Pozwoliłem sobie wysłać zapytanie odnośnie tego problemu do Pana Marcina Peczarskiego. W odpowiedzi przesłał mi on inną wersję pliku http_server.c - podmiana przyniosła oczekiwane rezultaty. Na chwilę obecną nie miałem czasu analizować zawartości obu plików pod kątem różnic powodujących występowanie mojego problemu. Ale niezwłocznie zamierzam się za to zabrać. Póki co zamieszczam w załączniku rzeczony plik.

    Gdyby ktoś był zainteresowany to na stronie Autora: http://www.mimuw.edu.pl/~marpe/book/index.html pojawiła się najnowsza wersja przykładów do książki (ja korzystam z wcześniejszej) oraz errata do książki.



    Dokonałem analizy obu plików - różnią się zaledwie pięcioma linijkami... Z czego 2 to nawiasy. :) Echhh diabeł zawsze tkwił w szczegółach.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo