eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikalwIP - odbieranie danych przez TCP › Re: lwIP - odbieranie danych przez TCP
  • Data: 2022-10-02 21:06:11
    Temat: Re: lwIP - odbieranie danych przez TCP
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 2.10.2022 15:05, Marek wrote:

    > Teraz mi się przypomniało, że miałem podobne problemy z tym projektem, z
    > socket buf  na spiram nawet 128kB (używany wewnętrznie przez stos MLA)
    > powodował po pewnej chwili buffer underrun a o wiele mniejszy bufor
    > aplikacyjny  na dane (ale nie socket buffer) w ram mcu dawał spokojnie
    > radę.

    Jestem coraz mocniej przekonany, że winę za ten stan rzeczy może ponosić
    zbyt mały rozmiar bufora odbiorczego gniazda sieciowego. W momencie gdy
    aktualny pakiet jest przetwarzany (dane z niego są ładowane do pamięci
    SPI) brakuje miejsca na przyjęcie kolejnego i wymuszana jest
    retransmisja, powodująca w efekcie spowolnienie transmisji.

    Przypomniałem sobie w międzyczasie, że bardzo podobny problem miałem na
    prototypie tej konstrukcji, pracującej na PIC24FJ256DA210. Tam też nie
    udało mi się uzyskać poprawnego odtwarzania streamów większych niż 32
    kbps. Uznałem wtedy, że winę za to musi ponosić zbyt niskie taktowanie
    magistrali SPI, na której pracuje ENC28J60. Wtedy się nad tym za bardzo
    nie zastanawiałem, bo dysponowałem już nowsza wersją hardware'u. Jednak
    teraz z perspektywy czasu wydało mi się to dziwne, bo w końcu 16 MHz to
    nie mało.

    Przypomniałem sobie także, że w tym projekcie na PIC24 także miałem
    problemy z pamięcią. Układ ma co prawda 96kB RAM-u, jednak korzystanie z
    niej nie jest takie oczywiste, bo tylko 32kB to dostępna bezpośrednio
    pamięć, w której może znajdować się stos i sterta. Reszta to specjalna
    pamięć stronnicowana, w której można umieszczać np. bufory ba dane.
    Jednak z uwagi na to, że trzeba z nią postępować w odpowiedni sposób,
    nie da się z niej bezpośrednio korzystać w standardowych bibliotekach.
    W pewnym momencie zacząłem mieć problemy, które interpretowałem jako
    nadpisywanie stosu. Pozmniejszałem więc rozmiary wszystkich buforów,
    które musiały się mieścić głównej pamięci - w tym buforów odbiorczych
    gniazd sieciowych.

    Teraz przeprosiłem się z tym projektem na PIC24 i przyjrzałem mu się
    bliżej. Po pierwsze wykorzystałem tę dodatkową pamięć (EDS) do
    zaimplementowania 16kB bufora cyklicznego na dane audio. Już samo to
    pozwoliło mi zaoszczędzić trochę głównej pamięci. Po drugie wczytałem
    się trochę w opcje konfiguracyjne i zobaczyłem, że ten procesor ma
    ustawieni o nazwie "Data model", które może przyjmować wartość "small"
    lub "large". W "small" wszystkie zmienne statyczne oraz globalne muszą
    zmieścić się w pierwszych 8kB RAM-u. W "large" nie ma tego ograniczenia.
    Okazuje się, że to właśnie to ustawienie (a nie nadpisywanie stosu)
    powodowało u mnie problemy. Okazało się więc, że tak naprawdę mam
    jeszcze całkiem sporo "głównej" pamięci do zagospodarowania.

    Pozwoliło mi to zwiększyć rozmiar bufora odbiorczego gniazda sieciowego
    do ponad 6kB. To zdecydowanie poprawiło sytuację. Streamy 192kbps nadal
    nie odtwarzają się poprawnie, ale te 128kbps i 160kbps już tak.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: