Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[LPC2364][Codesourcery][uIP] - problem z serwerem www

Wilku 04 Oct 2009 14:11 1986 6
Computer Controls
  • #1
    Wilku
    Level 17  
    Witam.
    Czy udało się może komuś uruchomić serwer www na uIP używając do kompilacji Codesourcery? Próbuję to uruchomić na LPC2364, źródła pobrane ze strony NXP. Niestety bez skutku. Podstawową aplikację z ARP udało się odpalić (układ odpowiada na pingi), obsługa telnetu również działa.
    Problem pojawia się przy kompilacji paczki z apps webserwer. Kompilacja tego samego w Keil działa bez problemu (sam serwer również). Na początku pojawiły się problemy z brakiem _sbrk i innych. Po zainstalowaniu paczki Yagarto (który pewnie ma już zaimplementowane te funkcje) problemu juz nie ma ale... no właśnie. Po wyłączeniu wszystkich printf'ów i podobnych yagarto generuje plik na poziomie 27kB (RealView z Keila całą paczkę 17kB). Oczywiście dołączenie printf-ów dorzuca 32kB więc pewnie trzeba napisać będzie swoją wersję. Optymalizacja ustawiona na 1. Zajętość RAM podobna. Wychodzi na to że kompilator GCC z paczki Yagarto ( w ogóle GCC) wypada kiepściutko pod względem wielkości generowanego kodu w porównaniu z RealView...albo ja robię coś źle. Dołączam swojego makefila, startup'a i skrypt linkera.
  • Computer Controls
  • #2
    Freddie Chopin
    MCUs specialist
    Chyba logiczne jest, że jak chcesz mieć mały kod, to używasz optymalizacji rozmiaru, czyli -Os...

    printf z newlib (taki masz i w yagarto i w CS) - jest ogromny, to fakt znany od dawna. printf ten obsługuje jednak wszystko co tylko możliwe.

    Paczki z yagarto, tak samo jak paczki z CS nie mają "tych" funkcji zaimplementowanych, więc wystarczy spojrzeć do pliku syscalls.c, zamieszczonego na stronie yagarto, albo do manuala do libc (newlib), aby dowiedzieć się jak zaimplementować je samemu.

    Co do porównania gcc i RealView powiem tylko tyle - skoro stać cię na RealView, to po co w ogóle bawisz się w gcc? [;

    4\/3!!
  • Computer Controls
  • #3
    markosik20
    Level 33  
    Freddie Chopin wrote:
    Chyba logiczne jest, że jak chcesz mieć mały kod, to używasz optymalizacji rozmiaru, czyli -Os...


    No akurat te poziomy optymalizacji dają oszczędność na poziomie kilkuset B.
    Tak się składa że też od kilki dni "męczę" podobny projekt. Udało mi się uruchomić stronę (tzn. odpowiada ale nie ładuje danych)...związane jest to z tym że musiałem za komentować kilka funkcji sprintf gdyż linker ładnie napisał
    
    In function `_sbrk_r':
    sbrkr.c:(.text+0x18): undefined reference to `_sbrk'


    Szukając w sieci rozwiązania problemu trafiłem na post na elce gdzie ktoś kompilował pakietem yagarto. Po zainstalowaniu okazało się że nie było problemu z kompilacją (wystarczyło tylko w makefil'u zmienić kompilator). Jakież było moje zdziwienie jak rdzeń ledwo ruszył to lądował w data_abort. No nic to, ściągnąłem najnowsze codesourcery, kompilacja (oczywiście bez printf bo też linker się rzucał)...ale efekt identyczny jak w yagarto...data_abort.
    Wróciłem do starej wersji tj. 2008q1-126 i trzeba będzie napisać swoje funkcje snprintf.
    Zastanawia mnie tylko fakt dlaczego yagarto skompilowało projekt bez problemu (żadnych syscalls.c nie trzeba było dodawać) a codesourcery już nie...no i dlaczego po kompilacji na nowym codesourcery program się wysypywał (już mi się nie chciało szukać gdzie i dlaczego). Zmiany robiłem tylko w makefile..nigdzie indziej.
    Co do Keila...teraz zaczynam sobie uzmysławiać dlaczego kosztuje aż 3000$ :D
    Reasumując albo przykładowa implementacja http z uIP jest "ciężko" napisana (pod RealView) albo jesteśmy jak topielcy w morzu zawiłości całego pakietu GCC próbując obrać właściwy kierunek do brzegu :wink:.
  • #4
    Freddie Chopin
    MCUs specialist
    jeden temat - o sprintf() - https://www.elektroda.pl/rtvforum/topic1384751.html

    drugi temat - o _sbrk() - https://www.elektroda.pl/rtvforum/topic1443142.html

    printf i sprintf wymagają OGROMNEGO stosu, powiększ w opcjach (gdziekolwiek to masz) dla trybu głównego do kilku kilobajtów - powinno pomóc.

    Z tymi zawiłościami już nie przesadzajmy - wszystko da się rozwiązać, ale - nie wiedzieć czemu - każdy używający tego DARMOWEGO softu oczekuje, że weźmie jakiś Makefile, jakiś skrypt, wklei jakiś kod, skompiluje, wrzuci i odpali no i gotowe. Pierwszy problem i od razu - błąd kompilatora, do kosza z nim.

    Co do pytania, czemu działa z nowym yagarto, a nie działa z CS - nie wiem, ale yagarto i najnowsze CS używają innych wersji kompilatora i innych wersji niektórych składników. Akurat newlib, który jest w tej zabawie najważniejszy, jest taki sam <:

    4\/3!!
  • #5
    Wilku
    Level 17  
    Dzięki za naprowadzenie, poczytamy - zobaczymy. Co do środowiska - to faktycznie spodziewałem się więcej od tego darmowego softu. Mniej więcej tyle, co po gcc dla AVR. No ale cóż, widzę że musi jeszcze trochę wody upłynąć żebym ściągnął jakiś kod, jakiś skrypt linkera i makefile "uniwersalny" i żeby ruszyło bez dwóch dni zabiegów nad samym usuwaniem błedów... Co do Keila - jakby mnie było stać na wspomniane 3000$, to by tego posta nie było ;). Używałem darmowej wersji z ciekawości dla porównania.
    Czy ktoś kto odpalił serwer www na uIP może się podzielić wrażeniami z jego działania? Jak z szybkością, działaniem na różnych przeglądarkach. Może jakiś link do stronki na nim?
  • #6
    User removed account
    User removed account  
  • #7
    Freddie Chopin
    MCUs specialist
    albertb wrote:
    Moim zdaniem różnice pomiędzy CS a yagarto nie wynikają z różnych wersji użytych programów. Ich funkcjonalność w zastosowaniach, o których mowa, jest praktycznie taka sama. Natomiast różne zachowanie wynika z różnych założeń projektowych przy kompilacji. Np czy funkcje biblioteczne mają być reentrant, czy nie, czy mają być dołączone w zestawie, czy użytkownik ma je dołączyć samodzielnie itp. Każda z tych decyzji ma swoje wady i zalety.

    Zgadza się, ale zarówno CS jak i Yagarto mają newliba skompilowanego dla "reentrant syscalls" <: Chyba że info na stronie Yagarto jest nieaktualne i obecnie jest już inaczej. CS na pewno wymaga syscalls.

    Quote:
    Ale jak dograsz swoje środowisko, to dorzuć wnioski do projektu Freddiego.

    O! Właśnie <:

    4\/3!!